From: Dmitry Shulga Date: December 10 2010 7:48am Subject: bzr commit into mysql-5.1-bugteam branch (Dmitry.Shulga:3515) Bug#54486 List-Archive: http://lists.mysql.com/commits/126502 X-Bug: 54486 Message-Id: <201012100749.oBA7dImq031522@rcsinet13.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1606401118==" --===============1606401118== 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:bjorn.munch@stripped 3515 Dmitry Shulga 2010-12-10 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 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(). 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-10 07:48:50 +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,8 @@ bool mysql_rm_db(THD *thd,char *db,bool error = 0; reenable_binlog(thd); } - thd->pop_internal_handler(); } + if (!silent && deleted>=0) { const char *query; @@ -1213,16 +1210,34 @@ 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-10 07:48:50 +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) --===============1606401118== 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\ # 0cttphw0aga0j8km # target_branch: file:///Users/shulga/projects/mysql/5.1-bugteam-\ # bug54486/ # testament_sha1: 269a49dd6a63546344168314f8c767c1d50683c9 # timestamp: 2010-12-10 13:48:58 +0600 # base_revision_id: bjorn.munch@stripped\ # 7c4ob7wuy21clt42 # # Begin bundle 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 Oa+xZLkWJ/xdyRThQkCs1XeI --===============1606401118==--