[MDEV-26936] Recovery crash on rolling back DELETE FROM SYS_INDEXES Created: 2021-10-29 Updated: 2021-11-01 Resolved: 2021-10-29 |
|
| Status: | Closed |
| Project: | MariaDB Server |
| Component/s: | Storage Engine - InnoDB |
| Affects Version/s: | None |
| Fix Version/s: | 10.6.5 |
| Type: | Bug | Priority: | Major |
| Reporter: | Marko Mäkelä | Assignee: | Marko Mäkelä |
| Resolution: | Fixed | Votes: | 0 |
| Labels: | crash, recovery | ||
| Issue Links: |
|
||||||||
| Description |
|
In yesterday’s stress tests by mleich we got a crash in a kill+restart test. I started a server on the saved data directory and got the following crash:
This occurred while we were rolling back a DELETE operation of a SYS_INDEXES record for which NAME='\xffuidx'. The special byte '\xff' indicates that it is a stub for ADD INDEX uidx. At the same time, we had recovered a DML transaction that is holding a lock on the same user table (t1). The assertion fails, because tables must never be evicted if other transactions are holding locks on them. With some effort, I created a repeatable test case for this:
Note: I have no idea why that sleep 1 is needed. I suspect
|
| Comments |
| Comment by Marko Mäkelä [ 2021-10-29 ] | ||||||||||
|
I do not think that there is anything wrong with durability after all. The sleep 1 is sloppy, but if I change it to COMMIT (which is what would request durability), then the recovery would not crash. | ||||||||||
| Comment by Marko Mäkelä [ 2021-10-29 ] | ||||||||||
|
I can force a redo log write (and provoke the recovery crash) with a debug variable:
|