mirror of
https://github.com/MariaDB/server.git
synced 2026-05-16 20:07:13 +02:00
MDEV-22970: Disable MDEV-8139 due to corruption concerns
Contrary to our exceptations, it seems that a mini-transaction can allocate a page that it had freed earlier. The function mtr_t::init() is not prepared to deal with this, and it could happen that a newly initialized page will be scrubbed instead. This can affect the operation on page_compressed tables, or any InnoDB data files when innodb_background_scrub_data_uncompressed=ON. Also, buf_read_recv_pages() can interfere with the MDEV-8139 logic during crash recovery. Let us temporarily disable MDEV-8139 due to such concerns. Note: Scrubbing will partially work thanks to MDEV-15528. Only in cases where the page does not exist in the buffer pool at the time of the page flush, we would skip the scrubbing action.
This commit is contained in:
parent
cdbbc69353
commit
63b3f78922
3 changed files with 11 additions and 0 deletions
|
|
@ -1777,6 +1777,7 @@ append:
|
|||
log_phys_t(start_lsn, lsn, l, len));
|
||||
}
|
||||
|
||||
#if 0 /* FIXME: MDEV-22970 Potential corruption */
|
||||
/** Store/remove the freed pages in fil_name_t of recv_spaces.
|
||||
@param[in] page_id freed or init page_id
|
||||
@param[in] freed TRUE if page is freed */
|
||||
|
|
@ -1805,6 +1806,7 @@ static void store_freed_or_init_rec(page_id_t page_id, bool freed)
|
|||
i->second.remove_freed_page(page_no);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/** Parse and register one mini-transaction in log_t::FORMAT_10_5.
|
||||
@param checkpoint_lsn the log sequence number of the latest checkpoint
|
||||
|
|
@ -2004,7 +2006,9 @@ same_page:
|
|||
case INIT_PAGE:
|
||||
last_offset= FIL_PAGE_TYPE;
|
||||
free_or_init_page:
|
||||
#if 0 /* FIXME: MDEV-22970 Potential corruption */
|
||||
store_freed_or_init_rec(id, (b & 0x70) == FREE_PAGE);
|
||||
#endif
|
||||
if (UNIV_UNLIKELY(rlen != 0))
|
||||
goto record_corrupted;
|
||||
break;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue