• Vlad Lesin's avatar
    MDEV-27025 insert-intention lock conflicts with waiting ORDINARY lock · be811386
    Vlad Lesin authored
    The code was backported from 10.6 bd03c0e5
    commit. See that commit message for details.
    
    Apart from the above commit trx_lock_t::wait_trx was also backported from
    MDEV-24738. trx_lock_t::wait_trx is protected with lock_sys.wait_mutex
    in 10.6, but that mutex was implemented only in MDEV-24789. As there is no
    need to backport MDEV-24789 for MDEV-27025,
    trx_lock_t::wait_trx is protected with the same mutexes as
    trx_lock_t::wait_lock.
    
    This fix should not break innodb-lock-schedule-algorithm=VATS. This
    algorithm uses an Eldest-Transaction-First (ETF) heuristic, which prefers
    older transactions over new ones. In this fix we just insert granted lock
    just before the last granted lock of the same transaction, what does not
    change transactions execution order.
    
    The changes in lock_rec_create_low() should not break Galera Cluster,
    there is a big "if" branch for WSREP. This branch is necessary to provide
    the correct transactions execution order, and should not be changed for
    the current bug fix.
    be811386
update.test 11.9 KB