• Dmitry Shulga's avatar
    Fixed bug#54486 - assert in my_seek, concurrent · 5ca6880d
    Dmitry Shulga authored
    DROP/CREATE SCHEMA, CREATE TABLE, REPAIR.
    
    The cause of assert was concurrent execution of
    DROP DATABASE and REPAIR TABLE where first statement
    deleted table's file .TMD at the same time as
    REPAIR TABLE tried to read file details from the old file
    that was just removed.
    
    Additionally was fixed trouble when DROP TABLE try delete
    all files belong to table being dropped at the same time
    when REPAIR TABLE statement has just deleted .TMD file.
    
    No regression test added because this would require adding a
    sync point to mysys/my_redel.c. Since this bug is not present in
    5.5+, adding test coverage was considered unnecessary.
    The patch has been verified using RQG testing.
    
    
    sql/sql_db.cc:
      mysql_rm_known_files() modified: ignore possible ENOENT error
      when trying delete all table's files. Such aggressive 
      algorithm permits skip already deleted (in another thread)
      files.
      
      Installation of Drop_table_error_handler as internal error handler
      moved from mysql_rm_db() to mysql_rm_knowns_files() near to place
      where source of possible errors (call to mysql_rm_table_part2) located.
    storage/myisam/mi_check.c:
      mi_repair() was modified: set param->retry_repair= 0
      in order to don't call following failover procedure
      in ha_myisam::repair().
    5ca6880d
sql_db.cc 59.3 KB