From: Sergey Vojtovich Date: March 2 2010 9:45am Subject: bzr commit into mysql-5.1-bugteam branch (svoj:3354) Bug#51307 List-Archive: http://lists.mysql.com/commits/102007 X-Bug: 51307 Message-Id: <0KYN007YDF4LJV80@fe-emea-09.sun.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="Boundary_(ID_eaEcm786IQvjIbykgK5T2A)" --Boundary_(ID_eaEcm786IQvjIbykgK5T2A) MIME-version: 1.0 Content-type: text/plain; CHARSET=US-ASCII Content-transfer-encoding: 7BIT Content-disposition: inline #At file:///home/svoj/devel/bzr-mysql/mysql-5.1-bugteam-bug51307/ based on revid:magne.mahre@stripped 3354 Sergey Vojtovich 2010-03-02 BUG#51307 - widespread corruption with partitions and insert...select Queries following bulk insert into an empty MyISAM table may break it. This was pure MyISAM problem. When bulk insert into an empty table is complete, MyISAM may want to enable indexes via repair by sort. If repair by sort fails (e.g. insufficient buffer), MyISAM failover to repair with key cache, requesting repair of data file. Repair of data file performs data file substitution. This means that current table instance will point to new data file. Other cached table instances are still pointing to an old, deleted data file. This is fixed by not requesting repair of data file during enable indexes. Explicit REPAIR is not affected, since it flushes all table instances. @ mysql-test/r/myisam.result A test case for BUG#51307. @ mysql-test/t/myisam.test A test case for BUG#51307. @ storage/myisam/ha_myisam.cc When enabling indexes do not attempt to repair data file. modified: mysql-test/r/myisam.result mysql-test/t/myisam.test storage/myisam/ha_myisam.cc === modified file 'mysql-test/r/myisam.result' --- a/mysql-test/r/myisam.result 2010-02-12 12:47:43 +0000 +++ b/mysql-test/r/myisam.result 2010-03-02 09:45:50 +0000 @@ -2339,4 +2339,37 @@ CHECK TABLE t1; Table Op Msg_type Msg_text test.t1 check status OK DROP TABLE t1; +# +# BUG#51307 - widespread corruption with partitions and insert...select +# +CREATE TABLE t1(a CHAR(255), KEY(a)); +SELECT * FROM t1, t1 AS a1; +a a +SET myisam_sort_buffer_size=4; +INSERT INTO t1 VALUES +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'); +Warnings: +Error 1034 myisam_sort_buffer_size is too small +Error 1034 Number of rows changed from 0 to 157 +SET myisam_sort_buffer_size=@@global.myisam_sort_buffer_size; +INSERT INTO t1 VALUES('1'); +SELECT * FROM t1, t1 AS a1 WHERE t1.a=1 AND a1.a=1; +a a +1 1 +DROP TABLE t1; End of 5.1 tests === modified file 'mysql-test/t/myisam.test' --- a/mysql-test/t/myisam.test 2010-02-12 12:47:43 +0000 +++ b/mysql-test/t/myisam.test 2010-03-02 09:45:50 +0000 @@ -1587,5 +1587,33 @@ REPLACE INTO t1 VALUES CHECK TABLE t1; DROP TABLE t1; +--echo # +--echo # BUG#51307 - widespread corruption with partitions and insert...select +--echo # +CREATE TABLE t1(a CHAR(255), KEY(a)); +SELECT * FROM t1, t1 AS a1; +SET myisam_sort_buffer_size=4; +INSERT INTO t1 VALUES +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'), +('0'),('0'),('0'),('0'),('0'),('0'),('0'); +SET myisam_sort_buffer_size=@@global.myisam_sort_buffer_size; +INSERT INTO t1 VALUES('1'); +SELECT * FROM t1, t1 AS a1 WHERE t1.a=1 AND a1.a=1; +DROP TABLE t1; + --echo End of 5.1 tests === modified file 'storage/myisam/ha_myisam.cc' --- a/storage/myisam/ha_myisam.cc 2009-10-27 14:27:27 +0000 +++ b/storage/myisam/ha_myisam.cc 2010-03-02 09:45:50 +0000 @@ -1448,9 +1448,17 @@ int ha_myisam::enable_indexes(uint mode) { sql_print_warning("Warning: Enabling keys got errno %d on %s.%s, retrying", my_errno, param.db_name, param.table_name); - /* Repairing by sort failed. Now try standard repair method. */ - param.testflag&= ~(T_REP_BY_SORT | T_QUICK); - error= (repair(thd,param,0) != HA_ADMIN_OK); + /* + Repairing by sort failed. Now try standard repair method. + Still we want to fix only index file. If data file corruption + was detected (T_RETRY_WITHOUT_QUICK), we shouldn't do much here. + Let implicit repair do this job. + */ + if (!(param.testflag & T_RETRY_WITHOUT_QUICK)) + { + param.testflag&= ~T_REP_BY_SORT; + error= (repair(thd,param,0) != HA_ADMIN_OK); + } /* If the standard repair succeeded, clear all error messages which might have been set by the first repair. They can still be seen --Boundary_(ID_eaEcm786IQvjIbykgK5T2A) MIME-version: 1.0 Content-type: text/bzr-bundle; CHARSET=US-ASCII; name="bzr/svoj@stripped" Content-transfer-encoding: 7BIT Content-disposition: inline; filename="bzr/svoj@stripped" # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: svoj@stripped # target_branch: file:///home/svoj/devel/bzr-mysql/mysql-5.1-bugteam-\ # bug51307/ # testament_sha1: f8f069ea14d7b2bd1a14c1313b73a907aff633ab # timestamp: 2010-03-02 13:45:55 +0400 # base_revision_id: magne.mahre@stripped\ # es0w3wmg9o1xv3ts # # Begin bundle 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 --Boundary_(ID_eaEcm786IQvjIbykgK5T2A)--