• Aditya A's avatar
    Bug #21025880 DUPLICATE UK VALUES IN READ-COMMITTED (AGAIN) · 608efca4
    Aditya A authored
    PROBLEM
    
    Whenever we insert in unique secondary index we take shared
    locks on all possible duplicate record present in the table.
    But while during a replace on the unique secondary index ,
    we take exclusive and locks on the all duplicate record.
    When the records are deleted, they are first delete marked
    and later purged by the purge thread. While purging the
    record we call the lock_update_delete() which in turn calls
    lock_rec_inherit_to_gap() to inherit locks of the deleted
    records. In repeatable read mode we inherit all the locks
    from the record to the next record  but in the read commited
    mode we skip inherting them as gap type locks. We make a
    exception here if the lock on the records is  in shared mode
    ,we assume that it is set during insert for unique secondary
    index and needs to be inherited to stop constraint violation.
    We didnt handle the case when exclusive locks are set during
    replace, we skip inheriting locks of these records and hence
    causing constraint violation.
    
    FIX
    
    While inheriting the locks,check whether the transaction is
    allowed to do TRX_DUP_REPLACE/TRX_DUP_IGNORE, if true
    inherit the locks.
    
    [ Revewied by Jimmy #rb9709]
    608efca4
lock0lock.c 163 KB