• Jon Olav Hauglid's avatar
    A 5.5 version of the fix for Bug #54360 "Deadlock DROP/ALTER/CREATE · 9ff272fb
    Jon Olav Hauglid authored
    DATABASE with open HANDLER"
    
    Remove LOCK_create_db, database name locks, and use metadata locks instead.
    This exposes CREATE/DROP/ALTER DATABASE statements to the graph-based
    deadlock detector in MDL, and paves the way for a safe, deadlock-free
    implementation of RENAME DATABASE.
    
    Database DDL statements will now take exclusive metadata locks on
    the database name, while table/view/routine DDL statements take
    intention exclusive locks on the database name. This prevents race
    conditions between database DDL and table/view/routine DDL.
    (e.g. DROP DATABASE with concurrent CREATE/ALTER/DROP TABLE)
    
    By adding database name locks, this patch implements
    WL#4450 "DDL locking: CREATE/DROP DATABASE must use database locks" and
    WL#4985 "DDL locking: namespace/hierarchical locks".
    
    The patch also changes code to use init_one_table() where appropriate.
    The new lock_table_names() function requires TABLE_LIST::db_length to
    be set correctly, and this is taken care of by init_one_table().
    
    This patch also adds a simple template to help work with 
    the mysys HASH data structure.
    
    Most of the patch was written by Konstantin Osipov.
    9ff272fb
lock.cc 42.5 KB