vitessio/vitess · error
action 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.
Solutions
- Upgrade the vttablet tablets to match the vtctld/client version sending the action
- Inspect the VDiffRequest being sent and ensure the action enum is explicitly set to a supported value (create, delete, show, etc.)
- Check the tablet logs for the raw action value to identify what was received
- 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
- Keep vtctld and vttablet versions aligned in mixed clusters
- Always set the action enum explicitly when building VDiffRequest programmatically
- Pin client tooling to the cluster's Vitess version
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
- action argument not supported
- can only delete a specific vdiff, please provide a valid…
- can only a specific vdiff, please provide a valid UUID…
- can only show a specific vdiff, please provide a valid…
- cannot update progress with a nil diff report
AI-assisted analysis of vitessio/vitess@01a25a7d17 (2026-09-01).
Data as JSON: /api/errors/a1ed53179c29b7b6.
Report an issue: GitHub.
Appendix: 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, errView on GitHub (pinned to 01a25a7d17)