func (zkts *Server) GetSrvShard(cell, keyspace, shard string) (*topo.SrvShard, error) { path := zkPathForVtShard(cell, keyspace, shard) data, stat, err := zkts.zconn.Get(path) if err != nil { if zookeeper.IsError(err, zookeeper.ZNONODE) { err = topo.ErrNoNode } return nil, err } return topo.NewSrvShard(data, stat.Version()) }
func (tr *TopoReader) GetEndPoints(req topo.GetEndPointsArgs, reply *topo.VtnsAddrs) (err error) { shardPath := zkPathForVtShard(req.Cell, req.Keyspace, req.Shard) zkrReply := &zk.ZkNode{} if err := tr.zkr.Get(&zk.ZkPath{Path: shardPath}, zkrReply); err != nil { return err } shard, err := topo.NewSrvShard(zkrReply.Data, zkrReply.Stat.Version()) if err != nil { return err } *reply = shard.AddrsByType[req.TabletType] return nil }
func (zkts *Server) GetSrvShard(cell, keyspace, shard string) (*topo.SrvShard, error) { path := zkPathForVtShard(cell, keyspace, shard) data, stat, err := zkts.zconn.Get(path) if err != nil { if zookeeper.IsError(err, zookeeper.ZNONODE) { err = topo.ErrNoNode } return nil, err } srvShard := topo.NewSrvShard(int64(stat.Version())) if len(data) > 0 { if err := json.Unmarshal([]byte(data), srvShard); err != nil { return nil, fmt.Errorf("SrvShard unmarshal failed: %v %v", data, err) } } return srvShard, nil }
// GetSrvShard implements topo.Server. func (s *Server) GetSrvShard(ctx context.Context, cellName, keyspace, shard string) (*topo.SrvShard, error) { cell, err := s.getCell(cellName) if err != nil { return nil, err } resp, err := cell.Get(srvShardFilePath(keyspace, shard), false /* sort */, false /* recursive */) if err != nil { return nil, convertError(err) } if resp.Node == nil { return nil, ErrBadResponse } value := topo.NewSrvShard(int64(resp.Node.ModifiedIndex)) if err := json.Unmarshal([]byte(resp.Node.Value), value); err != nil { return nil, fmt.Errorf("bad serving shard data (%v): %q", err, resp.Node.Value) } return value, nil }