From: Dmitry Shulga Date: December 3 2010 2:08pm Subject: bzr commit into mysql-5.1-bugteam branch (Dmitry.Shulga:3511) Bug#54486 List-Archive: http://lists.mysql.com/commits/125939 X-Bug: 54486 Message-Id: <201012031410.oB3CTsNG001667@rcsinet13.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1595282555==" --===============1595282555== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///Users/shulga/projects/mysql/5.1-bugteam-bug54486/ based on revid:vasil.dimov@stripped 3511 Dmitry Shulga 2010-12-03 Fixed bug#54486 - assert in my_seek, concurrent 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 when REPAIR TABLE statement tried replace old file by temporary file that has just been 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. Regression test isn't added because for such one need insert synchonization point (DEBUG_SYNC) to function my_redel() defined in mysys/my_redel.c. DEBUG_SYNC is defined in sql/debug_sync.h. So, in order to add this one we need add additional dependency, i.e. mysys/my_redel.c will depend on sql.debug_sync.h, that is wrong. @ sql/sql_db.cc mysql_rm_known_files() modified: ignore possible errors when trying delete all table's files. Such aggressigve algorithm permits skip already deleted (in another thread) files. @ 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(); set an error in diagnostic area in case of error in access to .TMD file. modified: sql/sql_db.cc storage/myisam/mi_check.c === modified file 'sql/sql_db.cc' --- a/sql/sql_db.cc 2010-10-19 10:27:09 +0000 +++ b/sql/sql_db.cc 2010-12-03 14:07:56 +0000 @@ -948,9 +948,6 @@ bool mysql_rm_db(THD *thd,char *db,bool remove_db_from_cache(db); pthread_mutex_unlock(&LOCK_open); - Drop_table_error_handler err_handler(thd->get_internal_handler()); - thd->push_internal_handler(&err_handler); - error= -1; /* We temporarily disable the binary log while dropping the objects @@ -983,8 +980,11 @@ bool mysql_rm_db(THD *thd,char *db,bool error = 0; reenable_binlog(thd); } - thd->pop_internal_handler(); } + DBUG_ASSERT(deleted >= 0 || + (deleted < 0 && thd->main_da.is_set()) || + thd->killed); + if (!silent && deleted>=0) { const char *query; @@ -1213,16 +1213,36 @@ static long mysql_rm_known_files(THD *th else { strxmov(filePath, org_path, "/", file->name, NullS); - if (my_delete_with_symlink(filePath,MYF(MY_WME))) + /* + We ignore ENOENT error in order to skip files that was deleted + by concurrently running statement like REAPIR TABLE ... + */ + if (my_delete_with_symlink(filePath, MYF(0)) && + my_errno != ENOENT) { - goto err; + my_error(EE_DELETE, MYF(0), filePath, my_errno); + goto err; } } } - if (thd->killed || - (tot_list && mysql_rm_table_part2(thd, tot_list, 1, 0, 1, 1))) + + if (thd->killed) goto err; + if (tot_list) + { + int res= 0; + { + Drop_table_error_handler err_handler(thd->get_internal_handler()); + + thd->push_internal_handler(&err_handler); + res= mysql_rm_table_part2(thd, tot_list, 1, 0, 1, 1); + thd->pop_internal_handler(); + } + if (res) + goto err; + } + /* Remove RAID directories */ { List_iterator it(raid_dirs); === modified file 'storage/myisam/mi_check.c' --- a/storage/myisam/mi_check.c 2010-03-25 12:08:21 +0000 +++ b/storage/myisam/mi_check.c 2010-12-03 14:07:56 +0000 @@ -1741,6 +1741,8 @@ err: MYF(MY_REDEL_MAKE_BACKUP): MYF(0))) || mi_open_datafile(info,share,name,-1)) got_error=1; + + param->retry_repair= 0; } } if (got_error) --===============1595282555== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/dmitry.shulga@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: dmitry.shulga@stripped\ # i806qgv9d7tklmco # target_branch: file:///Users/shulga/projects/mysql/5.1-bugteam-\ # bug54486/ # testament_sha1: 292b5d01f85bd5cb0cffe97710ad671a87667df6 # timestamp: 2010-12-03 20:08:13 +0600 # base_revision_id: vasil.dimov@stripped\ # j154vnn28ef2y9x5 # # Begin bundle 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 hoNRU8hvwGwzm8aOv/BSv/F3JFOFCQWz9DUg --===============1595282555==--