[MDEV-29996] Duplicated call to buf_page_t::set_ibuf_exist() on recovery Created: 2022-11-10 Updated: 2023-02-02 Resolved: 2022-11-10 |
|
| Status: | Closed |
| Project: | MariaDB Server |
| Component/s: | Storage Engine - InnoDB |
| Affects Version/s: | 10.8.0, 10.6.6, 10.7.2, 10.8.1, 10.9.0, 10.6.7, 10.6.8, 10.6.9, 10.7.3, 10.7.4, 10.7.5, 10.8.2, 10.8.3, 10.8.4, 10.9.1, 10.9.2, 10.10.0, 10.10.1, 10.6.10, 10.7.6, 10.8.5, 10.9.3, 10.6.11, 10.8.6, 10.9.4, 10.10.2, 10.11.0, 10.11.1, 10.9.5, 10.10.3 |
| Fix Version/s: | 10.11.2, 10.6.12, 10.7.8, 10.8.7, 10.9.5, 10.10.3 |
| Type: | Bug | Priority: | Major |
| Reporter: | Marko Mäkelä | Assignee: | Marko Mäkelä |
| Resolution: | Fixed | Votes: | 0 |
| Labels: | recovery, regression-10.6 | ||
| Attachments: |
|
||||||||
| Issue Links: |
|
||||||||
| Description |
|
With the attached data directory, MariaDB 10.6 and presumably 10.7 would fail to recover:
I did not check what would happen in a non-debug build, but I think that a hang is very well possible. I did check that 10.5 (a few changes ahead of MariaDB Server 10.5.18) recovers this data directory just fine. The following fixes it in 10.6:
It turns out that multiple threads can invoke recv_sys.apply(true) nearly simultaneously, causing mlog_init to be applied several times. The mlog_init was added already in Note: The InnoDB change buffer was disabled by default in |
| Comments |
| Comment by Marko Mäkelä [ 2022-11-10 ] |
|
I realized that the debug assertion in my above patch is duplicating the failing assertion inside buf_page_t::set_ibuf_exist(). We only need the call to clear(). |