Details
-
Bug
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Fixed
-
10.11.2, 10.6.12, 10.8.7, 10.9.5, 10.10.3, 10.7(EOL), 11.0(EOL), 11.1(EOL), 11.2(EOL), 11.3(EOL), 11.4, 11.5(EOL)
Description
In MDEV-30400 the function btr_cur_t::search_leaf() replaced the function btr_cur_search_to_nth_level() for the case level=0. That code was revised in MDEV-29385 with regard to the function btr_cur_need_opposite_intention().
Upon reaching the leaf level, one call to btr_cur_need_opposite_intention() is misplaced. Before these changes, btr_cur_search_to_nth_level() would invoke btr_cur_need_opposite_intention() after positioning page_cur_t::rec on the current page. As a result of the misplaced call, the calls to page_rec_is_last() and page_rec_is_first() would never seem to hold, because the page and rec would be within different buffer pool blocks.
The purpose of the function btr_cur_need_opposite_intention() is to detect when a page split could occur. As far as I can tell, this bug could cause a hang similar to the ones that the fix of MDEV-29835 attempted to address. Possibly, this bug could explain MDEV-31815.
Attachments
Issue Links
- relates to
-
MDEV-29835 Partial server freeze
- Closed
-
MDEV-30400 Assertion `height == btr_page_get_level(page_cur_get_page(page_cursor))' failed in btr_cur_search_to_nth_level on INSERT
- Closed
-
MDEV-31815 Assertion `mtr->memo_contains(index->lock, MTR_MEMO_X_LOCK)' failed in btr_attach_half_pages on INSERT (2k threads)
- Open