vitessio/vitess · error
GetKeyspaceRoutingRules failed: %v
Error message
GetKeyspaceRoutingRules failed: %v
What it means
During RebuildSrvVSchema, keyspace-level routing rules are fetched with GetKeyspaceRoutingRules and folded into the published SrvVSchema. This error is thrown when that topo read fails, aborting the rebuild.
Source
Thrown at go/vt/topo/srv_vschema.go:212
if finalErr != nil {
return finalErr
}
rr, err := ts.GetRoutingRules(ctx)
if err != nil {
return fmt.Errorf("GetRoutingRules failed: %v", err)
}
srvVSchema.RoutingRules = rr
srr, err := ts.GetShardRoutingRules(ctx)
if err != nil {
return fmt.Errorf("GetShardRoutingRules failed: %v", err)
}
srvVSchema.ShardRoutingRules = srr
krr, err := ts.GetKeyspaceRoutingRules(ctx)
if err != nil {
return fmt.Errorf("GetKeyspaceRoutingRules failed: %v", err)
}
srvVSchema.KeyspaceRoutingRules = krr
mr, err := ts.GetMirrorRules(ctx)
if err != nil {
return fmt.Errorf("GetMirrorRules failed: %v", err)
}
srvVSchema.MirrorRules = mr
// now save the SrvVSchema in all cells in parallel
for _, cell := range cells {
wg.Add(1)
go func(cell string) {
defer wg.Done()
if err := ts.UpdateSrvVSchema(ctx, cell, srvVSchema); err != nil {
log.Error(fmt.Sprintf("%v: UpdateSrvVSchema(%v) failed", err, cell))
mu.Lock()
finalErr = errView on GitHub (pinned to 01a25a7d17)
Solutions
- Write a valid empty record via `vtctldclient ApplyKeyspaceRoutingRules -rules '{"rules": []}'` (or reapply intended rules), then rebuild.
- Inspect the KeyspaceRoutingRules topo node and restore/recreate it if missing or malformed.
- Resolve the underlying topo error (connectivity, permissions) surfaced in the wrapped cause from the logs.
- Retry the rebuild; the operation is idempotent and safe to re-run once the topo read succeeds.
Example fix
// before: missing KeyspaceRoutingRules node
vtctldclient RebuildVSchema commerce // GetKeyspaceRoutingRules failed
// after
vtctldclient ApplyKeyspaceRoutingRules -rules '{"rules": []}'
vtctldclient RebuildVSchema commerce Defensive patterns
Strategy: validation
Validate before calling
if _, err := ts.GetKeyspaceRoutingRules(ctx); err != nil {
ts.SaveKeyspaceRoutingRules(ctx, &vschemapb.KeyspaceRoutingRules{Rules: []*vschemapb.KeyspaceRoutingRule{}})
} Try / catch
err := ts.RebuildSrvVSchema(ctx, cells)
if err != nil && strings.Contains(err.Error(), "GetKeyspaceRoutingRules failed") {
if reErr := ts.SaveKeyspaceRoutingRules(ctx, &vschemapb.KeyspaceRoutingRules{}); reErr == nil {
err = ts.RebuildSrvVSchema(ctx, cells)
}
}
return err Prevention
- Create keyspace routing rules via ApplyKeyspaceRoutingRules, never by editing topo nodes directly.
- Back up all routing-rule topo nodes as part of cluster config.
- Avoid concurrent rule applies and vschema rebuilds.
- Check topo RBAC grants for the vtctld service account.
When it happens
Trigger: Calling RebuildSrvVSchema (or callers like ApplyRoutingRules / InitRoutingRules) when the KeyspaceRoutingRules object cannot be read from the topo store — missing node, decode error, or backend failure.
Common situations: KeyspaceRoutingRules topo node deleted by hand or by a faulty script; interrupted apply left partial state; topo backend connectivity loss; RBAC misconfiguration preventing reads on that key.
Related errors
- SrvVSchema has no entry for keyspace %v
- GetKnownCells failed: %v
- GetKeyspaces failed: %v
- GetRoutingRules failed: %v
- GetShardRoutingRules failed: %v
AI-assisted analysis of vitessio/vitess@01a25a7d17 (2026-09-01).
Data as JSON: /api/errors/5ce4eba75a7cce04.
Report an issue: GitHub.