• Jon Olav Hauglid's avatar
    Backport of revno: 2599.169.2 · 4235167f
    Jon Olav Hauglid authored
    Bug #42074 concurrent optimize table and 
               alter table = Assertion failed: thd->is_error()
    
    This assertion could occur if OPTIMIZE TABLE was started on a InnoDB table
    and the table was altered to different storage engine after OPTIMIZE
    had started. This allowed OPTIMIZE to pass the initial checks for 
    storage engine support, but fail once it reached "recreate+analyze"
    if this operation was not supported by the new storage engine.
    The bug had no consequences for non-debug builds of the server.
    
    In detail, the assertion was triggered when ha_analyze() returned 
    HA_ADMIN_NOT_IMPLEMENTED. This led to a code path which included an 
    assert checking for diagnostics area contents. Since this area had 
    not been filled, the assertion was triggered. The diagnostics area 
    is in this case only used to provide more detailed information about 
    why optimize failed. The triggered code path sends this information 
    to the client and clears the diagnostic area.
    
    This patch fixed the problem by adding an error message to the diagnostic 
    area if ha_analyze() fails. This error message contains the error code
    returned by ha_analyze().
    
    Test case added to innodb_mysql_sync.test.
    4235167f
innodb_mysql_sync.test 1.21 KB