From 647a7232ff12361a271c33223f1e1bbee6da5675 Mon Sep 17 00:00:00 2001 From: Thirunarayanan Balathandayuthapani Date: Fri, 20 Jan 2023 16:07:43 +0530 Subject: [PATCH] MDEV-30438 innodb.undo_truncate,4k fails when innodb-immediate-scrub-data-uncompressed is enabled - InnoDB fails to clear the freed ranges during truncation of innodb undo log tablespace. During shutdown, InnoDB flushes the freed page ranges and throws the out of bound error. mtr_t::commit_shrink(): clear the freed ranges while doing undo tablespace truncation --- mysql-test/suite/innodb/t/undo_truncate.opt | 1 + storage/innobase/mtr/mtr0mtr.cc | 21 ++------------------- 2 files changed, 3 insertions(+), 19 deletions(-) diff --git a/mysql-test/suite/innodb/t/undo_truncate.opt b/mysql-test/suite/innodb/t/undo_truncate.opt index f4d78725c6e..1459ec5db74 100644 --- a/mysql-test/suite/innodb/t/undo_truncate.opt +++ b/mysql-test/suite/innodb/t/undo_truncate.opt @@ -1 +1,2 @@ --innodb-buffer-pool-size=24M +--innodb-immediate-scrub-data-uncompressed=ON diff --git a/storage/innobase/mtr/mtr0mtr.cc b/storage/innobase/mtr/mtr0mtr.cc index 0aa5b9a4c3f..7f4812e158a 100644 --- a/storage/innobase/mtr/mtr0mtr.cc +++ b/storage/innobase/mtr/mtr0mtr.cc @@ -579,26 +579,9 @@ void mtr_t::commit_shrink(fil_space_t &space) /* Durably write the reduced FSP_SIZE before truncating the data file. */ log_write_and_flush(); - if (m_freed_pages) - { - ut_ad(!m_freed_pages->empty()); - ut_ad(m_freed_space == &space); - ut_ad(memo_contains(*m_freed_space)); - ut_ad(is_named_space(m_freed_space)); - m_freed_space->update_last_freed_lsn(m_commit_lsn); + ut_ad(!m_freed_pages); - if (!is_trim_pages()) - for (const auto &range : *m_freed_pages) - m_freed_space->add_free_range(range); - else - m_freed_space->clear_freed_ranges(); - delete m_freed_pages; - m_freed_pages= nullptr; - m_freed_space= nullptr; - /* mtr_t::start() will reset m_trim_pages */ - } - else - ut_ad(!m_freed_space); + space.clear_freed_ranges(); m_memo.for_each_block_in_reverse(CIterate{space});