Commit c5d4dd25 authored by Marko Mäkelä's avatar Marko Mäkelä

MDEV-23339 innodb_force_recovery=2 may still abort the rollback of recovered transactions

trx_rollback_active(), trx_rollback_resurrected(): Replace
an incorrect condition that we failed to replace in
commit b68f1d84 (MDEV-21217).
parent 2107e3bb
...@@ -11,4 +11,3 @@ ...@@ -11,4 +11,3 @@
############################################################################## ##############################################################################
create-index-debug : MDEV-13680 InnoDB may crash when btr_page_alloc() fails create-index-debug : MDEV-13680 InnoDB may crash when btr_page_alloc() fails
innodb_force_recovery_rollback : MDEV-22889 InnoDB occasionally breaks ACID
...@@ -12,6 +12,6 @@ SET GLOBAL innodb_flush_log_at_trx_commit=1; ...@@ -12,6 +12,6 @@ SET GLOBAL innodb_flush_log_at_trx_commit=1;
CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB; CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB;
disconnect con0; disconnect con0;
connection default; connection default;
SELECT * FROM t0 LOCK IN SHARE MODE; SELECT * FROM t0 LIMIT 0 LOCK IN SHARE MODE;
a a
DROP TABLE t0,t1; DROP TABLE t0,t1;
...@@ -30,5 +30,6 @@ CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB; ...@@ -30,5 +30,6 @@ CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB;
disconnect con0; disconnect con0;
connection default; connection default;
# If the rollback was aborted, we would end up in a lock wait here. # If the rollback was aborted, we would end up in a lock wait here.
SELECT * FROM t0 LOCK IN SHARE MODE; # The LIMIT 0 works around MDEV-22889 InnoDB occasionally breaks ACID
SELECT * FROM t0 LIMIT 0 LOCK IN SHARE MODE;
DROP TABLE t0,t1; DROP TABLE t0,t1;
...@@ -611,7 +611,7 @@ trx_rollback_active( ...@@ -611,7 +611,7 @@ trx_rollback_active(
if (trx->error_state != DB_SUCCESS) { if (trx->error_state != DB_SUCCESS) {
ut_ad(trx->error_state == DB_INTERRUPTED); ut_ad(trx->error_state == DB_INTERRUPTED);
ut_ad(!srv_is_being_started); ut_ad(srv_shutdown_state != SRV_SHUTDOWN_NONE);
ut_ad(!srv_undo_sources); ut_ad(!srv_undo_sources);
ut_ad(srv_fast_shutdown); ut_ad(srv_fast_shutdown);
ut_ad(!dictionary_locked); ut_ad(!dictionary_locked);
...@@ -701,7 +701,7 @@ trx_rollback_resurrected( ...@@ -701,7 +701,7 @@ trx_rollback_resurrected(
trx_free_resurrected(trx); trx_free_resurrected(trx);
return(TRUE); return(TRUE);
case TRX_STATE_ACTIVE: case TRX_STATE_ACTIVE:
if (!srv_is_being_started if (srv_shutdown_state != SRV_SHUTDOWN_NONE
&& !srv_undo_sources && srv_fast_shutdown) { && !srv_undo_sources && srv_fast_shutdown) {
fake_prepared: fake_prepared:
trx->state = TRX_STATE_PREPARED; trx->state = TRX_STATE_PREPARED;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment