-
Notifications
You must be signed in to change notification settings - Fork 2.1k
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
OnlineDDL: 'mysql' strategy, managed by the scheduler, but executed via normal MySQL statements #12027
Conversation
…ia normal MySQL 'ALTER TABLE' Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com>
Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com>
Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com>
Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com>
Review ChecklistHello reviewers! 👋 Please follow this checklist when reviewing this Pull Request. General
If a new flag is being introduced:
If a workflow is added or modified:
Bug fixes
Non-trivial changes
New/Existing features
Backward compatibility
|
Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com>
t.Run("declarative", func(t *testing.T) { | ||
t1uuid = testOnlineDDLStatement(t, createT1Statement, "mysql --declarative", "vtgate", "just-created", "", false) | ||
|
||
status := onlineddl.WaitForMigrationStatus(t, &vtParams, shards, t1uuid, normalWaitTime, schema.OnlineDDLStatusComplete, schema.OnlineDDLStatusFailed) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Curious why we specify multiple statuses in WaitForMigrationStatus
but then only a single one in CheckMigrationStatus
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The reason is that we wait till either status is seen (the function will otherwise give some 30sec
for the migration to "evolve"). So there are terminal states for the function, so that it does not need to wait after meeting these states. This just reduces test time. Then, we really want to validate that we reached a particular result: typically we look for a success, ie OnlineDDLStatusComplete
. But sometimes we intentionally seek a failure.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is awesome, thanks for pushing this through!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is great. I like how you keep improving online DDL to take advantage of upstream MySQL improvements.
I think this is significant enough to either warrant a new issue altogether, or at least a specific comment in the tracking issue as to why we want to introduce this option. Currently there's nothing in the tracking issue that tells us anything about why this PR is being proposed.
Also website docs 😄
👍
👍 Let me first create all the necessary docs before we merge this PR |
Website docs: vitessio/website#1342 |
@deepthi for final approval + merge, as there's now a tracking issue as well as website docs |
…er, but executed via normal MySQL statements (#1499) * OnlineDDL: 'mysql' strategy, managed by the scheduler, but executed via normal MySQL statements (#12027) * OnlineDDL: 'mysql' strategy: managed by the scheduler, but executed via normal MySQL 'ALTER TABLE' Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> * use 'mysql' strategy Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> * fail mysql strategy on incompatible strategy flags Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> * endtoend tests Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> * release notes Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> * Fix bad merge. (#12087) GitHub did not seem to pick up the merge conflict between these two commits (older to newer): - 673573a - 836b3c1 The first commit changed the function signature for testOnlineDDLStatement(), while the later commit used the old signature. Signed-off-by: Matt Lord <mattalord@gmail.com> Signed-off-by: Matt Lord <mattalord@gmail.com> Signed-off-by: Shlomi Noach <2607934+shlomi-noach@users.noreply.github.com> Signed-off-by: Matt Lord <mattalord@gmail.com> Co-authored-by: Matt Lord <mattalord@gmail.com>
Description
This PR introduces a new DDL strategy:
mysql
. This strategy is a hybrid betweendirect
(which is completely non-Online) and the various online strategies.A migration submitted with
mysql
strategy is managed. That is, it gets a migration UUID. The scheduler queues it, reviews it, runs it. The user may cancel or retry it, much like all Online DDL migrations. The difference is that when the scheduler runs the migration via normal MySQLCREATE/ALTER/DROP TABLE
statements.The user may add
ALGORITHM=INPLACE
orALGORITHM=INSTANT
as they please, and the scheduler will attempt to run those as is. Some migrations will be completely blocking. See the MySQL documentation. In particular, consider that for non-INSTANT
DDLs, replicas will accumulate substantial lag.This was requested and discussed by @derekperkins in a recent Vitess Open Hour call.
Related Issue(s)
Tracking: #6926
Checklist
Deployment Notes