{"record":{"id":"a1ed53179c29b7b6","repo":"vitessio/vitess","slug":"action-s-not-supported","errorCode":null,"errorMessage":"action %s not supported","messagePattern":"action (.+?) not supported","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"go/vt/vttablet/tabletmanager/vdiff/action.go","lineNumber":113,"sourceCode":"\tswitch action {\n\tcase CreateAction, ResumeAction:\n\t\tif err := vde.handleCreateResumeAction(ctx, dbClient, action, req, resp); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\tcase ShowAction:\n\t\tif err := vde.handleShowAction(ctx, dbClient, req, resp); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\tcase StopAction:\n\t\tif err := vde.handleStopAction(ctx, dbClient, req, resp); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\tcase DeleteAction:\n\t\tif err := vde.handleDeleteAction(ctx, dbClient, req, resp); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"action %s not supported\", action)\n\t}\n\treturn resp, nil\n}\n\nfunc vdiffSummaryQuery(noSamples bool) string {\n\tif noSamples {\n\t\treturn sqlVDiffSummaryNoSamples\n\t}\n\treturn sqlVDiffSummary\n}\n\nfunc (vde *Engine) getVDiffSummary(vdiffID int64, dbClient binlogplayer.DBClient, reportOpts *tabletmanagerdatapb.VDiffReportOptions) (*query.QueryResult, error) {\n\tvar qr *sqltypes.Result\n\tvar err error\n\n\tquery, err := sqlparser.ParseAndBind(vdiffSummaryQuery(reportOpts.GetNoSamples()), sqltypes.Int64BindVariable(vdiffID), sqltypes.StringBindVariable(vde.dbName))\n\tif err != nil {\n\t\treturn nil, err","sourceCodeStart":95,"sourceCodeEnd":131,"githubUrl":"https://github.com/vitessio/vitess/blob/01a25a7d176f94613b8d59d799f438380a8760e4/go/vt/vttablet/tabletmanager/vdiff/action.go#L95-L131","documentation":"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.","triggerScenarios":"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).","commonSituations":"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.","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"],"exampleFix":"// before\nreq := &querypb.VDiffRequest{} // action left unset\n// after\nreq := &querypb.VDiffRequest{Action: querypb.VDiffAction_ShowAction}","handlingStrategy":"validation","validationCode":"if !slices.Contains([]querypb.VDiffAction{\n    querypb.VDiffAction_CreateAction, querypb.VDiffAction_DeleteAction,\n    querypb.VDiffAction_ShowAction}, req.Action) {\n    return fmt.Errorf(\"unsupported vdiff action %v\", req.Action)\n}","typeGuard":null,"tryCatchPattern":"if strings.Contains(err.Error(), \"action \") && strings.Contains(err.Error(), \"not supported\") {\n    // version skew: upgrade tablets or resend with a supported action\n}","preventionTips":["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"],"tags":["vdiff","version-skew","unsupported-operation"],"backgroundTag":"unsupported-action","analyzedSha":"01a25a7d176f94613b8d59d799f438380a8760e4","analyzedAt":"2026-09-01T17:28:30.605Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T15:18:49.778Z"}