• Marko Mäkelä's avatar
    MDEV-34216 Possible corruption when shrinking the system tablespace on innodb_fast_shutdown=0 · b793feb1
    Marko Mäkelä authored
    This bug was found related to MDEV-34212.
    
    Some InnoDB tests, most notably innodb.table_flags,64k would occasionally
    fail. I am able to reproduce this locally on a MemorySanitizer build,
    sporadically.
    
    The following is a minimal .test file for reproducing this:
      --source include/have_innodb.inc
      SELECT @@innodb_page_size;
    and the .opt file:
      --innodb-undo-tablespaces=0 --innodb-page-size=64k
      --innodb-buffer-pool-size=20m
    
    This bug was revealed due to the recent
    commit 466ae1cf
    which set innodb_fast_shutdown=0 during server bootstrap
    in our regression test driver.
    
    Due to the bug, a write of undo page 50 in the system tablespace
    was discarded in buf_page_t::flush(). A subsequent InnoDB startup
    failed because an old version of that page would point to a
    freed undo log page 300.
    
    mtr_t::commit_shrink(): Only invoke fil_space_t::set_create_lsn()
    on undo tablespaces, which will be fully reinitialized or created
    from the scratch. On the system tablespace, we must only adjust
    the file size, to avoid writing pages that are beyond the end
    of the tablespace. Thanks to Thirunarayanan Balathandayuthapani
    for providing this fix.
    b793feb1
mtr0mtr.cc 50.6 KB