[MDEV-27014] InnoDB fails to restore page 0 from the doublewrite buffer Created: 2021-11-10 Updated: 2021-12-21 Resolved: 2021-12-12 |
|
| Status: | Closed |
| Project: | MariaDB Server |
| Component/s: | Storage Engine - InnoDB |
| Affects Version/s: | 10.6.3, 10.6.4, 10.6.5 |
| Fix Version/s: | 10.8.0, 10.6.6, 10.7.2 |
| Type: | Bug | Priority: | Critical |
| Reporter: | Marko Mäkelä | Assignee: | Thirunarayanan Balathandayuthapani |
| Resolution: | Fixed | Votes: | 0 |
| Labels: | recovery | ||
| Attachments: |
|
||||||||||||||||||||
| Issue Links: |
|
||||||||||||||||||||
| Description |
|
The test innodb.doublewrite corrupts the first page of a data file t1.ibd by writing 0 to the bytes 34 through 37 and recomputing the checksum. The data directory in data.tar.xz
You will find that fil_ibd_load() is invoked once and returns FIL_LOAD_DEFER. After that, buf_dblwr_t::recover() will be invoked, but there is no call of Datafile::restore_from_doublewrite(). The scenario is similar to Note: The doublewrite copy of the page is at the very first slot. The contents only differs for the tablespace identifier and the page checksum:
Thanks to monty for providing a copy of the data directory. |
| Comments |
| Comment by Thirunarayanan Balathandayuthapani [ 2021-11-15 ] |
|
Patch is in bb-10.6- |
| Comment by Marko Mäkelä [ 2021-11-16 ] |
|
The patch looks OK to me. I would suggest passing the added parameter by value rather than by pointer. |