[MDEV-21251] CHECK TABLE fails to check info_bits of records Created: 2019-12-09 Updated: 2020-10-06 Resolved: 2020-08-15 |
|
| Status: | Closed |
| Project: | MariaDB Server |
| Component/s: | Storage Engine - InnoDB |
| Affects Version/s: | 5.5, 10.0, 10.1, 10.2, 10.3, 10.4, 10.5 |
| Fix Version/s: | 10.3.26, 10.4.16, 10.5.7 |
| Type: | Bug | Priority: | Critical |
| Reporter: | Marko Mäkelä | Assignee: | Eugene Kosov (Inactive) |
| Resolution: | Fixed | Votes: | 0 |
| Labels: | check, corruption | ||
| Issue Links: |
|
||||||||||||||||
| Description |
|
CHECK TABLE fails to validate the info_bits of records. Specifically, if you run it on a table that was corrupted due to
Note: Please ignore debug assertion failures; we are interested in what the non-debug server does. |
| Comments |
| Comment by Marko Mäkelä [ 2019-12-09 ] |
|
I believe that we should validate the info_bits of each record in the loop of btr_validate_level(). Only the very first record of a level may carry the ‘minimum record’ flag (0x10). That flag must be set on the first record if and only if !page_is_leaf() or index->is_instant(). The delete-mark flag (0x20) is garbage on non-leaf page records. On leaf-page records on 10.3, it must not be in the metadata record (for which the ‘minimum record’ flag is set). No other info_bits than the two above mentioned 0x30 may ever be set on any record. For ROW_FORMAT≠REDUNDANT, we should also validate the status_bits. |
| Comment by Marko Mäkelä [ 2020-06-12 ] |
|
Related to this, tables that are in the |