{"record":{"id":"7cf2144ffd6dd0f4","repo":"vitessio/vitess","slug":"failed-to-getcellsaliases-for-cluster-s-w","errorCode":null,"errorMessage":"failed to GetCellsAliases for cluster %s: %w","messagePattern":"failed to GetCellsAliases for cluster (.+?): %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"go/vt/vtadmin/api.go","lineNumber":914,"sourceCode":"\tvar (\n\t\tm       sync.Mutex\n\t\twg      sync.WaitGroup\n\t\trec     concurrency.AllErrorRecorder\n\t\taliases []*vtadminpb.ClusterCellsAliases\n\t)\n\n\tfor _, c := range clusters {\n\t\tif !api.authz.IsAuthorized(ctx, c.ID, rbac.CellsAliasResource, rbac.GetAction) {\n\t\t\tcontinue\n\t\t}\n\n\t\twg.Add(1)\n\t\tgo func(c *cluster.Cluster) {\n\t\t\tdefer wg.Done()\n\n\t\t\tclusterAliases, err := c.GetCellsAliases(ctx)\n\t\t\tif err != nil {\n\t\t\t\trec.RecordError(fmt.Errorf(\"failed to GetCellsAliases for cluster %s: %w\", c.ID, err))\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tm.Lock()\n\t\t\tdefer m.Unlock()\n\t\t\taliases = append(aliases, clusterAliases)\n\t\t}(c)\n\t}\n\n\twg.Wait()\n\tif rec.HasErrors() {\n\t\treturn nil, rec.Error()\n\t}\n\n\treturn &vtadminpb.GetCellsAliasesResponse{\n\t\tAliases: aliases,\n\t}, nil\n}","sourceCodeStart":896,"sourceCodeEnd":932,"githubUrl":"https://github.com/vitessio/vitess/blob/01a25a7d176f94613b8d59d799f438380a8760e4/go/vt/vtadmin/api.go#L896-L932","documentation":"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.","triggerScenarios":"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.","commonSituations":"Topology store (etcd2/zk2) outage; vtctld cannot reach topo server; cluster misconfigured in vtadmin; stale credentials.","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"],"exampleFix":"// before\nclusterAliases, err := c.GetCellsAliases(ctx)\nif err != nil {\n\trec.RecordError(fmt.Errorf(\"failed to GetCellsAliases for cluster %s: %w\", c.ID, err))\n\treturn\n}\n// after: ensure topo/vtctld healthy; then the same call succeeds\nclusterAliases, err := c.GetCellsAliases(ctx)\nif err != nil {\n\trec.RecordError(fmt.Errorf(\"failed to GetCellsAliases for cluster %s: %w\", c.ID, err))\n\treturn\n}","handlingStrategy":"try-catch","validationCode":"// verify topo reachability per cluster before the call\nfor _, c := range clusters {\n\tif _, err := c.Vtctld.GetCellsAliases(ctx); err != nil {\n\t\tlog.Printf(\"cluster %s topo unhealthy: %v\", c.ID, err)\n\t}\n}","typeGuard":"func aliasesFailed(rec concurrency.AllErrorRecorder) bool { return rec.HasErrors() }","tryCatchPattern":"resp, err := client.GetCellsAliases(ctx, req)\nif err != nil {\n\t// parse wrapped cluster ID from \"failed to GetCellsAliases for cluster <id>: ...\"\n\treturn fmt.Errorf(\"cells aliases unavailable, check topo: %w\", err)\n}","preventionTips":["Monitor etcd/zk topology health","Verify cell alias entries exist in the topo","Keep vtadmin cluster definitions current","Retry transient topo errors with backoff"],"tags":["vtadmin","vtctld","topology","cell-aliases"],"backgroundTag":"topology-unavailable","analyzedSha":"01a25a7d176f94613b8d59d799f438380a8760e4","analyzedAt":"2026-09-01T17:28:30.605Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}