{"record":{"id":"c8cf8e5725a786bb","repo":"vitessio/vitess","slug":"getcellinfo-s-failed-to-acquire-toporeadpool-w","errorCode":null,"errorMessage":"GetCellInfo(%s) failed to acquire topoReadPool: %w","messagePattern":"GetCellInfo\\((.+?)\\) failed to acquire topoReadPool: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"go/vt/vtadmin/cluster/cluster.go","lineNumber":1100,"sourceCode":"\t\t\t})\n\t\t}\n\n\t\treturn infos, nil\n\t}\n\n\tvar (\n\t\tm   sync.Mutex\n\t\twg  sync.WaitGroup\n\t\trec concurrency.AllErrorRecorder\n\t)\n\n\tfor _, name := range names {\n\t\twg.Add(1)\n\t\tgo func(name string) {\n\t\t\tdefer wg.Done()\n\n\t\t\tif err := c.topoReadPool.Acquire(ctx); err != nil {\n\t\t\t\trec.RecordError(fmt.Errorf(\"GetCellInfo(%s) failed to acquire topoReadPool: %w\", name, err))\n\t\t\t\treturn\n\t\t\t}\n\t\t\tresp, err := c.Vtctld.GetCellInfo(ctx, &vtctldatapb.GetCellInfoRequest{\n\t\t\t\tCell: name,\n\t\t\t})\n\t\t\tc.topoReadPool.Release()\n\n\t\t\tif err != nil {\n\t\t\t\trec.RecordError(fmt.Errorf(\"GetCellInfo(%s) failed: %w\", name, 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\tinfos = append(infos, &vtadminpb.ClusterCellInfo{\n\t\t\t\tCluster:  cpb,\n\t\t\t\tName:     name,\n\t\t\t\tCellInfo: resp.CellInfo,","sourceCodeStart":1082,"sourceCodeEnd":1118,"githubUrl":"https://github.com/vitessio/vitess/blob/01a25a7d176f94613b8d59d799f438380a8760e4/go/vt/vtadmin/cluster/cluster.go#L1082-L1118","documentation":"For each requested cell, GetCellInfos spawns a goroutine gated by topoReadPool. If Acquire fails, that cell's info is skipped and recorded as this error. It reflects concurrency-limit/context pressure before any vtctld call happens.","triggerScenarios":"Requesting many cells while topoReadPool is saturated and ctx is canceled or times out waiting on Acquire for a given cell name.","commonSituations":"Requests spanning all cells in a multi-region deployment; small topo pool; aggressive client timeouts; thundering-herd of concurrent vtadmin requests.","solutions":["Retry with a longer timeout","Increase topoReadPool capacity","Request fewer cells per call","Check for slow GetCellInfo RPCs monopolizing pool slots"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"cells, err := cluster.GetCellInfos(ctx, req)\nif err != nil && strings.Contains(err.Error(), \"topoReadPool\") {\n    // back off, retry with fewer cells or longer timeout\n}","preventionTips":["Request cells in smaller batches","Increase topoReadPool capacity","Use deadlines that exceed pool-wait + RPC time","Smooth out bursty cell-info traffic"],"tags":["vtadmin","semaphore","concurrency","timeout"],"backgroundTag":"semaphore-acquire-cancelled","analyzedSha":"01a25a7d176f94613b8d59d799f438380a8760e4","analyzedAt":"2026-09-01T17:28:30.605Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}