page_parser in 0.5 does not parse FIL_PAGE_TYPE_BLOB pages

Bug #837537 reported by Aurimas Mikalauskas on 2011-08-30
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Percona Data Recovery Tool for InnoDB
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

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  Edit
Everyone can see this information.

Other bug subscribers