• Vlad Lesin's avatar
    MDEV-17843 Assertion `page_rec_is_leaf(rec)' failed in lock_rec_queue_validate... · 2c381d8c
    Vlad Lesin authored
    MDEV-17843 Assertion `page_rec_is_leaf(rec)' failed in lock_rec_queue_validate upon SHOW ENGINE INNODB STATUS
    
    lock_validate() accumulates page ids under locked lock_sys->mutex, then
    releases the latch, and invokes lock_rec_block_validate() for each page.
    Some other thread has ability to add/remove locks and change pages
    between releasing the latch in lock_validate() and acquiring it in
    lock_rec_validate_page().
    
    lock_rec_validate_page() can invoke lock_rec_queue_validate() for
    non-locked supremum, what can cause ut_ad(page_rec_is_leaf(rec)) failure
    in lock_rec_queue_validate().
    
    The fix is to invoke lock_rec_queue_validate() only for locked records
    in lock_rec_validate_page().
    
    The error message in lock_rec_block_validate() is not necessary as
    BUF_GET_POSSIBLY_FREED mode is used to get block from buffer pool, and
    this is not error if a block was evicted.
    
    The test case would require new debug sync point. I think it's not
    necessary as the fixed code is debug-only.
    2c381d8c
lock0lock.cc 192 KB