page_parser in 0.5 does not parse FIL_PAGE_TYPE_BLOB pages
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_
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 |
Changed in percona-data-recovery-tool-for-innodb: | |
status: | New → Incomplete |
status: | Incomplete → Fix Committed |
In versions before 5.1.7 external pages have type FIL_PAGE_INDEX.
/** File page types (values of FIL_PAGE_TYPE) @{ */ IBUF_FREE_ LIST 4 /*!< Insert buffer free list */ TYPE_ALLOCATED 0 /*!< Freshly allocated page */ IBUF_BITMAP 5 /*!< Insert buffer bitmap */ TYPE_TRX_ SYS 7 /*!< Transaction system data */ TYPE_FSP_ HDR 8 /*!< File space header */ TYPE_ZBLOB2 12 /*!< Subsequent compressed BLOB page */
#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_
/* File page types introduced in MySQL/InnoDB 5.1.7 */
#define FIL_PAGE_
#define FIL_PAGE_
#define FIL_PAGE_TYPE_SYS 6 /*!< System page */
#define FIL_PAGE_
#define FIL_PAGE_
#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_
/* @} */