MDEV-38623 ALTER TABLE ... ENGINE = MERGE is binlogged w/o ddl tag #4579
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The ALTER-ENGINE=MERGE was found out not to have the DDL flag in its
Gtid_log_eventwhich is error-prone to the parallel slave. This violates a binlogging requirement that all DDL:s, including all types of ALTER must be binlogged with the flag.The reason of this exceptional behaviour was an unattended branch of ALTER execution that runs
trans_commit_stmt()that cleared already prepared DDL flag fromthd->transaction->stmt.m_unsafe_rollback_flags. Later the query gets binlogged stripped from it.Fixed with applying elsewhere existing pattern (e.g MDEV-8075/228479a28ce7e) to remember-and-restore the original value of
m_unsafe_rollback_flagsupon the likes oftrans_commit_stmt(). This time it's done with arranging a helperStateGuardclass to carry out a RAII-like construct as a single-liner.An mtr test is straightforward and comfortably fits to an existing test file.