[MDEV-19435] buf_fix_count > 0 for corrupted page when it exits the LRU list Created: 2019-05-10  Updated: 2019-06-13  Resolved: 2019-06-13

Status: Closed
Project: MariaDB Server
Component/s: Storage Engine - InnoDB
Affects Version/s: 10.2, 10.3, 10.4
Fix Version/s: 10.2.25, 10.3.16, 10.4.6

Type: Bug Priority: Major
Reporter: Thirunarayanan Balathandayuthapani Assignee: Thirunarayanan Balathandayuthapani
Resolution: Fixed Votes: 0
Labels: None


 Description   

One of the purge thread access the corrupted page and tries to remove from LRU list. In the mean time, other purge threads are waiting for same page
in buf_wait_for_read(). Assertion(buf_fix_count == 0) fails for the purge thread which tries to remove the page from LRU list.



 Comments   
Comment by Marko Mäkelä [ 2019-05-14 ]

thiru, there appears to be a hang on bb-10.3-MDEV-19435 during the recovery after the injected corruption.

Comment by Marko Mäkelä [ 2019-05-29 ]

On 10.3, the MDEV-19541 test innodb.leaf_page_corrupted_during_recovery works around this bug by disabling purge, so that it will not access a corrupted page:

--- 10.2/mysql-test/suite/innodb/t/leaf_page_corrupted_during_recovery.test	2019-05-29 11:19:52.141685082 +0300
+++ 10.3/mysql-test/suite/innodb/t/leaf_page_corrupted_during_recovery.test	2019-05-29 10:35:03.380172175 +0300
@@ -46,6 +46,8 @@
 SELECT * FROM t1 WHERE PK = 1;
 
 let $restart_parameters=--innodb-force-recovery=1;
+# Work around MDEV-19435 to avoid crash in row_purge_reset_trx_id()
+let $restart_parameters=--innodb-force-recovery=2;
 --source include/restart_mysqld.inc
 SELECT * FROM t1 WHERE PK = 1;
 --error ER_NOT_KEYFILE

Comment by Thirunarayanan Balathandayuthapani [ 2019-06-10 ]

pushed the patch again with recent 10.3 (includes the fixes of mdev-19541). Let's see how bb responds for this one

Generated at Thu Feb 08 08:51:40 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.