{"record":{"id":"be873a34b0e54c56","repo":"vitessio/vitess","slug":"unknown-onlineddl-command-s","errorCode":null,"errorMessage":"Unknown OnlineDDL command: %s","messagePattern":"Unknown OnlineDDL command: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"go/vt/vtctl/vtctl.go","lineNumber":3094,"sourceCode":"\t\t\t\tfrom _vt.schema_migrations where %s %s %s`, condition, order, skipLimit)\n\tcase \"retry\", \"cleanup\":\n\t\t// Do not support 'ALL' argument\n\t\tapplySchemaQuery, err = generateOnlineDDLQuery(command, arg, false)\n\tcase\n\t\t\"launch\",\n\t\t\"launch-all\",\n\t\t\"complete\",\n\t\t\"complete-all\",\n\t\t\"cancel\",\n\t\t\"cancel-all\",\n\t\t\"throttle\",\n\t\t\"throttle-all\",\n\t\t\"unthrottle\",\n\t\t\"unthrottle-all\":\n\t\t// Support 'ALL' argument\n\t\tapplySchemaQuery, err = generateOnlineDDLQuery(command, arg, true)\n\tdefault:\n\t\treturn fmt.Errorf(\"Unknown OnlineDDL command: %s\", command)\n\t}\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Error generating OnlineDDL query: %+v\", err)\n\t}\n\n\tif applySchemaQuery != \"\" {\n\t\tlog.Info(\"Calling ApplySchema on VtctldServer\")\n\n\t\tresp, err := wr.VtctldServer().ApplySchema(ctx, &vtctldatapb.ApplySchemaRequest{\n\t\t\tKeyspace:            keyspace,\n\t\t\tSql:                 []string{applySchemaQuery},\n\t\t\tWaitReplicasTimeout: protoutil.DurationToProto(grpcvtctldserver.DefaultWaitReplicasTimeout),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tloggerWriter{wr.Logger()}.Printf(\"resp: %v\\n\", resp)\n\t} else {","sourceCodeStart":3076,"sourceCodeEnd":3112,"githubUrl":"https://github.com/vitessio/vitess/blob/01a25a7d176f94613b8d59d799f438380a8760e4/go/vt/vtctl/vtctl.go#L3076-L3112","documentation":"commandWorkflow (OnlineDDL path) dispatches on the workflow sub-command string against a fixed list of supported OnlineDDL commands (complete, cancel, retry, launch, throttle, unthrottle and their -all variants). Any unrecognized command string hits the default branch and errors before any query is generated.","triggerScenarios":"`vtctldclient workflow foobar ks.wf`; older command names removed/renamed in this version; typo'd verbs like 'cancle' or 'complet'; empty command token from shell interpolation.","commonSituations":"Following outdated documentation or blog posts with retired verbs; shell variable left empty; autocomplete producing a wrong command.","solutions":["Run `vtctldclient workflow --help` to see the supported sub-commands","Use one of: cancel, cancel-all, complete, complete-all, launch, launch-all, retry, retry-all, show, show-throttled, throttle, throttle-all, unthrottle, unthrottle-all","Update scripts to the renamed command in this Vitess version"],"exampleFix":"// before\nvtctldclient workflow cancle commerce.my_migration\n// after\nvtctldclient workflow cancel commerce.my_migration","handlingStrategy":"validation","validationCode":"const onlineDDLCommands = [\"cancel\",\"cancel-all\",\"complete\",\"complete-all\",\"launch\",\"launch-all\",\"retry\",\"retry-all\",\"show\",\"show-throttled\",\"throttle\",\"throttle-all\",\"unthrottle\",\"unthrottle-all\"]\nif !onlineDDLCommands.includes(command) { fail(\"unknown OnlineDDL command: \" + command) }","typeGuard":"func isKnownOnlineDDLCommand(c string) bool {\n  switch c {\n  case \"cancel\", \"cancel-all\", \"complete\", \"complete-all\", \"launch\", \"launch-all\",\n    \"retry\", \"retry-all\", \"throttle\", \"throttle-all\", \"unthrottle\", \"unthrottle-all\":\n    return true\n  }\n  return false\n}","tryCatchPattern":null,"preventionTips":["Check `vtctldclient workflow --help` after each Vitess upgrade","Avoid hard-coding command names in scripts; centralize them"],"tags":["onlineddl","command-dispatch","vtctl"],"backgroundTag":"unknown-command","analyzedSha":"01a25a7d176f94613b8d59d799f438380a8760e4","analyzedAt":"2026-09-01T17:28:30.605Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}