vitessio/vitess · error

no response received for vdiff show of %s.%s(%s)

Error message

no response received for vdiff show of %s.%s(%s)

What it means

displayVDiff2ShowResponse expects the vtctld to return at least one VDiff response entry for a show request over a specific UUID. An empty Responses slice means no tablet/current vdiff record answered, so this error is returned naming the keyspace, workflow, and UUID.

Source

Thrown at go/vt/vtctl/vdiff2.go:353

				if format == "json" {
					wr.Logger().Printf("{}\n")
				} else {
					wr.Logger().Printf("No previous vdiff found for %s.%s\n", keyspace, workflowName)
				}
				return nil
			}
			break
		}
		fallthrough
	default:
		if vdiffUUID == uuid.Nil { // then it must be passed as the action arg
			vdiffUUID, err = uuid.Parse(actionArg)
			if err != nil {
				return err
			}
		}
		if len(output.Responses) == 0 {
			return fmt.Errorf("no response received for vdiff show of %s.%s(%s)", keyspace, workflowName, vdiffUUID.String())
		}
		_, err := displayVDiff2ShowSingleSummary(wr, format, keyspace, workflowName, vdiffUUID.String(), output, verbose)
		return err
	}
}

func displayVDiff2ShowRecent(wr *wrangler.Wrangler, format, keyspace, workflowName, subCommand string, output *wrangler.VDiffOutput) error {
	str := ""
	recent, err := buildVDiff2Recent(output)
	if err != nil {
		return err
	}
	if format == "json" {
		jsonText, err := json.MarshalIndent(recent, "", "\t")
		if err != nil {
			return err
		}
		str = string(jsonText)

View on GitHub (pinned to 01a25a7d17)

Solutions

  1. Run `VDiff -- <ks>.<wf> show all` to confirm which UUIDs actually exist.
  2. Check tablets for the workflow are up and serving (vtctld can reach them).
  3. Verify the workflow exists: check vreplication streams for keyspace/workflow.
  4. Retry after vtctld/topology connectivity is restored.

Example fix

// before
VDiff -- commerce.move.tables show bd2f3e5a-...   // already deleted
// after
VDiff -- commerce.move.tables show all
VDiff -- commerce.move.tables show <uuid from the list>
Defensive patterns

Strategy: try-catch

Validate before calling

const all = runVDiff(`-- ${ks}.${wf} show all`)
if (!all.includes(uuid)) {
  throw new Error(`UUID ${uuid} not present for ${ks}.${wf}; skip show`)
}

Type guard

null

Try / catch

try {
  out = runVDiff(`-- ${ks}.${wf} show ${uuid}`)
} catch (e) {
  if (String(e).includes("no response received")) {
    console.error("No vdiff data returned; verify workflow is active and tablets are reachable")
    out = runVDiff(`-- ${ks}.${wf} show all`)
  } else throw e
}

Prevention

When it happens

Trigger: `VDiff -- <ks>.<wf> show <uuid>` (or show all) where the aggregation produced zero responses — e.g. the vdiff record is gone, the workflow has no tablets responding, or the UUID exists nowhere in the shard data.

Common situations: Showing a UUID after it was already deleted; vtctld able to reach no tablets (shard/tablet down); running show against a workflow whose vdiff never actually started; stale topology cache.

Related errors


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