• Marko Mäkelä's avatar
    MDEV-20788: Bogus assertion failure for PAGE_FREE list · 6d7a8269
    Marko Mäkelä authored
    In MDEV-11369 (instant ADD COLUMN) in MariaDB Server 10.3,
    we introduced the hidden metadata record that must be the
    first record in the clustered index if and only if
    index->is_instant() holds.
    
    To catch MDEV-19783, in
    commit ed0793e0 and
    commit 99dc40d6
    we added some assertions to find cases where
    the metadata record is missing while it should not be, or a
    record exists when it should not. Those assertions were invalid
    when traversing the PAGE_FREE list. That list can contain anything;
    we must only be able to determine the successor and the size of
    each garbage record in it.
    
    page_validate(), page_simple_validate_old(), page_simple_validate_new():
    Do not invoke page_rec_get_next_const() for traversing the PAGE_FREE
    list, but instead use a lower-level accessor that does not attempt to
    validate the REC_INFO_MIN_REC_FLAG.
    
    page_copy_rec_list_end_no_locks(),
    page_copy_rec_list_start(), page_delete_rec_list_start():
    Add assertions.
    
    btr_page_get_split_rec_to_left(): Remove a redundant return value,
    and make the output parameter the return value.
    
    btr_page_get_split_rec_to_right(), btr_page_split_and_insert(): Clean up.
    6d7a8269
btr0cur.cc 229 KB