Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

restore 'vtctl VExec' command (backport v12) #9227

Merged
merged 2 commits into from
Nov 21, 2021
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions doc/releasenotes/12_0_0_release_notes.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,6 @@ zone1-0000000103 sourcekeyspace 0 rdonly 192.168.0.134:15103 192.168.0.134:17103

## Deprecations

The command `vtctl VExec` is deprecated and removed. All Online DDL commands should run through `vtctl OnlineDDL`.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be reverted. See #9228 (comment)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you start a 12_0_1_release_notes.md and add a line about reverting the deprecation?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done.

The command `vtctl OnlineDDL revert` is deprecated. Use `REVERT VITESS_MIGRATION '...'` SQL command either via `vtctl ApplySchema` or via `vtgate`.


Expand Down
49 changes: 49 additions & 0 deletions go/vt/vtctl/vtctl.go
Original file line number Diff line number Diff line change
Expand Up @@ -766,6 +766,16 @@ var commands = []commandGroup{
},
},
},
{
"Workflow", []command{
{
name: "VExec",
method: commandVExec,
params: "<ks.workflow> <query> --dry-run",
help: "Runs query on all tablets in workflow. Example: VExec merchant.morders \"update _vt.vreplication set Status='Running'\"",
},
},
},
{
"Workflow", []command{
{
Expand Down Expand Up @@ -3791,6 +3801,45 @@ func commandHelp(ctx context.Context, wr *wrangler.Wrangler, subFlags *flag.Flag
return nil
}

func commandVExec(ctx context.Context, wr *wrangler.Wrangler, subFlags *flag.FlagSet, args []string) error {
deprecationMessage := `VExec command will be deprecated in version v12. For Online DDL control, use "vtctl OnlineDDL" commands or SQL syntax`
log.Warningf(deprecationMessage)

json := subFlags.Bool("json", false, "Output JSON instead of human-readable table")
dryRun := subFlags.Bool("dry_run", false, "Does a dry run of VExec and only reports the final query and list of tablets on which it will be applied")
if err := subFlags.Parse(args); err != nil {
return err
}
if subFlags.NArg() != 2 {
return fmt.Errorf("usage: VExec --dry-run keyspace.workflow \"<query>\"")
}
keyspace, workflow, err := splitKeyspaceWorkflow(subFlags.Arg(0))
if err != nil {
return err
}
_, err = wr.TopoServer().GetKeyspace(ctx, keyspace)
if err != nil {
wr.Logger().Errorf("keyspace %s not found", keyspace)
}
query := subFlags.Arg(1)

qr, err := wr.VExecResult(ctx, workflow, keyspace, query, *dryRun)
if err != nil {
return err
}
if *dryRun {
return nil
}
if qr == nil {
wr.Logger().Printf("no result returned\n")
}
if *json {
return printJSON(wr.Logger(), qr)
}
printQueryResult(loggerWriter{wr.Logger()}, qr)
return nil
}

func commandWorkflow(ctx context.Context, wr *wrangler.Wrangler, subFlags *flag.FlagSet, args []string) error {
dryRun := subFlags.Bool("dry_run", false, "Does a dry run of Workflow and only reports the final query and list of tablets on which the operation will be applied")
if err := subFlags.Parse(args); err != nil {
Expand Down