page_parser in 0.5 does not parse FIL_PAGE_TYPE_BLOB pages

Bug #837537 reported by Aurimas Mikalauskas
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Percona Data Recovery Tool for InnoDB
Fix Committed
Critical
Aleksandr Kuzminsky

Bug Description

When using page_parser on a table with external blob pages, they are not processed. 130M ibd file gives me only 3M of pages - those that contain the original rows but not external pages. I have used page_parser from 0.4 to successfully split these pages and then moved them to a proper place for processing with constraints_parser.

I thought the reason could be that external blob pages don't have infimum/supremum records, but from this it seems only page checksum is checked for BLOB pages:

line 226: if (((page_type == FIL_PAGE_INDEX) && valid_innodb_page(cache + i)) || ((page_type == FIL_PAGE_TYPE_BLOB )&& valid_innodb_checksum(cache + i) )) {

On the other hand, when I enable debug output, I can see it dismissing good pages saying infimum/supremum does not match, while I recognize the data from these pages in the infimum/supremum position:

Page PAGE_N_HEAP: FFFFFFFF
Page version: 1
Page infimum offset: 00000063
Page supremum offset: 00000070
Page infimum record: amily:
Invalid page
Page PAGE_N_HEAP: FFFFFFFF
Page version: 1
Page infimum offset: 00000063
Page supremum offset: 00000070
Page infimum record: amily:
Invalid page
Page PAGE_N_HEAP: FFFFFFFF
Page version: 1
Page infimum offset: 00000063
Page supremum offset: 00000070
Page infimum record: text="#
Invalid page

I have the data which we can use to reproduce this.

Changed in percona-data-recovery-tool-for-innodb:
assignee: nobody → Aleksandr Kuzminsky (akuzminsky)
milestone: none → release-0.6
importance: Undecided → Critical
Revision history for this message
Aleksandr Kuzminsky (akuzminsky) wrote :

In versions before 5.1.7 external pages have type FIL_PAGE_INDEX.

/** File page types (values of FIL_PAGE_TYPE) @{ */
#define FIL_PAGE_INDEX 17855 /*!< B-tree node */
#define FIL_PAGE_UNDO_LOG 2 /*!< Undo log page */
#define FIL_PAGE_INODE 3 /*!< Index node */
#define FIL_PAGE_IBUF_FREE_LIST 4 /*!< Insert buffer free list */
/* File page types introduced in MySQL/InnoDB 5.1.7 */
#define FIL_PAGE_TYPE_ALLOCATED 0 /*!< Freshly allocated page */
#define FIL_PAGE_IBUF_BITMAP 5 /*!< Insert buffer bitmap */
#define FIL_PAGE_TYPE_SYS 6 /*!< System page */
#define FIL_PAGE_TYPE_TRX_SYS 7 /*!< Transaction system data */
#define FIL_PAGE_TYPE_FSP_HDR 8 /*!< File space header */
#define FIL_PAGE_TYPE_XDES 9 /*!< Extent descriptor page */
#define FIL_PAGE_TYPE_BLOB 10 /*!< Uncompressed BLOB page */
#define FIL_PAGE_TYPE_ZBLOB 11 /*!< First compressed BLOB page */
#define FIL_PAGE_TYPE_ZBLOB2 12 /*!< Subsequent compressed BLOB page */
/* @} */

Changed in percona-data-recovery-tool-for-innodb:
status: New → Incomplete
status: Incomplete → Fix Committed
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.