Comment 9 for bug 1177206

Revision history for this message
Vlad Lesin (vlad-lesin) wrote :

The assertion is activated during incremental backup preparing. The tablespace on which assertion is activated is created in xb_space_create_file() . FIL_IBD_FILE_INITIAL_SIZE * UNIV_PAGE_SIZE bytes are reserved in the beginning of .ibd file and only the first page is initialized and flushed, the other pages are null and PAGE_N_HEAP field is null too for that pages. During recovery process that null pages are read from .idb file and log records list for the page on which assertion arises begins with several MLOG_ZIP_WRITE_BLOB_PTR log records and MLOG_COMP_REC_INSERT which checks PAGE_N_HEAP field. As the table is compressed and PAGE_N_HEAP is not set for the page the assertion fails.

The base backup does not contain the .idb file. I.e. the .idb file was created between base and first incremental backup. .delta file for the tablespace is null (except header). That means there are no pages in the .idb file with LSN > base backup last lsn. That can be if pages in the .idb file were not flushed at the moment of .delta file generating.

The PAGE_N_HEAP should be set in page_create() which is invoked if MLOG_PAGE_CREATE log record is applied. But log records list does not contain MLOG_PAGE_CREATE for the page. So the main question - why?