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
- Read the wrapped cause to identify the failing cluster and root error
- Confirm vtctld for that cluster is up and can reach the topo server
- Check the topo server health (etcd/zk) and cell alias entries
- 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
- Monitor etcd/zk topology health
- Verify cell alias entries exist in the topo
- Keep vtadmin cluster definitions current
- Retry transient topo errors with backoff
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
- parse error
- failed to delete tablet: %w
- GetKeyspaces(cluster = %s) failed: %w
- failed to GetCellInfoNames: %w
- GetCellInfo(%s) failed: %w
AI-assisted analysis of vitessio/vitess@01a25a7d17 (2026-09-01).
Data as JSON: /api/errors/7cf2144ffd6dd0f4.
Report an issue: GitHub.