vitessio/vitess · error

GetCellInfo( ) failed

Error message

GetCellInfo(%s) failed: %w

What it means

The per-cell GetCellInfo vtctld RPC failed for one cell while others may succeed. The error is recorded with the cell name. Typical causes are vtctld-side failures reading that cell's topology record or the cell's topology backend being down.

Solutions

  1. Inspect the wrapped cause and the named cell's topology record
  2. Verify the cell's topology backend (etcd/zk) is healthy
  3. Remove or fix stale cell records
  4. Retry; if persistent, investigate vtctld logs for that cell
Defensive patterns

Strategy: try-catch

Validate before calling

// check the cell record exists before fetching details
names, err := vtctldClient.GetCellInfoNames(ctx, &vtctldatapb.GetCellInfoNamesRequest{})
if err != nil { return err }
for _, n := range names.Names {
    if n == cell { /* ok */ }
}

Try / catch

cells, err := cluster.GetCellInfos(ctx, req)
if err != nil {
    var missing string
    if strings.Contains(err.Error(), "GetCellInfo(") {
        // parse cell name from message; degrade gracefully (partial results) or retry
    }
    return err
}

Prevention

When it happens

Trigger: c.Vtctld.GetCellInfo RPC error for a specific cell — cell record missing/malformed in topology, that cell's etcd/zk unreachable, or vtctld error.

Common situations: A recently added cell with incomplete topology records; regional topology outage; cell decommissioned but still referenced; network partition to one datacenter.

Related errors


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

Appendix: source

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

		rec concurrency.AllErrorRecorder
	)

	for _, name := range names {
		wg.Add(1)
		go func(name string) {
			defer wg.Done()

			if err := c.topoReadPool.Acquire(ctx); err != nil {
				rec.RecordError(fmt.Errorf("GetCellInfo(%s) failed to acquire topoReadPool: %w", name, err))
				return
			}
			resp, err := c.Vtctld.GetCellInfo(ctx, &vtctldatapb.GetCellInfoRequest{
				Cell: name,
			})
			c.topoReadPool.Release()

			if err != nil {
				rec.RecordError(fmt.Errorf("GetCellInfo(%s) failed: %w", name, err))
				return
			}

			m.Lock()
			defer m.Unlock()
			infos = append(infos, &vtadminpb.ClusterCellInfo{
				Cluster:  cpb,
				Name:     name,
				CellInfo: resp.CellInfo,
			})
		}(name)
	}

	wg.Wait()
	if rec.HasErrors() {
		return nil, rec.Error()
	}

View on GitHub (pinned to 01a25a7d17)