• unknown's avatar
    Fix for bug #25044 "ALTER TABLE ... ENABLE KEYS acquires global 'opening · ac5e6f60
    unknown authored
    tables' lock."
    
    Execution of ALTER TABLE ... ENABLE KEYS on a table (which can take rather
    long time) prevented concurrent execution of all statements using tables.
    
    The problem was caused by the fact that we were holding LOCK_open mutex
    during whole duration of this statement and particularly during call
    to handler::enable_indexes(). This behavior was introduced as part of the
    fix for bug 14262 "SP: DROP PROCEDURE|VIEW (maybe more) write to binlog
    too late (race cond)"
    
    The patch simply restores old behavior. Note that we can safely do this as
    this operation takes exclusive lock (similar to name-lock) which blocks both
    DML and DDL on the table being altered.
    
    It also introduces mysql-test/include/wait_show_pattern.inc helper script
    which is used to make test-case for this bug robust enough.
    
    
    mysql-test/include/wait_slave_status.inc:
      Now wait_slave_status.inc reuses more generic wait_output_matches.inc script.
    sql/sql_table.cc:
      mysql_alter_table():
        Changed ALTER TABLE ... ENABLE/DISABLE KEYS not to hold LOCK_open mutex
        during call to handler::enable_indexes() as the latter can take rather
        long time and therefore such ALTER would block execution of all other
        statements that use tables. We can safely do this as this operation takes 
        exclusive lock (similar to name-lock) on the table which is altered.
    mysql-test/include/wait_show_pattern.inc:
      New BitKeeper file ``mysql-test/include/wait_show_pattern.inc''
    mysql-test/r/alter_table-big.result:
      New BitKeeper file ``mysql-test/r/alter_table-big.result''
    mysql-test/t/alter_table-big.test:
      New BitKeeper file ``mysql-test/t/alter_table-big.test''
    ac5e6f60
sql_table.cc 126 KB