summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThirunarayanan Balathandayuthapani <thiru@mariadb.com>2023-01-20 16:07:43 +0530
committerThirunarayanan Balathandayuthapani <thiru@mariadb.com>2023-01-23 09:55:49 +0530
commit647a7232ff12361a271c33223f1e1bbee6da5675 (patch)
tree3aa1cfef635bfe533737da635867490a4849cb4a
parentd9fbc6289d174f46513682e599510f573aa338c4 (diff)
downloadmariadb-git-647a7232ff12361a271c33223f1e1bbee6da5675.tar.gz
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
-rw-r--r--mysql-test/suite/innodb/t/undo_truncate.opt1
-rw-r--r--storage/innobase/mtr/mtr0mtr.cc23
2 files changed, 4 insertions, 20 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);
-
- 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);
+ ut_ad(!m_freed_pages);
+
+ space.clear_freed_ranges();
m_memo.for_each_block_in_reverse(CIterate<Shrink>{space});