vitessio/vitess · error

no vdiff found for UUID %s keyspace %s and workflow %s on ta

Error message

no vdiff found for UUID %s keyspace %s and workflow %s on tablet %s

What it means

handleShowAction queries _vt.vdiff_tablet for the given UUID/keyspace/workflow; when zero rows are returned it errors that no vdiff matching those identifiers exists on this tablet. VDiff show is per-tablet, so this can occur even when the vdiff exists elsewhere in the workflow.

Source

Thrown at go/vt/vttablet/tabletmanager/vdiff/action.go:341

		}
	}
	if vdiffUUID != "" {
		resp.VdiffUuid = vdiffUUID
		query, err := sqlparser.ParseAndBind(sqlGetVDiffByKeyspaceWorkflowUUID,
			sqltypes.StringBindVariable(req.Keyspace),
			sqltypes.StringBindVariable(req.Workflow),
			sqltypes.StringBindVariable(vdiffUUID),
			sqltypes.StringBindVariable(vde.dbName),
		)
		if err != nil {
			return err
		}
		if qr, err = dbClient.ExecuteFetch(query, 1); err != nil {
			return err
		}
		switch len(qr.Rows) {
		case 0:
			return fmt.Errorf("no vdiff found for UUID %s keyspace %s and workflow %s on tablet %s",
				vdiffUUID, req.Keyspace, req.Workflow, topoproto.TabletAliasString(vde.thisTablet.Alias))
		case 1:
			row := qr.Named().Row()
			vdiffID, _ := row["id"].ToInt64()
			summary, err := vde.getVDiffSummary(vdiffID, dbClient, req.GetOptions().GetReportOptions())
			resp.Output = summary
			if err != nil {
				return err
			}
		default:
			return fmt.Errorf("too many vdiffs found (%d) for UUID %s keyspace %s and workflow %s on tablet %s",
				len(qr.Rows), vdiffUUID, req.Keyspace, req.Workflow, topoproto.TabletAliasString(vde.thisTablet.Alias))
		}
	}
	switch req.ActionArg {
	case AllActionArg:
		query, err := sqlparser.ParseAndBind(sqlGetMostRecentVDiffByKeyspaceWorkflow,
			sqltypes.StringBindVariable(req.Keyspace),

View on GitHub (pinned to 01a25a7d17)

Solutions

  1. List what exists: vtctldclient VDiff show (without UUID) for the workflow
  2. Verify the UUID spelling and that the workflow/keyspace match the original create
  3. Target the correct tablet via --tablet-uuid where the vdiff was created
  4. Create the vdiff if it never existed on this workflow/tablet

Example fix

// before
vtctldclient VDiff show --keyspace c --workflow w --uuid wrong-id
// after: list available vdiffs first
vtctldclient VDiff show --keyspace c --workflow w
vtctldclient VDiff show --keyspace c --workflow w --uuid <listed-uuid>
Defensive patterns

Strategy: validation

Validate before calling

qr, _ := dbClient.ExecuteFetch("SELECT id FROM _vt.vdiff_tablet WHERE uuid=? AND keyspace=? AND workflow=?", 1, true)
if len(qr.Rows) == 0 { return errors.New("no matching vdiff; run create first") }

Try / catch

if strings.Contains(err.Error(), "no vdiff found for UUID") {
    // fall back to listing all vdiffs for the workflow
}

Prevention

When it happens

Trigger: vdiff show (or lastly show with a specific UUID) where the UUID+keyspace+workflow combination has no row on the queried tablet; omitting --tablet-uuid and hitting a tablet without the record.

Common situations: Querying show before any create; showing on the wrong tablet or before the vdiff propagated; typo in UUID; workflow renamed so the stored workflow no longer matches; tablet's _vt rows cleaned up after completion.

Understand the failure class

Background: Record Not Found Errors: "not found", RecordNotFound, and "was not found" — what they mean and how to fix them — this error's family across 28 libraries.

Related errors


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