mirror of
https://github.com/MariaDB/server.git
synced 2025-07-26 07:02:12 +03:00
MDEV-9290 : InnoDB: Assertion failure in file trx0sys.cc line 353
As a fix for MDEV-8208, for initial wsrep threads, the invocation of init_for_queries() was moved after plugins were initialized. Due to which, OPTION_BEGIN bit of wsrep applier THD (originally set in wsrep_replication_process) got reset due to implicit commit within init_for_queries(). As a result, events from a multi-statement transaction from another node were committed separately by the applier thread, which leads to an assertion as they all carry same seqno. Fixed by making sure that variable.option_bits are restored post init_for_queries(). Also restored server_status. Added a test case.
This commit is contained in:
14
mysql-test/suite/galera/r/mdev_9290.result
Normal file
14
mysql-test/suite/galera/r/mdev_9290.result
Normal file
@ -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;
|
24
mysql-test/suite/galera/t/mdev_9290.test
Normal file
24
mysql-test/suite/galera/t/mdev_9290.test
Normal file
@ -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
|
@ -4617,10 +4617,20 @@ a file name for --log-bin-index option", opt_binlog_index_name);
|
|||||||
THD *current_thd_saved= current_thd;
|
THD *current_thd_saved= current_thd;
|
||||||
my_pthread_setspecific_ptr(THR_THD, tmp);
|
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();
|
tmp->init_for_queries();
|
||||||
|
|
||||||
/* Restore current_thd. */
|
/* Restore current_thd. */
|
||||||
my_pthread_setspecific_ptr(THR_THD, current_thd_saved);
|
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);
|
mysql_mutex_unlock(&LOCK_thread_count);
|
||||||
@ -4984,7 +4994,7 @@ error:
|
|||||||
WSREP_ERROR("Failed to create/initialize system thread");
|
WSREP_ERROR("Failed to create/initialize system thread");
|
||||||
|
|
||||||
/* Abort if its the first applier/rollbacker thread. */
|
/* Abort if its the first applier/rollbacker thread. */
|
||||||
if (wsrep_creating_startup_threads < 2)
|
if (wsrep_creating_startup_threads == 1)
|
||||||
unireg_abort(1);
|
unireg_abort(1);
|
||||||
else
|
else
|
||||||
return NULL;
|
return NULL;
|
||||||
|
Reference in New Issue
Block a user