diff --git a/mysql-test/r/myisam.result b/mysql-test/r/myisam.result index c3eede79754..732b1b260f8 100644 --- a/mysql-test/r/myisam.result +++ b/mysql-test/r/myisam.result @@ -2252,43 +2252,4 @@ h+0 d + 0 e g + 0 1 1 3 0 1 1 4 0 DROP TABLE t1; -# -# BUG#40827 - Killing insert-select to MyISAM can cause table corruption -# -CREATE TABLE `t1` ( -`id` BIGINT(20) , -`id1` BIGINT(20) AUTO_INCREMENT, -KEY(id1), KEY(id) -) ENGINE=MyISAM; -CREATE TABLE `t2` ( -`id` BIGINT(20) , -`id1` BIGINT(20) AUTO_INCREMENT, -KEY (id1), KEY(id) -) ENGINE=MyISAM; -INSERT INTO t2 (id) VALUES (123); -INSERT INTO t2 (id) SELECT id FROM t2; -INSERT INTO t2 (id) SELECT id FROM t2; -INSERT INTO t2 (id) SELECT id FROM t2; -INSERT INTO t2 (id) SELECT id FROM t2; -INSERT INTO t2 (id) SELECT id FROM t2; -INSERT INTO t2 (id) SELECT id FROM t2; -INSERT INTO t2 (id) SELECT id FROM t2; -INSERT INTO t2 (id) SELECT id FROM t2; -INSERT INTO t2 (id) SELECT id FROM t2; -INSERT INTO t2 (id) SELECT id FROM t2; -# Switch to insert Connection -SET SESSION debug='+d,wait_in_enable_indexes'; -# Send insert data -INSERT INTO t1(id) SELECT id FROM t2; -# Switch to default Connection -# Wait for insert data to reach the debug point -SELECT ID FROM INFORMATION_SCHEMA.PROCESSLIST -WHERE STATE = 'wait_in_enable_indexes' AND -INFO = "INSERT INTO t1(id) SELECT id FROM t2" -INTO @thread_id; -KILL QUERY @thread_id; -CHECK TABLE t1; -Table Op Msg_type Msg_text -test.t1 check status OK -DROP TABLE t1,t2; End of 5.1 tests diff --git a/mysql-test/r/myisam_debug.result b/mysql-test/r/myisam_debug.result new file mode 100644 index 00000000000..c128bfffce9 --- /dev/null +++ b/mysql-test/r/myisam_debug.result @@ -0,0 +1,39 @@ +# +# BUG#40827 - Killing insert-select to MyISAM can cause table corruption +# +CREATE TABLE `t1` ( +`id` BIGINT(20) , +`id1` BIGINT(20) AUTO_INCREMENT, +KEY(id1), KEY(id) +) ENGINE=MyISAM; +CREATE TABLE `t2` ( +`id` BIGINT(20) , +`id1` BIGINT(20) AUTO_INCREMENT, +KEY (id1), KEY(id) +) ENGINE=MyISAM; +INSERT INTO t2 (id) VALUES (123); +INSERT INTO t2 (id) SELECT id FROM t2; +INSERT INTO t2 (id) SELECT id FROM t2; +INSERT INTO t2 (id) SELECT id FROM t2; +INSERT INTO t2 (id) SELECT id FROM t2; +INSERT INTO t2 (id) SELECT id FROM t2; +INSERT INTO t2 (id) SELECT id FROM t2; +INSERT INTO t2 (id) SELECT id FROM t2; +INSERT INTO t2 (id) SELECT id FROM t2; +INSERT INTO t2 (id) SELECT id FROM t2; +INSERT INTO t2 (id) SELECT id FROM t2; +# Switch to insert Connection +SET SESSION debug='+d,wait_in_enable_indexes'; +# Send insert data +INSERT INTO t1(id) SELECT id FROM t2; +# Switch to default Connection +# Wait for insert data to reach the debug point +SELECT ID FROM INFORMATION_SCHEMA.PROCESSLIST +WHERE STATE = 'wait_in_enable_indexes' AND +INFO = "INSERT INTO t1(id) SELECT id FROM t2" +INTO @thread_id; +KILL QUERY @thread_id; +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +DROP TABLE t1,t2; diff --git a/mysql-test/t/myisam.test b/mysql-test/t/myisam.test index 21ee1cffbd0..ba6bc05cfea 100644 --- a/mysql-test/t/myisam.test +++ b/mysql-test/t/myisam.test @@ -1503,57 +1503,5 @@ SELECT h+0, d + 0, e, g + 0 FROM t1; DROP TABLE t1; ---echo # ---echo # BUG#40827 - Killing insert-select to MyISAM can cause table corruption ---echo # - -CONNECT (insertConn, localhost, root,,); - -CREATE TABLE `t1` ( -`id` BIGINT(20) , -`id1` BIGINT(20) AUTO_INCREMENT, - KEY(id1), KEY(id) -) ENGINE=MyISAM; - -CREATE TABLE `t2` ( -`id` BIGINT(20) , -`id1` BIGINT(20) AUTO_INCREMENT, - KEY (id1), KEY(id) -) ENGINE=MyISAM; - -INSERT INTO t2 (id) VALUES (123); - -let $i = 10; -while ($i) -{ - INSERT INTO t2 (id) SELECT id FROM t2; - dec $i; -} - ---echo # Switch to insert Connection -CONNECTION insertConn; -SET SESSION debug='+d,wait_in_enable_indexes'; ---echo # Send insert data -SEND INSERT INTO t1(id) SELECT id FROM t2; - ---echo # Switch to default Connection -CONNECTION default; ---echo # Wait for insert data to reach the debug point - -let $wait_condition= - SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST - WHERE STATE = "wait_in_enable_indexes" AND - INFO = "INSERT INTO t1(id) SELECT id FROM t2"; ---source include/wait_condition.inc - -SELECT ID FROM INFORMATION_SCHEMA.PROCESSLIST -WHERE STATE = 'wait_in_enable_indexes' AND -INFO = "INSERT INTO t1(id) SELECT id FROM t2" -INTO @thread_id; - -KILL QUERY @thread_id; -CHECK TABLE t1; -DROP TABLE t1,t2; -DISCONNECT insertConn; --echo End of 5.1 tests diff --git a/mysql-test/t/myisam_debug.test b/mysql-test/t/myisam_debug.test new file mode 100644 index 00000000000..a73187cd2ca --- /dev/null +++ b/mysql-test/t/myisam_debug.test @@ -0,0 +1,54 @@ +--source include/have_debug.inc + +--echo # +--echo # BUG#40827 - Killing insert-select to MyISAM can cause table corruption +--echo # + +CONNECT (insertConn, localhost, root,,); + +CREATE TABLE `t1` ( +`id` BIGINT(20) , +`id1` BIGINT(20) AUTO_INCREMENT, + KEY(id1), KEY(id) +) ENGINE=MyISAM; + +CREATE TABLE `t2` ( +`id` BIGINT(20) , +`id1` BIGINT(20) AUTO_INCREMENT, + KEY (id1), KEY(id) +) ENGINE=MyISAM; + +INSERT INTO t2 (id) VALUES (123); + +let $i = 10; +while ($i) +{ + INSERT INTO t2 (id) SELECT id FROM t2; + dec $i; +} + +--echo # Switch to insert Connection +CONNECTION insertConn; +SET SESSION debug='+d,wait_in_enable_indexes'; +--echo # Send insert data +SEND INSERT INTO t1(id) SELECT id FROM t2; + +--echo # Switch to default Connection +CONNECTION default; +--echo # Wait for insert data to reach the debug point + +let $wait_condition= + SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST + WHERE STATE = "wait_in_enable_indexes" AND + INFO = "INSERT INTO t1(id) SELECT id FROM t2"; +--source include/wait_condition.inc + +SELECT ID FROM INFORMATION_SCHEMA.PROCESSLIST +WHERE STATE = 'wait_in_enable_indexes' AND +INFO = "INSERT INTO t1(id) SELECT id FROM t2" +INTO @thread_id; + +KILL QUERY @thread_id; +CHECK TABLE t1; +DROP TABLE t1,t2; +DISCONNECT insertConn;