Skip to content

Commit b793feb

Browse files
committed
MDEV-34216 Possible corruption when shrinking the system tablespace on innodb_fast_shutdown=0
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 466ae1c 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.
1 parent ff377d3 commit b793feb

File tree

1 file changed

+2
-1
lines changed

1 file changed

+2
-1
lines changed

storage/innobase/mtr/mtr0mtr.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -583,8 +583,9 @@ void mtr_t::commit_shrink(fil_space_t &space, uint32_t size)
583583

584584
if (space.id == TRX_SYS_SPACE)
585585
srv_sys_space.set_last_file_size(file->size);
586+
else
587+
space.set_create_lsn(m_commit_lsn);
586588

587-
space.set_create_lsn(m_commit_lsn);
588589
mysql_mutex_unlock(&fil_system.mutex);
589590

590591
space.clear_freed_ranges();

0 commit comments

Comments
 (0)