• Jon Olav Hauglid's avatar
    Bug#12623923 Server can crash after failure to create · 96bb813a
    Jon Olav Hauglid authored
                 primary key with innodb tables
    
    The bug was triggered if a single ALTER TABLE statement both
    added and dropped indexes and ALTER TABLE failed during drop
    (e.g. because the index was needed in a foreign key constraint).
    In such cases, the server index information would get out of
    sync with InnoDB - the added index would be present inside
    InnoDB, but not in the server. This could then lead to InnoDB
    error messages and/or server crashes.
    
    The root cause is that new indexes are added before old indexes
    are dropped. This means that if ALTER TABLE fails while dropping
    indexes, index changes will be reverted in the server but not
    inside InnoDB.
    
    This patch fixes the problem by dropping any added indexes
    if drop fails (for ALTER TABLE statements that both adds
    and drops indexes). 
    
    However, this won't work if we added a primary key as this
    key might not be possible to drop inside InnoDB. Therefore,
    we resort to the copy algorithm if a primary key is added
    by an ALTER TABLE statement that also drops an index.
    
    In 5.6 this bug is more properly fixed by the handler interface
    changes done in the scope of WL#5534 "Online ALTER".
    96bb813a
sql_table.cc 239 KB