diff options
author | Andrei <andrei.elkin@mariadb.com> | 2021-12-26 18:13:49 +0200 |
---|---|---|
committer | Andrei Elkin <andrei.elkin@mariadb.com> | 2022-01-03 17:39:23 +0200 |
commit | 80da35a3267724804c6ced03a27e00d9551b3e01 (patch) | |
tree | 63279f0d4593d51bf2e455fb71b4cede86a4d1ad /sql/sql_sequence.cc | |
parent | 5fd5e9fff3ad2b1c8939c758cd2513c39016953e (diff) | |
download | mariadb-git-80da35a3267724804c6ced03a27e00d9551b3e01.tar.gz |
MDEV-27365 CREATE-or-REPLACE SEQUENCE is binlogged without DDL flag
CREATE-OR-REPLACE SEQUENCE is not logged with Gtid event DDL flag
which affects its slave parallel execution.
Unlike other DDL:s it can occur in concurrent execution with following transactions
which can lead to various errors, including asserts like
(mdl_request->type != MDL_INTENTION_EXCLUSIVE && mdl_request->type != MDL_EXCLUSIVE) || !(get_thd()->rgi_slave && get_thd()->rgi_slave->is_parallel_exec && lock->check_if_conflicting_replication_locks(this)
in MDL_context::acquire_lock.
Fixed to wrap internal statement level commit with save-
and-restore of TRANS_THD::m_unsafe_rollback_flags.
Diffstat (limited to 'sql/sql_sequence.cc')
-rw-r--r-- | sql/sql_sequence.cc | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/sql/sql_sequence.cc b/sql/sql_sequence.cc index 11125c0a619..e5fea586d06 100644 --- a/sql/sql_sequence.cc +++ b/sql/sql_sequence.cc @@ -365,9 +365,14 @@ bool sequence_insert(THD *thd, LEX *lex, TABLE_LIST *org_table_list) seq->reserved_until= seq->start; error= seq->write_initial_sequence(table); - - if (trans_commit_stmt(thd)) - error= 1; + { + uint save_unsafe_rollback_flags= + thd->transaction.stmt.m_unsafe_rollback_flags; + if (trans_commit_stmt(thd)) + error= 1; + thd->transaction.stmt.m_unsafe_rollback_flags= + save_unsafe_rollback_flags; + } if (trans_commit_implicit(thd)) error= 1; |