vitessio/vitess · error

failed to GetCellInfoNames: %w

Error message

failed to GetCellInfoNames: %w

What it means

The GetCellInfoNames vtctld RPC used to enumerate cell names failed. It is wrapped as 'failed to GetCellInfoNames' and aborts GetCellInfos since cell names are required to fan out the per-cell lookups. Root cause is almost always topology/vtctld availability.

Source

Thrown at go/vt/vtadmin/cluster/cluster.go:1060

// Note: specifying a cell name that does not exist in the cluster fails the
// overall request.
//
// If req.NamesOnly is set, each ClusterCellInfo will only contain the Cluster
// and Name fields. req.Cells takes precedence over this option.
func (c *Cluster) GetCellInfos(ctx context.Context, req *vtadminpb.GetCellInfosRequest) ([]*vtadminpb.ClusterCellInfo, error) {
	span, ctx := trace.NewSpan(ctx, "Cluster.GetCellInfos")
	defer span.Finish()

	names := req.Cells
	if len(names) == 0 {
		if err := c.topoReadPool.Acquire(ctx); err != nil {
			return nil, fmt.Errorf("GetCellInfoNames() failed to acquire topoReadPool: %w", err)
		}
		resp, err := c.Vtctld.GetCellInfoNames(ctx, &vtctldatapb.GetCellInfoNamesRequest{})
		c.topoReadPool.Release()

		if err != nil {
			return nil, fmt.Errorf("failed to GetCellInfoNames: %w", err)
		}

		names = resp.Names
	}

	namesOnly := req.NamesOnly
	if namesOnly && len(req.Cells) > 0 {
		log.Warn("Cluster.GetCellInfos: req.Cells and req.NamesOnly set, ignoring NamesOnly")
		namesOnly = false
	}

	span.Annotate("names_only", namesOnly)
	span.Annotate("cells", req.Cells) // deliberately not the cellnames we (maybe) fetched above

	cpb := c.ToProto()
	infos := make([]*vtadminpb.ClusterCellInfo, 0, len(names))
	if namesOnly {
		for _, name := range names {

View on GitHub (pinned to 01a25a7d17)

Solutions

  1. Check vtctld and topology service health
  2. Inspect the wrapped root-cause error and vtctld logs
  3. Retry the request
  4. Verify vtadmin's topology connection settings for this cluster
Defensive patterns

Strategy: try-catch

Validate before calling

conn, err := net.DialTimeout("tcp", vtctldAddr, 2*time.Second)
if err != nil { return fmt.Errorf("vtctld unreachable, GetCellInfoNames will fail: %w", err) }

Try / catch

cells, err := cluster.GetCellInfos(ctx, req)
if err != nil && strings.Contains(err.Error(), "GetCellInfoNames") {
    // topology/vtctld outage: surface to user, check topo health before retry
    return fmt.Errorf("cannot enumerate cells: %w", err)
}

Prevention

When it happens

Trigger: GetCellInfos called with empty req.Cells and c.Vtctld.GetCellInfoNames returning an error — vtctld down, topology store unhealthy, or ctx deadline hit during the RPC.

Common situations: etcd/zk topology cluster down or election issues; vtctld restarted; network partition; permission problems reading the topology cells path.

Related errors


AI-assisted analysis of vitessio/vitess@01a25a7d17 (2026-09-01). Data as JSON: /api/errors/0be9b9001804b946. Report an issue: GitHub.