summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2020-04-03 17:47:56 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2020-04-03 17:47:56 +0300
commit1078a630f75ecc6e759e6776794a98c2c57b1231 (patch)
tree61d4314e1c0265aeb4fdfd2fb88f2a38d3b12ed2
parentabb0a31ec822b4f2a5fc2473657f6acf1284cbf2 (diff)
downloadmariadb-git-1078a630f75ecc6e759e6776794a98c2c57b1231.tar.gz
MDEV-22139 fseg_free_page_low() fails to write FREE_PAGE record, breaking recovery
This bug was introduced by MDEV-15528 commit a35b4ae89871d8184f04abb112c385481d557dbb. In the case that I analyzed, we failed to apply an EXTENDED,INSERT_REUSE_REDUNDANT redo log record whose preceding record points to unallocated area after PAGE_HEAP_TOP. Had we properly written the FREE_PAGE record for the page, recovery would have processed it, because during the checkpoint, the log had been completely written past the LSN of the missed write. fseg_free_page_low(): Always invoke mtr_t::free(). The other call is in fsp_free_page().
-rw-r--r--storage/innobase/fsp/fsp0fsp.cc2
1 files changed, 2 insertions, 0 deletions
diff --git a/storage/innobase/fsp/fsp0fsp.cc b/storage/innobase/fsp/fsp0fsp.cc
index 86b199c5267..7d970c12814 100644
--- a/storage/innobase/fsp/fsp0fsp.cc
+++ b/storage/innobase/fsp/fsp0fsp.cc
@@ -2605,6 +2605,8 @@ fseg_free_page_low(
xdes, xoffset, mtr);
fsp_free_extent(space, offset, mtr);
}
+
+ mtr->free(page_id_t(space->id, offset));
}
#ifndef BTR_CUR_HASH_ADAPT