diff --git a/mysql-test/suite/galera/r/mdev_9290.result b/mysql-test/suite/galera/r/mdev_9290.result new file mode 100644 index 00000000000..cb2f0813333 --- /dev/null +++ b/mysql-test/suite/galera/r/mdev_9290.result @@ -0,0 +1,14 @@ +# +# MDEV-9290 : InnoDB: Assertion failure in file trx0sys.cc line 353 +# InnoDB: Failing assertion: xid_seqno > trx_sys_cur_xid_seqno +# +CREATE TABLE t1 (i INT) ENGINE=InnoDB; +START TRANSACTION; +INSERT INTO t1 VALUES (1); +INSERT INTO t1 VALUES (2); +COMMIT; +SELECT * FROM t1; +i +1 +2 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/mdev_9290.test b/mysql-test/suite/galera/t/mdev_9290.test new file mode 100644 index 00000000000..39e02011a09 --- /dev/null +++ b/mysql-test/suite/galera/t/mdev_9290.test @@ -0,0 +1,24 @@ +--source include/galera_cluster.inc +--source include/have_innodb.inc + +--echo # +--echo # MDEV-9290 : InnoDB: Assertion failure in file trx0sys.cc line 353 +--echo # InnoDB: Failing assertion: xid_seqno > trx_sys_cur_xid_seqno +--echo # + +--connection node_1 +CREATE TABLE t1 (i INT) ENGINE=InnoDB; + +--connection node_2 +# Note: a multi-statement transaction should always be the "first" one to execute +# on this node. +START TRANSACTION; +INSERT INTO t1 VALUES (1); +INSERT INTO t1 VALUES (2); +COMMIT; + +--connection node_1 +SELECT * FROM t1; +DROP TABLE t1; + +--source include/galera_end.inc diff --git a/sql/mysqld.cc b/sql/mysqld.cc index a5fb510006e..fe74a82a4c6 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -4617,10 +4617,20 @@ a file name for --log-bin-index option", opt_binlog_index_name); THD *current_thd_saved= current_thd; my_pthread_setspecific_ptr(THR_THD, tmp); + /* + Also save/restore server_status and variables.option_bits and they + get altered during init_for_queries(). + */ + unsigned int server_status_saved= tmp->server_status; + ulonglong option_bits_saved= tmp->variables.option_bits; + tmp->init_for_queries(); /* Restore current_thd. */ my_pthread_setspecific_ptr(THR_THD, current_thd_saved); + + tmp->server_status= server_status_saved; + tmp->variables.option_bits= option_bits_saved; } } mysql_mutex_unlock(&LOCK_thread_count); @@ -4984,7 +4994,7 @@ error: WSREP_ERROR("Failed to create/initialize system thread"); /* Abort if its the first applier/rollbacker thread. */ - if (wsrep_creating_startup_threads < 2) + if (wsrep_creating_startup_threads == 1) unireg_abort(1); else return NULL;