{"record":{"id":"0be9b9001804b946","repo":"vitessio/vitess","slug":"failed-to-getcellinfonames-w","errorCode":null,"errorMessage":"failed to GetCellInfoNames: %w","messagePattern":"failed to GetCellInfoNames: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"go/vt/vtadmin/cluster/cluster.go","lineNumber":1060,"sourceCode":"// Note: specifying a cell name that does not exist in the cluster fails the\n// overall request.\n//\n// If req.NamesOnly is set, each ClusterCellInfo will only contain the Cluster\n// and Name fields. req.Cells takes precedence over this option.\nfunc (c *Cluster) GetCellInfos(ctx context.Context, req *vtadminpb.GetCellInfosRequest) ([]*vtadminpb.ClusterCellInfo, error) {\n\tspan, ctx := trace.NewSpan(ctx, \"Cluster.GetCellInfos\")\n\tdefer span.Finish()\n\n\tnames := req.Cells\n\tif len(names) == 0 {\n\t\tif err := c.topoReadPool.Acquire(ctx); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"GetCellInfoNames() failed to acquire topoReadPool: %w\", err)\n\t\t}\n\t\tresp, err := c.Vtctld.GetCellInfoNames(ctx, &vtctldatapb.GetCellInfoNamesRequest{})\n\t\tc.topoReadPool.Release()\n\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"failed to GetCellInfoNames: %w\", err)\n\t\t}\n\n\t\tnames = resp.Names\n\t}\n\n\tnamesOnly := req.NamesOnly\n\tif namesOnly && len(req.Cells) > 0 {\n\t\tlog.Warn(\"Cluster.GetCellInfos: req.Cells and req.NamesOnly set, ignoring NamesOnly\")\n\t\tnamesOnly = false\n\t}\n\n\tspan.Annotate(\"names_only\", namesOnly)\n\tspan.Annotate(\"cells\", req.Cells) // deliberately not the cellnames we (maybe) fetched above\n\n\tcpb := c.ToProto()\n\tinfos := make([]*vtadminpb.ClusterCellInfo, 0, len(names))\n\tif namesOnly {\n\t\tfor _, name := range names {","sourceCodeStart":1042,"sourceCodeEnd":1078,"githubUrl":"https://github.com/vitessio/vitess/blob/01a25a7d176f94613b8d59d799f438380a8760e4/go/vt/vtadmin/cluster/cluster.go#L1042-L1078","documentation":"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.","triggerScenarios":"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.","commonSituations":"etcd/zk topology cluster down or election issues; vtctld restarted; network partition; permission problems reading the topology cells path.","solutions":["Check vtctld and topology service health","Inspect the wrapped root-cause error and vtctld logs","Retry the request","Verify vtadmin's topology connection settings for this cluster"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"conn, err := net.DialTimeout(\"tcp\", vtctldAddr, 2*time.Second)\nif err != nil { return fmt.Errorf(\"vtctld unreachable, GetCellInfoNames will fail: %w\", err) }","typeGuard":null,"tryCatchPattern":"cells, err := cluster.GetCellInfos(ctx, req)\nif err != nil && strings.Contains(err.Error(), \"GetCellInfoNames\") {\n    // topology/vtctld outage: surface to user, check topo health before retry\n    return fmt.Errorf(\"cannot enumerate cells: %w\", err)\n}","preventionTips":["Monitor etcd/zk topology health","Alert on vtctld liveness","Verify topology credentials/permissions","Retry transient topo failures with backoff"],"tags":["vtadmin","topology","vtctld","rpc"],"backgroundTag":"topology-rpc-failed","analyzedSha":"01a25a7d176f94613b8d59d799f438380a8760e4","analyzedAt":"2026-09-01T17:28:30.605Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}