• Jon Olav Hauglid's avatar
    Backport of revno: 2617.71.1 · 5e1dfa4c
    Jon Olav Hauglid authored
    Bug#42546 Backup: RESTORE fails, thinking it finds an existing table
    
    The problem occured when a MDL locking conflict happened for a non-existent 
    table between a CREATE and a INSERT statement. The code for CREATE 
    interpreted this lock conflict to mean that the table existed, 
    which meant that the statement failed when it should not have.
    The problem could occur for CREATE TABLE, CREATE TABLE LIKE and
    ALTER TABLE RENAME.
    
    This patch fixes the problem for CREATE TABLE and CREATE TABLE LIKE.
    It is based on code backported from the mysql-6.1-fk tree written
    by Dmitry Lenev. CREATE now uses normal open_and_lock_tables() code 
    to acquire exclusive locks. This means that for the test case in the bug 
    description, CREATE will wait until INSERT completes so that it can 
    get the exclusive lock. This resolves the reported bug.
    
    The patch also prohibits CREATE TABLE and CREATE TABLE LIKE under 
    LOCK TABLES. Note that this is an incompatible change and must 
    be reflected in the documentation. Affected test cases have been
    updated.
    
    mdl_sync.test contains tests for CREATE TABLE and CREATE TABLE LIKE.
    
    Fixing the issue for ALTER TABLE RENAME is beyond the scope of this
    patch. ALTER TABLE cannot be prohibited from working under LOCK TABLES
    as this could seriously impact customers and a proper fix would require
    a significant rewrite.
    5e1dfa4c
ps_ddl.result 49.3 KB