func (agent *ActionAgent) readTablet(ctx context.Context) (*topo.TabletInfo, error) { tablet, err := topo.GetTablet(ctx, agent.TopoServer, agent.TabletAlias) if err != nil { return nil, err } agent.mutex.Lock() agent._tablet = tablet agent.mutex.Unlock() return tablet, nil }
// Does a topo lookup for a single shard, and returns the tablet record of the master tablet. func resolveDestinationShardMaster(ctx context.Context, keyspace, shard string, wr *wrangler.Wrangler) (*topo.TabletInfo, error) { var ti *topo.TabletInfo shortCtx, cancel := context.WithTimeout(ctx, *remoteActionsTimeout) si, err := topo.GetShard(shortCtx, wr.TopoServer(), keyspace, shard) cancel() if err != nil { return ti, fmt.Errorf("unable to resolve destination shard %v/%v", keyspace, shard) } if si.MasterAlias.IsZero() { return ti, fmt.Errorf("no master in destination shard %v/%v", keyspace, shard) } wr.Logger().Infof("Found target master alias %v in shard %v/%v", si.MasterAlias, keyspace, shard) shortCtx, cancel = context.WithTimeout(ctx, *remoteActionsTimeout) ti, err = topo.GetTablet(shortCtx, wr.TopoServer(), si.MasterAlias) cancel() if err != nil { return ti, fmt.Errorf("unable to get master tablet from alias %v in shard %v/%v", si.MasterAlias, keyspace, shard) } return ti, nil }