4 changed files with 99 additions and 3 deletions
-
45mysql-test/r/myisam_crash_before_flush_keys.result
-
1mysql-test/t/myisam_crash_before_flush_keys-master.opt
-
49mysql-test/t/myisam_crash_before_flush_keys.test
-
7storage/myisam/mi_close.c
@ -0,0 +1,45 @@ |
|||
# |
|||
# BUG#41330 - Myisam table open count set to zero before index blocks are written. |
|||
# |
|||
# Don't test this under valgrind, memory leaks will occur |
|||
# Binary must be compiled with debug for crash to occur |
|||
SET GLOBAL delay_key_write=ALL; |
|||
CREATE TABLE t1(a INT, |
|||
b INT, |
|||
PRIMARY KEY(a , b), |
|||
KEY(b)) ENGINE=MyISAM DELAY_KEY_WRITE = 1; |
|||
INSERT INTO t1 VALUES (1,2),(2,3),(3,4),(4,5),(5,6); |
|||
# Setup the mysqld to crash at certain point |
|||
SET SESSION debug="d,crash_before_flush_keys"; |
|||
# Write file to make mysql-test-run.pl expect crash |
|||
# Run the crashing query |
|||
FLUSH TABLE t1; |
|||
ERROR HY000: Lost connection to MySQL server during query |
|||
# Run MYISAMCHK tool to check the table t1 and repair |
|||
myisamchk: MyISAM file MYSQLD_DATADIR/test/t1 |
|||
myisamchk: warning: 1 client is using or hasn't closed the table properly |
|||
myisamchk: error: Size of indexfile is: 1024 Should be: 3072 |
|||
MYISAMCHK: Unknown error 126 |
|||
myisamchk: error: Can't read indexpage from filepos: 1024 |
|||
MyISAM-table 'MYSQLD_DATADIR/test/t1' is corrupted |
|||
Fix it using switch "-r" or "-o" |
|||
# Write file to make mysql-test-run.pl start the server |
|||
# Turn on reconnect |
|||
# Call script that will poll the server waiting for |
|||
# it to be back online again |
|||
SHOW CREATE TABLE t1; |
|||
Table Create Table |
|||
t1 CREATE TABLE `t1` ( |
|||
`a` int(11) NOT NULL DEFAULT '0', |
|||
`b` int(11) NOT NULL DEFAULT '0', |
|||
PRIMARY KEY (`a`,`b`), |
|||
KEY `b` (`b`) |
|||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 DELAY_KEY_WRITE=1 |
|||
SELECT * FROM t1 FORCE INDEX (PRIMARY); |
|||
a b |
|||
1 2 |
|||
2 3 |
|||
3 4 |
|||
4 5 |
|||
5 6 |
|||
DROP TABLE t1; |
|||
@ -0,0 +1 @@ |
|||
--skip-stack-trace --skip-core-file |
|||
@ -0,0 +1,49 @@ |
|||
--echo # |
|||
--echo # BUG#41330 - Myisam table open count set to zero before index blocks are written. |
|||
--echo # |
|||
--source include/not_embedded.inc |
|||
--echo # Don't test this under valgrind, memory leaks will occur |
|||
--source include/not_valgrind.inc |
|||
|
|||
--echo # Binary must be compiled with debug for crash to occur |
|||
--source include/have_debug.inc |
|||
|
|||
let $MYSQLD_DATADIR= `select @@datadir`; |
|||
SET GLOBAL delay_key_write=ALL; |
|||
CREATE TABLE t1(a INT, |
|||
b INT, |
|||
PRIMARY KEY(a , b), |
|||
KEY(b)) ENGINE=MyISAM DELAY_KEY_WRITE = 1; |
|||
INSERT INTO t1 VALUES (1,2),(2,3),(3,4),(4,5),(5,6); |
|||
|
|||
--echo # Setup the mysqld to crash at certain point |
|||
SET SESSION debug="d,crash_before_flush_keys"; |
|||
|
|||
--echo # Write file to make mysql-test-run.pl expect crash |
|||
--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect |
|||
|
|||
--echo # Run the crashing query |
|||
--error 2013 |
|||
FLUSH TABLE t1; |
|||
|
|||
--echo # Run MYISAMCHK tool to check the table t1 and repair |
|||
--replace_result $MYISAMCHK MYISAMCHK $MYSQLD_DATADIR MYSQLD_DATADIR |
|||
--error 255 |
|||
--exec $MYISAMCHK -cs $MYSQLD_DATADIR/test/t1 2>&1 |
|||
--exec $MYISAMCHK -rs $MYSQLD_DATADIR/test/t1 |
|||
|
|||
--echo # Write file to make mysql-test-run.pl start the server |
|||
--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect |
|||
|
|||
--echo # Turn on reconnect |
|||
--enable_reconnect |
|||
|
|||
--echo # Call script that will poll the server waiting for |
|||
--echo # it to be back online again |
|||
--source include/wait_until_connected_again.inc |
|||
|
|||
SHOW CREATE TABLE t1; |
|||
|
|||
SELECT * FROM t1 FORCE INDEX (PRIMARY); |
|||
|
|||
DROP TABLE t1; |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue