Details
-
Bug
-
Status: Closed (View Workflow)
-
Critical
-
Resolution: Fixed
-
13.1, 13.2
-
ARMv8, POWER9
-
Can result in data loss
-
A crash after SET GLOBAL innodb_log_archive=ON could cause recovery to wrongly misinterpret old log records as new ones and apply them, corrupting data.
Description
The second-but-last test in innodb.blob-crash that was added in MDEV-39772 is causing intermittent failures on ARMv8 and POWER.
https://buildbot.mariadb.org/#/builders/945/builds/11941/steps/6/logs/stdio shows a failure:
|
st-main-knielsen 5129c153ca959c897bfe1c47db89d7950e9545b1 |
2026-11-02 11:58:02 0 [Warning] Could not increase number of max_open_files to more than 1024 (request: 32262)
|
2026-11-02 11:58:02 0 [Warning] Changed limits: max_open_files: 1024 max_connections: 151 (was 151) table_cache: 421 (was 2000)
|
2026-11-02 11:58:02 0 [Note] Starting MariaDB 13.2.0-MariaDB-log source revision 5129c153ca959c897bfe1c47db89d7950e9545b1 server_uid 1h0HZkK09ZN6e/u5OF8ip4qnUEY= as process 195377
|
2026-11-02 11:58:02 0 [Note] Help others discover MariaDB. Star it on GitHub: https://github.com/MariaDB/server
|
2026-11-02 11:58:02 0 [Note] Plugin 'partition' is disabled.
|
2026-11-02 11:58:02 0 [Note] InnoDB: Compressed tables use zlib 1.3.1
|
2026-11-02 11:58:02 0 [Note] InnoDB: Number of transaction pools: 1
|
2026-11-02 11:58:02 0 [Note] InnoDB: Using ARMv8 crc32 + pmull instructions
|
2026-11-02 11:58:02 0 [Note] InnoDB: Using io_uring
|
2026-11-02 11:58:02 0 [Note] InnoDB: innodb_buffer_pool_size_max=8388608m, innodb_buffer_pool_size=8m
|
2026-11-02 11:58:02 0 [Note] InnoDB: Completed initialization of buffer pool
|
2026-11-02 11:58:02 0 [Note] InnoDB: Starting crash recovery from checkpoint LSN=8579137
|
2026-11-02 11:58:02 0 [Note] InnoDB: End of log at LSN=8925763
|
2026-11-02 11:58:02 0 [Note] InnoDB: To recover: 54 pages
|
2026-11-02 11:58:02 0 [Note] InnoDB: 1 transaction(s) which must be rolled back or cleaned up in total 1 row operations to undo
|
2026-11-02 11:58:02 0 [Note] InnoDB: Trx id counter is 94
|
2026-11-02 11:58:02 0 [Note] InnoDB: Opened 3 undo tablespaces
|
2026-11-02 11:58:02 0 [Note] InnoDB: 128 rollback segments in 3 undo tablespaces are active.
|
2026-11-02 11:58:02 0 [Note] InnoDB: Removed temporary tablespace data file: "./ibtmp1"
|
2026-11-02 11:58:02 0 [Note] InnoDB: Setting file './ibtmp1' size to 12.000MiB. Physically writing the file full; Please wait ...
|
2026-11-02 11:58:02 0 [Note] InnoDB: File './ibtmp1' size is now 12.000MiB.
|
2026-11-02 11:58:02 0 [Note] InnoDB: log sequence number 8925763 (memory-mapped); transaction id 95
|
…
|
2026-11-02 11:58:03 0 [Note] InnoDB: Starting crash recovery from checkpoint LSN=13147518
|
2026-11-02 11:58:03 0 [Note] InnoDB: Multi-batch recovery needed at LSN 15196537
|
2026-11-02 11:58:03 0 [Note] InnoDB: End of log at LSN=20942857
|
2026-11-02 11:58:03 0 [Note] InnoDB: To recover: LSN 20369408/20942857; 254 pages
|
2026-11-02 11:58:03 0 [ERROR] InnoDB: Not applying INSERT_HEAP_REDUNDANT due to corruption on [page id: space=0, page number=8]
|
2026-11-02 11:58:03 0 [ERROR] InnoDB: Set innodb_force_recovery=1 to ignore corruption.
|
2026-11-02 11:58:03 0 [ERROR] InnoDB: Not applying INSERT_HEAP_REDUNDANT due to corruption on [page id: space=0, page number=9]
|
2026-11-02 11:58:03 0 [ERROR] InnoDB: Set innodb_force_recovery=1 to ignore corruption.
|
261102 12:01:04 [ERROR] /home/buildbot/aarch64-debian-13/build/sql/mariadbd got signal 6 ;
|
Recovery was hung for 3 minutes, after it reported a failure to apply a log record to the system tablespace, presumably to the dictionary tables that would be modified by DROP TABLE t3 earlier in the test:
|
mariadb-13.1.1:mysql-test/suite/innodb/t/blob-crash.test |
|
213
|
DROP TABLE t3; |
214
|
|
215
|
BEGIN; |
216
|
INSERT INTO t1 (a, b) VALUES (6, REPEAT('a', 4*1024*1024)); |
217
|
ROLLBACK; |
218
|
SET GLOBAL innodb_log_archive=ON; |
219
|
|
220
|
begin; |
221
|
UPDATE t1 set b = REPEAT('a', 4*1024*1024) where a = 5 ; |
222
|
|
223
|
--source include/restart_mysqld.inc |
The INSERT and UPDATE make the LSN grow by about 12 MiB.
This test does not intentionally corrupt anything between any server kill and restart. The corruption of the dictionary tables is completely unexpected and unacceptable. It turns out that the culprit is log_t::set_archive(), introduced in MDEV-37949.
The hang after the corruption was flagged is an older regression, filed separately as MDEV-42035.
Attachments
Issue Links
- is caused by
-
MDEV-37949 Implement innodb_log_archive
-
- Closed
-
- relates to
-
MDEV-42035 Recovery hangs due to corrupted system or undo tablespace
-
- Closed
-
-
MDEV-42040 Recovery ignores failure to apply log to a new page
-
- Open
-
-
MDEV-39772 SET GLOBAL innodb_log_archive=OFF breaks recovery
-
- Closed
-
-
MDEV-40080 innodb_log_archive=ON may corrupt the log
-
- Closed
-