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, errView on GitHub (pinned to 01a25a7d17)
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
- VDiff not implemented in vtcombo
- there are no cells in the topo
- cannot update progress with a nil diff report
- usage: VDiff -- <keyspace>.<workflow> %s [%s|<UUID>]
- invalid action '%s'; %s
AI-assisted analysis of vitessio/vitess@01a25a7d17 (2026-09-01).
Data as JSON: /api/errors/a1ed53179c29b7b6.
Report an issue: GitHub.