vitessio/vitess · error

action %s not supported

Error message

action %s not supported

What it means

PerformVDiffAction dispatches on the requested VDiffAction type; if the action value is not one of Create, Delete, Show, etc. known to the tablet, it returns this error. It means the client sent an action this Vitess build's vdiff executor does not implement.

Source

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

	switch action {
	case CreateAction, ResumeAction:
		if err := vde.handleCreateResumeAction(ctx, dbClient, action, req, resp); err != nil {
			return nil, err
		}
	case ShowAction:
		if err := vde.handleShowAction(ctx, dbClient, req, resp); err != nil {
			return nil, err
		}
	case StopAction:
		if err := vde.handleStopAction(ctx, dbClient, req, resp); err != nil {
			return nil, err
		}
	case DeleteAction:
		if err := vde.handleDeleteAction(ctx, dbClient, req, resp); err != nil {
			return nil, err
		}
	default:
		return nil, fmt.Errorf("action %s not supported", action)
	}
	return resp, nil
}

func vdiffSummaryQuery(noSamples bool) string {
	if noSamples {
		return sqlVDiffSummaryNoSamples
	}
	return sqlVDiffSummary
}

func (vde *Engine) getVDiffSummary(vdiffID int64, dbClient binlogplayer.DBClient, reportOpts *tabletmanagerdatapb.VDiffReportOptions) (*query.QueryResult, error) {
	var qr *sqltypes.Result
	var err error

	query, err := sqlparser.ParseAndBind(vdiffSummaryQuery(reportOpts.GetNoSamples()), sqltypes.Int64BindVariable(vdiffID), sqltypes.StringBindVariable(vde.dbName))
	if err != nil {
		return nil, err

View on GitHub (pinned to 01a25a7d17)

Solutions

  1. Upgrade the vttablet tablets to match the vtctld/client version sending the action
  2. Inspect the VDiffRequest being sent and ensure the action enum is explicitly set to a supported value (create, delete, show, etc.)
  3. Check the tablet logs for the raw action value to identify what was received
  4. Rebuild/restart the client tool if it builds the request manually

Example fix

// before
req := &querypb.VDiffRequest{} // action left unset
// after
req := &querypb.VDiffRequest{Action: querypb.VDiffAction_ShowAction}
Defensive patterns

Strategy: validation

Validate before calling

if !slices.Contains([]querypb.VDiffAction{
    querypb.VDiffAction_CreateAction, querypb.VDiffAction_DeleteAction,
    querypb.VDiffAction_ShowAction}, req.Action) {
    return fmt.Errorf("unsupported vdiff action %v", req.Action)
}

Try / catch

if strings.Contains(err.Error(), "action ") && strings.Contains(err.Error(), "not supported") {
    // version skew: upgrade tablets or resend with a supported action
}

Prevention

When it happens

Trigger: Calling VDiff (vtctldserver) against a tablet whose PerformVDiffAction receives an action enum value outside its switch (e.g. a newer client sending an action the tablet's older code doesn't know, or a corrupted/zero enum value).

Common situations: Mixed-version cluster where vtctld sends an action added in a newer release to older tablets; buggy client constructing the VDiffRequest with an unset action; typo in custom tooling building the protobuf.

Related errors


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