• Vlad Lesin's avatar
    MDEV-32272 lock_release_on_prepare_try() does not release lock if supremum bit... · 18fa00a5
    Vlad Lesin authored
    MDEV-32272 lock_release_on_prepare_try() does not release lock if supremum bit is set along with other bits set in lock's bitmap
    
    The error is caused by MDEV-30165 fix with the following commit:
    d13a57ae
    
    There is logical error in lock_release_on_prepare_try():
    
            if (supremum_bit)
              lock_rec_unlock_supremum(*cell, lock);
            else
              lock_rec_dequeue_from_page(lock, false);
    
    Because there can be other bits set in the lock's bitmap, and the lock
    type can be suitable for releasing criteria, but the above logic
    releases only supremum bit of the lock.
    
    The fix is to release lock if it suits for releasing criteria and unlock
    supremum if supremum is locked otherwise.
    
    Tere is also the test for the case, which was reported by QA team. I
    placed it in a separate files, because it requires debug build.
    
    Reviewed by: Marko Mäkelä
    18fa00a5
xa_prepare_reset_supremum_lock.test 1.24 KB