vitessio/vitess · error

failed to GetCellsAliases for cluster %s: %w

Error message

failed to GetCellsAliases for cluster %s: %w

What it means

VTAdmin fetches cell aliases from each configured cluster concurrently via c.GetCellsAliases; any per-cluster failure is recorded as this wrapped error carrying the cluster ID and the underlying cause. The aggregate RPC fails when any cluster records an error.

Source

Thrown at go/vt/vtadmin/api.go:914

	var (
		m       sync.Mutex
		wg      sync.WaitGroup
		rec     concurrency.AllErrorRecorder
		aliases []*vtadminpb.ClusterCellsAliases
	)

	for _, c := range clusters {
		if !api.authz.IsAuthorized(ctx, c.ID, rbac.CellsAliasResource, rbac.GetAction) {
			continue
		}

		wg.Add(1)
		go func(c *cluster.Cluster) {
			defer wg.Done()

			clusterAliases, err := c.GetCellsAliases(ctx)
			if err != nil {
				rec.RecordError(fmt.Errorf("failed to GetCellsAliases for cluster %s: %w", c.ID, err))
				return
			}

			m.Lock()
			defer m.Unlock()
			aliases = append(aliases, clusterAliases)
		}(c)
	}

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

	return &vtadminpb.GetCellsAliasesResponse{
		Aliases: aliases,
	}, nil
}

View on GitHub (pinned to 01a25a7d17)

Solutions

  1. Read the wrapped cause to identify the failing cluster and root error
  2. Confirm vtctld for that cluster is up and can reach the topo server
  3. Check the topo server health (etcd/zk) and cell alias entries
  4. Correct the vtadmin cluster definition if the cluster was renamed or removed

Example fix

// before
clusterAliases, err := c.GetCellsAliases(ctx)
if err != nil {
	rec.RecordError(fmt.Errorf("failed to GetCellsAliases for cluster %s: %w", c.ID, err))
	return
}
// after: ensure topo/vtctld healthy; then the same call succeeds
clusterAliases, err := c.GetCellsAliases(ctx)
if err != nil {
	rec.RecordError(fmt.Errorf("failed to GetCellsAliases for cluster %s: %w", c.ID, err))
	return
}
Defensive patterns

Strategy: try-catch

Validate before calling

// verify topo reachability per cluster before the call
for _, c := range clusters {
	if _, err := c.Vtctld.GetCellsAliases(ctx); err != nil {
		log.Printf("cluster %s topo unhealthy: %v", c.ID, err)
	}
}

Type guard

func aliasesFailed(rec concurrency.AllErrorRecorder) bool { return rec.HasErrors() }

Try / catch

resp, err := client.GetCellsAliases(ctx, req)
if err != nil {
	// parse wrapped cluster ID from "failed to GetCellsAliases for cluster <id>: ..."
	return fmt.Errorf("cells aliases unavailable, check topo: %w", err)
}

Prevention

When it happens

Trigger: Calling vtadmin GetCellsAliases when a cluster's vtctld call GetCellsAliases fails — vtctld unreachable, topology (etcd/zk) unavailable, or the topology lacks alias data causing an error.

Common situations: Topology store (etcd2/zk2) outage; vtctld cannot reach topo server; cluster misconfigured in vtadmin; stale credentials.

Related errors


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