diff options
Diffstat (limited to 'storage/innobase/buf/buf0flu.cc')
-rw-r--r-- | storage/innobase/buf/buf0flu.cc | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/storage/innobase/buf/buf0flu.cc b/storage/innobase/buf/buf0flu.cc index 45c9b661d6f..2cfca67ddd1 100644 --- a/storage/innobase/buf/buf0flu.cc +++ b/storage/innobase/buf/buf0flu.cc @@ -783,7 +783,17 @@ buf_flush_init_for_writing( || &block->page.zip == page_zip_); ut_ad(!block || newest_lsn); ut_ad(page); - ut_ad(!newest_lsn || fil_page_get_type(page)); + /* Encryption key rotation procedure can write dummy log records to + update page's space id, what causes page LSN update, and we need some + additional check during recovery to be sure the page is freshly + allocated, see buf_page_create() to find such patterns */ + ut_ad(fil_page_get_type(page) + || (!newest_lsn + || (mach_read_from_4(page + FIL_PAGE_SPACE_ID) + == block->page.id.space() + && mach_read_from_4(page + FIL_PAGE_PREV) == 0xffffffff + && mach_read_from_4(page + FIL_PAGE_NEXT) == 0xffffffff + && !mach_read_from_4(page + FIL_PAGE_SPACE_OR_CHKSUM)))); if (page_zip_) { page_zip_des_t* page_zip; |