Skip to content
Permalink
Browse files
MDEV-25740 �Assertion `!wsrep_has_changes(thd) || (thd->lex->sql_comm…
…and == SQLCOM_CREATE_TABLE && !thd->is_current_stmt_binlog_format_row())' failed in void wsrep_commit_empty(THD*, bool)

Using ROLLBACK with `completion_type = CHAIN` result in start of
transaction and implicit commit before previous WSREP internal data is
cleared.

Reviewed-by: Jan Lindström <jan.lindstrom@mariadb.com>
  • Loading branch information
mkaruza authored and Jan Lindström committed Jul 28, 2021
1 parent eb26e20 commit 386ac12
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 0 deletions.
@@ -0,0 +1,9 @@
connection node_2;
connection node_1;
SET AUTOCOMMIT = OFF;
SET completion_type = CHAIN;
CREATE TABLE t1(f1 INT) ENGINE=InnoDB;
BEGIN;
INSERT INTO t1 VALUES (1);
ROLLBACK;
DROP TABLE t1;
@@ -0,0 +1,14 @@
#
# When `completion_type = CHAIN` is used, transaction started should not have previous writeset.
#

--source include/galera_cluster.inc
--source include/have_innodb.inc

SET AUTOCOMMIT = OFF;
SET completion_type = CHAIN;
CREATE TABLE t1(f1 INT) ENGINE=InnoDB;
BEGIN;
INSERT INTO t1 VALUES (1);
ROLLBACK;
DROP TABLE t1;
@@ -5750,6 +5750,11 @@ mysql_execute_command(THD *thd)
/* Begin transaction with the same isolation level. */
if (tx_chain)
{
#ifdef WITH_WSREP
/* If there are pending changes after rollback we should clear them */
if (wsrep_on(thd) && wsrep_has_changes(thd))
wsrep_after_statement(thd);
#endif
if (trans_begin(thd))
goto error;
}

0 comments on commit 386ac12

Please sign in to comment.