diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2020-04-03 17:47:56 +0300 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2020-04-03 17:47:56 +0300 |
commit | 1078a630f75ecc6e759e6776794a98c2c57b1231 (patch) | |
tree | 61d4314e1c0265aeb4fdfd2fb88f2a38d3b12ed2 /storage | |
parent | abb0a31ec822b4f2a5fc2473657f6acf1284cbf2 (diff) | |
download | mariadb-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().
Diffstat (limited to 'storage')
-rw-r--r-- | storage/innobase/fsp/fsp0fsp.cc | 2 |
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 |