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/galera_var_dirty_reads.test b/mysql-test/suite/galera/t/galera_var_dirty_reads.test index 855f4abdbf0..9eea8efdaf3 100644 --- a/mysql-test/suite/galera/t/galera_var_dirty_reads.test +++ b/mysql-test/suite/galera/t/galera_var_dirty_reads.test @@ -5,6 +5,14 @@ --source include/galera_cluster.inc --source include/have_innodb.inc +--disable_query_log +# Save original auto_increment_offset values. +--connection node_1 +let $auto_increment_offset_node_1 = `SELECT @@global.auto_increment_offset`; +--connection node_2 +let $auto_increment_offset_node_2 = `SELECT @@global.auto_increment_offset`; +--enable_query_log + --connection node_2 --let $wsrep_cluster_address_saved = `SELECT @@global.wsrep_cluster_address` @@ -41,6 +49,14 @@ SELECT * FROM t1; # Cleanup DROP TABLE t1; +--disable_query_log +# Restore original auto_increment_offset values. +--connection node_1 +--eval SET @@global.auto_increment_offset = $auto_increment_offset_node_1; +--connection node_2 +--eval SET @@global.auto_increment_offset = $auto_increment_offset_node_2; +--enable_query_log + --source include/galera_end.inc --echo # End of test 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 5b276b57274..7c91b6f815a 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -5140,10 +5140,20 @@ static int init_server_components() THD *current_thd_saved= current_thd; set_current_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. */ set_current_thd(current_thd_saved); + + tmp->server_status= server_status_saved; + tmp->variables.option_bits= option_bits_saved; } } mysql_mutex_unlock(&LOCK_thread_count); @@ -5511,7 +5521,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;