vitessio/vitess · error
GetWorkflows(keyspace = %s, active_only = %v) failed: %w
Error message
GetWorkflows(keyspace = %s, active_only = %v) failed: %w
What it means
After acquiring a workflowReadPool slot, the per-keyspace GetWorkflows vtctld RPC itself failed. The error is wrapped with the keyspace and active_only flag so operators know exactly which keyspace's workflow query broke. Other keyspaces may still succeed because each goroutine fails independently.
Source
Thrown at go/vt/vtadmin/cluster/cluster.go:807
span.Annotate("keyspace", ks)
span.Annotate("active_only", opts.ActiveOnly)
if err := c.workflowReadPool.Acquire(ctx); err != nil {
err = fmt.Errorf("GetWorkflows(keyspace = %s, active_only = %v) failed to acquire workflowReadPool: %w", ks, opts.ActiveOnly, err)
rec.RecordError(err)
return
}
resp, err := c.Vtctld.GetWorkflows(ctx, &vtctldatapb.GetWorkflowsRequest{
Keyspace: ks,
ActiveOnly: opts.ActiveOnly,
IncludeLogs: true,
})
c.workflowReadPool.Release()
if err != nil {
err = fmt.Errorf("GetWorkflows(keyspace = %s, active_only = %v) failed: %w", ks, opts.ActiveOnly, err)
rec.RecordError(err)
return
}
workflows := make([]*vtadminpb.Workflow, 0, len(resp.Workflows))
for _, wf := range resp.Workflows {
workflow := &vtadminpb.Workflow{
Cluster: clusterpb,
Keyspace: ks,
Workflow: wf,
}
if opts.Filter(workflow) {
workflows = append(workflows, workflow)
}
}
View on GitHub (pinned to 01a25a7d17)
Solutions
- Inspect the wrapped %w cause for the vtctld-side error
- Retry the failed keyspace's query
- Confirm the keyspace still exists in the topology
- Check vtctld logs for VReplication/topo errors for that keyspace
Defensive patterns
Strategy: retry
Validate before calling
// verify keyspace exists before querying workflows
resp, err := vtctldClient.GetKeyspaces(ctx, &vtctldatapb.GetKeyspacesRequest{})
if err != nil { return err }
var found bool
for _, ks := range resp.Keyspaces { if ks.Name == keyspace { found = true } }
if !found { return fmt.Errorf("keyspace %s does not exist", keyspace) } Try / catch
wfs, err := cluster.GetWorkflows(ctx, keyspace, opts)
if err != nil {
var perKS string
if errors.As(err, &perKS) || strings.Contains(err.Error(), keyspace) {
// retry just this keyspace
}
return err
} Prevention
- Check keyspace existence before workflow queries
- Monitor vtctld VReplication errors
- Avoid querying keyspaces mid-reshard/deletion
- Set sane timeouts for IncludeLogs requests
When it happens
Trigger: Per-keyspace c.Vtctld.GetWorkflows RPC returning an error — vtctld unavailable, keyspace missing from topology mid-flight, or RPC error while including workflow logs.
Common situations: Keyspace being deleted/resharded concurrently with the query; vtctld error reading VReplication workflow state; transient network blip; ctx deadline during a large IncludeLogs fetch.
Related errors
- invalid key:value pair
- ReloadSchemas(cluster = %s) failed: %w
- Error setting tablet to read-only: %w
- Error setting tablet to read-write: %w
- GetKeyspaces(cluster = %s) failed: %w
AI-assisted analysis of vitessio/vitess@01a25a7d17 (2026-09-01).
Data as JSON: /api/errors/33ca8557d13f7e49.
Report an issue: GitHub.