mariadb/mysql-test/r/myisam_crash_before_flush_keys.result

31 lines
1.2 KiB
Text
Raw Normal View History

2009-04-06 09:01:17 +02:00
#
# 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
Backport from 6.0-codebase. WL#3951 - MyISAM: Additional Error Logs for Data Corruption When table corruption is detected, in addition to current error message provide following information: - list of threads (and queries) accessing a table; - thread_id of a thread that detected corruption; - source file name and line number where this corruption was detected; - optional extra information (string). mysql-test/r/myisam_crash_before_flush_keys.result: Adjusted a test case according to WL#3951. mysql-test/t/myisam_crash_before_flush_keys.test: Adjusted a test case according to WL#3951. storage/myisam/CMakeLists.txt: Added mi_extrafunc.h to myisam sources list. storage/myisam/Makefile.am: Added mi_extrafunc.h to myisam headers list. storage/myisam/ha_myisam.cc: Added _mi_report_crashed() function (reports additional information whenever table corruption is detected). storage/myisam/mi_extrafunc.h: All standalone programs must define their version of _mi_report_crashed() by including mi_extrafunc.h. storage/myisam/mi_locking.c: For every call to mi_lock_database(F_[RD|WR|EXTRA_]LCK) - add current thread to the list of threads accessing this table. For every call to mi_lock_database(F_UNLCK) - remove current thread from the list of threads accessing this table. storage/myisam/mi_test1.c: All standalone programs must define their version of _mi_report_crashed() by including mi_extrafunc.h. storage/myisam/mi_test2.c: All standalone programs must define their version of _mi_report_crashed() by including mi_extrafunc.h. storage/myisam/mi_test3.c: All standalone programs must define their version of _mi_report_crashed() by including mi_extrafunc.h. storage/myisam/myisam_ftdump.c: All standalone programs must define their version of _mi_report_crashed() by including mi_extrafunc.h. storage/myisam/myisamchk.c: All standalone programs must define their version of _mi_report_crashed() by including mi_extrafunc.h. storage/myisam/myisamdef.h: Extra elements are added to MI_INFO and MYISAM_SHARE structures. MI_INFO is extended with LIST element, that holds a pointer to THD object accessing a table. MYISAM_SHARE is extended with LIST (list of threads accessing a table). Whenever table is marked as crashed, call mi_report_crashed() macro to provide useful information. storage/myisam/myisamlog.c: All standalone programs must define their version of _mi_report_crashed() by including mi_extrafunc.h. storage/myisam/myisampack.c: All standalone programs must define their version of _mi_report_crashed() by including mi_extrafunc.h. storage/myisam/rt_test.c: All standalone programs must define their version of _mi_report_crashed() by including mi_extrafunc.h. storage/myisam/sp_test.c: All standalone programs must define their version of _mi_report_crashed() by including mi_extrafunc.h. storage/myisammrg/ha_myisammrg.cc: For each unedrlying table initialize `in_use' variable.
2009-11-25 13:25:01 +01:00
call mtr.add_suppression("Got an error from thread_id=.*ha_myisam.cc:");
call mtr.add_suppression("MySQL thread id .*, query id .* localhost.*root Checking table");
2011-12-30 11:22:27 +01:00
flush tables;
2009-04-06 09:01:17 +02:00
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_dbug="d,crash_before_flush_keys";
2009-04-06 09:01:17 +02:00
# 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
# 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
CHECK TABLE t1;
Table Op Msg_type Msg_text
test.t1 check warning 1 client is using or hasn't closed the table properly
test.t1 check error Size of indexfile is: 1024 Should be: 3072
test.t1 check error Corrupt
2009-04-06 09:01:17 +02:00
DROP TABLE t1;