{"record":{"id":"3db5941e678829c2","repo":"vitessio/vitess","slug":"action-argument-s-not-supported","errorCode":null,"errorMessage":"action argument %s not supported","messagePattern":"action argument (.+?) not supported","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"go/vt/vttablet/tabletmanager/vdiff/action.go","lineNumber":374,"sourceCode":"\tswitch req.ActionArg {\n\tcase AllActionArg:\n\t\tquery, err := sqlparser.ParseAndBind(sqlGetMostRecentVDiffByKeyspaceWorkflow,\n\t\t\tsqltypes.StringBindVariable(req.Keyspace),\n\t\t\tsqltypes.StringBindVariable(req.Workflow),\n\t\t\tsqltypes.StringBindVariable(vde.dbName),\n\t\t\tsqltypes.Int64BindVariable(maxVDiffsToReport),\n\t\t)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif qr, err = dbClient.ExecuteFetch(query, -1); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tresp.Output = sqltypes.ResultToProto3(qr)\n\tcase LastActionArg:\n\tdefault:\n\t\tif _, err := uuid.Parse(req.ActionArg); err != nil {\n\t\t\treturn fmt.Errorf(\"action argument %s not supported\", req.ActionArg)\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (vde *Engine) handleStopAction(ctx context.Context, dbClient binlogplayer.DBClient, req *tabletmanagerdatapb.VDiffRequest, resp *tabletmanagerdatapb.VDiffResponse) error {\n\tvde.mu.Lock()\n\tdefer vde.mu.Unlock()\n\tfor _, controller := range vde.controllers {\n\t\tif controller.uuid == req.VdiffUuid {\n\t\t\tcontroller.Stop()\n\t\t\tif err := controller.markStoppedByRequest(); err != nil {\n\t\t\t\treturn vterrors.Errorf(vtrpcpb.Code_INTERNAL, \"encountered an error marking vdiff %s as stopped: %v\", controller.uuid, err)\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t}","sourceCodeStart":356,"sourceCodeEnd":392,"githubUrl":"https://github.com/vitessio/vitess/blob/01a25a7d176f94613b8d59d799f438380a8760e4/go/vt/vttablet/tabletmanager/vdiff/action.go#L356-L392","documentation":"The vdiff show handler accepts only the arguments 'all', 'last', or a valid UUID string; anything else reaches this default branch. It parses the argument as a UUID and, when parsing fails, rejects the action with this error.","triggerScenarios":"Calling PerformVDiffAction with Action=Show and ActionArg set to a value that is neither 'all', 'last' (case-sensitive) nor a parseable UUID — e.g. an abbreviation, a vdiff numeric ID, or a name with whitespace/typo.","commonSituations":"Passing a numeric vdiff ID instead of the UUID; using 'Last'/'ALL' casing; truncating a UUID; using an old CLI that passes 'latest' instead of 'last'.","solutions":["Use exactly 'all' or 'last' for the built-in selectors, or the full vdiff UUID.","Get the UUID via a show with 'last' or from vtctldclient VDiff --workflow <wf> show all output.","Re-run the command quoting the UUID fully, e.g. vtctldclient vdiff --keyspace ks --workflow wf show <uuid>."],"exampleFix":"// before\nreq.ActionArg = \"3\" // numeric id — not a UUID\n// after\nreq.ActionArg = \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\" // full UUID, or \"last\" / \"all\"","handlingStrategy":"validation","validationCode":"arg := strings.TrimSpace(actionArg)\n_, err := uuid.Parse(arg)\nif err != nil && arg != \"all\" && arg != \"last\" {\n  return fmt.Errorf(\"show arg must be 'all', 'last', or a UUID\")\n}","typeGuard":null,"tryCatchPattern":"if err := performShow(arg); err != nil {\n  if strings.Contains(err.Error(), \"not supported\") {\n    // fall back to listing: performShow(\"all\")\n  }\n}","preventionTips":["Use the CLI constants 'all'/'last' verbatim, lowercase.","Copy-paste full UUIDs; never truncate or retype them.","Never pass numeric vdiff IDs to show/delete actions.","Validate arguments in scripts before calling PerformVDiffAction."],"tags":["vdiff","validation","argument-parsing","cli"],"backgroundTag":"action-invalid-argument","analyzedSha":"01a25a7d176f94613b8d59d799f438380a8760e4","analyzedAt":"2026-09-01T17:28:30.605Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}