func (zkts *Server) updateTabletEndpoint(oldValue string, oldStat zk.Stat, addr *topo.VtnsAddr) (newValue string, err error) { if oldStat == nil { // The incoming object doesn't exist - we haven't been placed in the serving // graph yet, so don't update. Assume the next process that rebuilds the graph // will get the updated tablet location. return "", skipUpdateErr } var addrs *topo.VtnsAddrs if oldValue != "" { addrs, err = topo.NewVtnsAddrs(oldValue, oldStat.Version()) if err != nil { return } foundTablet := false for i, entry := range addrs.Entries { if entry.Uid == addr.Uid { foundTablet = true if !topo.VtnsAddrEquality(&entry, addr) { addrs.Entries[i] = *addr } break } } if !foundTablet { addrs.Entries = append(addrs.Entries, *addr) } } else { addrs = topo.NewAddrs() addrs.Entries = append(addrs.Entries, *addr) } return jscfg.ToJson(addrs), nil }
func (zkts *Server) GetSrvTabletType(cell, keyspace, shard string, tabletType topo.TabletType) (*topo.VtnsAddrs, error) { path := zkPathForVtName(cell, keyspace, shard, tabletType) data, stat, err := zkts.zconn.Get(path) if err != nil { if zookeeper.IsError(err, zookeeper.ZNONODE) { err = topo.ErrNoNode } return nil, err } return topo.NewVtnsAddrs(data, stat.Version()) }