• Thirunarayanan Balathandayuthapani's avatar
    MDEV-15855 Deadlock between purge thread and DDL statement · 8b0d4cff
    Thirunarayanan Balathandayuthapani authored
    Problem:
    ========
    Truncate operation holds MDL on the table (t1) and tries to
    acquire InnoDB dict_operation_lock. Purge holds dict_operation_lock
    and tries to acquire MDL on the table (t1) to evaluate virtual
    column expressions for indexed virtual columns.
    It leads to deadlock of purge and truncate table (DDL).
    
    Solution:
    =========
    If purge tries to acquire MDL on the table then it should do the following:
    
    i) Purge should release all innodb latches (including dict_operation_lock)
    before acquiring metadata lock on the table.
    
    ii) After acquiring metadata lock on the table, it should check whether the
    table was dropped or renamed. If the table is dropped then purge should
    ignore the undo log record. If the table is renamed then it should
    release the old MDL and acquire MDL on the new name.
    
    iii) Once purge acquires MDL, it should use the SQL table handle for all
    the remaining virtual index for the purge record.
    
    purge_node_t: Introduce new virtual column information to know whether
    the MDL was acquired successfully.
    
    This is joint work with Marko Mäkelä.
    8b0d4cff
btr0pcur.h 21.5 KB