Skip to content

Commit

Permalink
MDEV-22222: Assertion `state() == s_executing || state() == s_prepari…
Browse files Browse the repository at this point in the history
…ng || state() == s_prepared || state() == s_must_abort || state() == s_aborting || state() == s_cert_failed || state() == s_must_replay' failed in wsrep::transaction::before_rollback

LOCK TABLE will do implicit commit, we need to properly handle transaction after commit.
  • Loading branch information
mkaruza committed Jun 28, 2020
1 parent d4d42a6 commit 2b8b739
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 0 deletions.
12 changes: 12 additions & 0 deletions mysql-test/suite/galera/r/galera_lock_tables_in_transaction.result
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
connection node_2;
connection node_1;
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
START TRANSACTION;
INSERT INTO t1 VALUES (1);
LOCK TABLES t2 READ;
ERROR 42S02: Table 'test.t2' doesn't exist
START TRANSACTION;
INSERT INTO t1 VALUES (1);
LOCK TABLES t1 READ;
UNLOCK TABLES;
DROP TABLE t1;
21 changes: 21 additions & 0 deletions mysql-test/suite/galera/t/galera_lock_tables_in_transaction.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#
# Check `LOCK TABLES` command with or without existing table in database.
# Test case for MDEV-22222 / MDEV-22223
#

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

CREATE TABLE t1 (a INT) ENGINE=InnoDB;

START TRANSACTION;
INSERT INTO t1 VALUES (1);
--error ER_NO_SUCH_TABLE
LOCK TABLES t2 READ;

START TRANSACTION;
INSERT INTO t1 VALUES (1);
LOCK TABLES t1 READ;
UNLOCK TABLES;

DROP TABLE t1;
6 changes: 6 additions & 0 deletions sql/sql_parse.cc
Original file line number Diff line number Diff line change
Expand Up @@ -4998,6 +4998,12 @@ mysql_execute_command(THD *thd)
if (res)
goto error;

#ifdef WITH_WSREP
/* Clean up the previous transaction on implicit commit. */
if (wsrep_on(thd) && !wsrep_not_committed(thd) && wsrep_after_statement(thd))
goto error;
#endif

/* We can't have any kind of table locks while backup is active */
if (thd->current_backup_stage != BACKUP_FINISHED)
{
Expand Down

0 comments on commit 2b8b739

Please sign in to comment.