• Jon Olav Hauglid's avatar
    Bug #45225 Locking: hang if drop table with no timeout · 5bb67f34
    Jon Olav Hauglid authored
    This patch introduces timeouts for metadata locks. 
    
    The timeout is specified in seconds using the new dynamic system 
    variable  "lock_wait_timeout" which has both GLOBAL and SESSION
    scopes. Allowed values range from 1 to 31536000 seconds (= 1 year). 
    The default value is 1 year.
    
    The new server parameter "lock-wait-timeout" can be used to set
    the default value parameter upon server startup.
    
    "lock_wait_timeout" applies to all statements that use metadata locks.
    These include DML and DDL operations on tables, views, stored procedures
    and stored functions. They also include LOCK TABLES, FLUSH TABLES WITH
    READ LOCK and HANDLER statements.
    
    The patch also changes thr_lock.c code (table data locks used by MyISAM
    and other simplistic engines) to use the same system variable.
    InnoDB row locks are unaffected.
    
    One exception to the handling of the "lock_wait_timeout" variable
    is delayed inserts. All delayed inserts are executed with a timeout
    of 1 year regardless of the setting for the global variable. As the
    connection issuing the delayed insert gets no notification of 
    delayed insert timeouts, we want to avoid unnecessary timeouts.
    
    It's important to note that the timeout value is used for each lock
    acquired and that one statement can take more than one lock.
    A statement can therefore block for longer than the lock_wait_timeout 
    value before reporting a timeout error. When lock timeout occurs, 
    ER_LOCK_WAIT_TIMEOUT is reported.
    
    Test case added to lock_multi.test.
    5bb67f34
sql_delete.cc 37.8 KB