MDEV-21217 innodb_force_recovery=2 may wrongly abort rollback
trx_roll_must_shutdown(): Correct the condition that detects the start of shutdown.
This commit is contained in:
parent
2fd2fd77e7
commit
b68f1d847f
@ -0,0 +1,17 @@
|
|||||||
|
FLUSH TABLES;
|
||||||
|
#
|
||||||
|
# MDEV-21217 innodb_force_recovery=2 may wrongly abort the rollback
|
||||||
|
# of recovered transactions
|
||||||
|
#
|
||||||
|
connect con0,localhost,root;
|
||||||
|
CREATE TABLE t0 (a INT PRIMARY KEY) ENGINE=InnoDB;
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO t0 SELECT * FROM seq_1_to_1000;
|
||||||
|
connection default;
|
||||||
|
SET GLOBAL innodb_flush_log_at_trx_commit=1;
|
||||||
|
CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB;
|
||||||
|
disconnect con0;
|
||||||
|
connection default;
|
||||||
|
SELECT * FROM t0 LOCK IN SHARE MODE;
|
||||||
|
a
|
||||||
|
DROP TABLE t0,t1;
|
@ -0,0 +1,34 @@
|
|||||||
|
--source include/have_innodb.inc
|
||||||
|
--source include/have_sequence.inc
|
||||||
|
|
||||||
|
# We will kill and restart the server.
|
||||||
|
--source include/not_embedded.inc
|
||||||
|
FLUSH TABLES;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-21217 innodb_force_recovery=2 may wrongly abort the rollback
|
||||||
|
--echo # of recovered transactions
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
connect (con0,localhost,root);
|
||||||
|
CREATE TABLE t0 (a INT PRIMARY KEY) ENGINE=InnoDB;
|
||||||
|
# Create enough undo log so that the rollback may take enough time.
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO t0 SELECT * FROM seq_1_to_1000;
|
||||||
|
|
||||||
|
connection default;
|
||||||
|
# Persist the above incomplete transaction.
|
||||||
|
SET GLOBAL innodb_flush_log_at_trx_commit=1;
|
||||||
|
CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB;
|
||||||
|
|
||||||
|
--let $restart_parameters= --innodb-force-recovery=2
|
||||||
|
--let $shutdown_timeout=0
|
||||||
|
--source include/restart_mysqld.inc
|
||||||
|
--let $restart_parameters=
|
||||||
|
--let $shutdown_timeout=
|
||||||
|
|
||||||
|
disconnect con0;
|
||||||
|
connection default;
|
||||||
|
# If the rollback was aborted, we would end up in a lock wait here.
|
||||||
|
SELECT * FROM t0 LOCK IN SHARE MODE;
|
||||||
|
DROP TABLE t0,t1;
|
@ -750,7 +750,7 @@ trx_roll_must_shutdown()
|
|||||||
ut_ad(trx_state_eq(trx, TRX_STATE_ACTIVE));
|
ut_ad(trx_state_eq(trx, TRX_STATE_ACTIVE));
|
||||||
|
|
||||||
if (trx_get_dict_operation(trx) == TRX_DICT_OP_NONE
|
if (trx_get_dict_operation(trx) == TRX_DICT_OP_NONE
|
||||||
&& !srv_is_being_started
|
&& srv_shutdown_state != SRV_SHUTDOWN_NONE
|
||||||
&& !srv_undo_sources && srv_fast_shutdown) {
|
&& !srv_undo_sources && srv_fast_shutdown) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user