summaryrefslogtreecommitdiff
path: root/sql/sql_sequence.cc
diff options
context:
space:
mode:
authorAndrei <andrei.elkin@mariadb.com>2021-12-26 18:13:49 +0200
committerAndrei Elkin <andrei.elkin@mariadb.com>2022-01-03 17:39:23 +0200
commit80da35a3267724804c6ced03a27e00d9551b3e01 (patch)
tree63279f0d4593d51bf2e455fb71b4cede86a4d1ad /sql/sql_sequence.cc
parent5fd5e9fff3ad2b1c8939c758cd2513c39016953e (diff)
downloadmariadb-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.cc11
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;