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

  1. Inspect the wrapped %w cause for the vtctld-side error
  2. Retry the failed keyspace's query
  3. Confirm the keyspace still exists in the topology
  4. 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

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


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