Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-42009

Set GLOBAL innodb_log_archive=ON is not crash safe

    XMLWordPrintable

Details

    • 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

          Activity

            People

              marko Marko Mäkelä
              marko Marko Mäkelä
              Marko Mäkelä Marko Mäkelä
              Alessandro Vetere Alessandro Vetere
              Saahil Alam Saahil Alam
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Time Tracking

                  Estimated:
                  Original Estimate - 0d
                  0d
                  Remaining:
                  Remaining Estimate - 0d
                  0d
                  Logged:
                  Time Spent - 2d 7.25h
                  2d 7.25h

                  Git Integration

                    Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.