vitessio/vitess · error

GetKeyspaces(cluster = %s): %w

Error message

GetKeyspaces(cluster = %s): %w

What it means

Cluster.GetSrvKeyspaces first lists all keyspaces via Vtctld.GetKeyspaces; if that RPC fails it wraps the error with the cluster ID. This is a transport/topo-level failure before any per-keyspace serving-tablet lookups begin (those produce error 864 instead).

Source

Thrown at go/vt/vtadmin/cluster/cluster.go:1270

	}

	wg.Wait()
	if rec.HasErrors() {
		return nil, rec.Error()
	}

	return keyspaces, nil
}

// GetSrvKeyspaces returns all SrvKeyspaces for all keyspaces in a cluster.
func (c *Cluster) GetSrvKeyspaces(ctx context.Context, cells []string) (map[string]*vtctldatapb.GetSrvKeyspacesResponse, error) {
	span, ctx := trace.NewSpan(ctx, "Cluster.GetKeyspaces")
	AnnotateSpan(c, span)

	defer span.Finish()
	keyspaces, err := c.Vtctld.GetKeyspaces(ctx, &vtctldatapb.GetKeyspacesRequest{})
	if err != nil {
		return nil, fmt.Errorf("GetKeyspaces(cluster = %s): %w", c.ID, err)
	}

	var (
		m            sync.Mutex
		wg           sync.WaitGroup
		rec          concurrency.AllErrorRecorder
		srvKeyspaces = make(map[string]*vtctldatapb.GetSrvKeyspacesResponse, len(keyspaces.Keyspaces))
	)

	for _, keyspace := range keyspaces.Keyspaces {
		wg.Add(1)

		go func(keyspace *vtctldatapb.Keyspace) {
			defer wg.Done()
			srv_keyspaces, err := c.Vtctld.GetSrvKeyspaces(ctx, &vtctldatapb.GetSrvKeyspacesRequest{Keyspace: keyspace.Name, Cells: cells})
			if err != nil {
				rec.RecordError(fmt.Errorf("GetSrvKeyspaces(keyspace = %s): %w", keyspace.Name, err))
				return

View on GitHub (pinned to 01a25a7d17)

Solutions

  1. Check the wrapped cause for the concrete RPC/topo error
  2. Verify vtctld is running and reachable from vtadmin (address, port, TLS)
  3. Check topo server health (etcd/zk)
  4. Retry once infrastructure is restored
Defensive patterns

Strategy: try-catch

Validate before calling

// Go: verify vtctld reachability before GetSrvKeyspaces
if err := c.Vtctld.Ping(ctx); err != nil {
	return fmt.Errorf("vtctld unreachable: %w", err)
}

Try / catch

srv, err := c.GetSrvKeyspaces(ctx, req)
if err != nil {
	if strings.Contains(err.Error(), "GetKeyspaces(cluster =") {
		// vtctld/topo-level failure: check infra before retrying
	}
	return err
}

Prevention

When it happens

Trigger: Calling cluster.GetSrvKeyspaces(ctx, req) when the vtctld GetKeyspaces RPC fails: vtctld unreachable, topo unavailable, or request context cancelled.

Common situations: vtctld process down or restarting; network partition between vtadmin and vtctld; topo (etcd/zookeeper) outage; vtadmin pointed at the wrong vtctld address.

Related errors


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