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 = err

View on GitHub (pinned to 01a25a7d17)

Solutions

  1. Write a valid empty record via `vtctldclient ApplyKeyspaceRoutingRules -rules '{"rules": []}'` (or reapply intended rules), then rebuild.
  2. Inspect the KeyspaceRoutingRules topo node and restore/recreate it if missing or malformed.
  3. Resolve the underlying topo error (connectivity, permissions) surfaced in the wrapped cause from the logs.
  4. 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

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


AI-assisted analysis of vitessio/vitess@01a25a7d17 (2026-09-01). Data as JSON: /api/errors/5ce4eba75a7cce04. Report an issue: GitHub.