From 68325b6a12dbe8fc2e95ba69b4537e1d4d52e204 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Wed, 28 Aug 2013 22:16:03 +0200 Subject: [PATCH] Test case for MyISAM and OPTIMIZE TABLE that requires MDL_SHARED_NO_READ_WRITE. --- mysql-test/r/myisam_optimize.result | 23 ++++++++++++++ mysql-test/t/myisam_optimize.test | 47 +++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 mysql-test/r/myisam_optimize.result create mode 100644 mysql-test/t/myisam_optimize.test diff --git a/mysql-test/r/myisam_optimize.result b/mysql-test/r/myisam_optimize.result new file mode 100644 index 00000000000..185d49e6391 --- /dev/null +++ b/mysql-test/r/myisam_optimize.result @@ -0,0 +1,23 @@ +call mtr.add_suppression(" marked as crashed and should be repaired"); +create table t1 (a int auto_increment primary key, b text); +insert t1 (b) select repeat("A", 100); +insert t1 (b) select repeat("B", 200) from t1; +insert t1 (b) select repeat("C", 300) from t1; +delete from t1 where a < 3; +explain select a, left(b,10) from t1 order by a; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 ALL NULL NULL NULL NULL 2 Using filesort +select left(b,10), a from t1 order by a; +left(b,10) a +CCCCCCCCCC 3 +CCCCCCCCCC 4 +set debug_sync='myisam_after_repair_by_sort wait_for go'; +optimize table t1; +select a, left(b,10) from t1 order by a; +set debug_sync='now signal go'; +Table Op Msg_type Msg_text +test.t1 optimize status OK +a left(b,10) +3 CCCCCCCCCC +4 CCCCCCCCCC +drop table t1; diff --git a/mysql-test/t/myisam_optimize.test b/mysql-test/t/myisam_optimize.test new file mode 100644 index 00000000000..da47a7a4127 --- /dev/null +++ b/mysql-test/t/myisam_optimize.test @@ -0,0 +1,47 @@ +# +# test OPTIMIZE and a concurrent SELECT of a MyISAM table +# +source include/have_debug_sync.inc; + +call mtr.add_suppression(" marked as crashed and should be repaired"); + +create table t1 (a int auto_increment primary key, b text); +insert t1 (b) select repeat("A", 100); +insert t1 (b) select repeat("B", 200) from t1; +insert t1 (b) select repeat("C", 300) from t1; + +delete from t1 where a < 3; +explain select a, left(b,10) from t1 order by a; +select left(b,10), a from t1 order by a; + +set debug_sync='myisam_after_repair_by_sort wait_for go'; +send optimize table t1; + +connect (con1,localhost,root,,); +let $wait_condition= + select count(*) = 1 from information_schema.processlist + where state like "%myisam_after_repair_by_sort%"; +--source include/wait_condition.inc + +send select a, left(b,10) from t1 order by a; + +connect (con2,localhost,root,,); +let $wait_condition= + select count(*) = 1 from information_schema.processlist + where state = "Waiting for table metadata lock"; +--source include/wait_condition.inc + +set debug_sync='now signal go'; + +connection default; +reap; + +connection con1; +reap; + +disconnect con1; +disconnect con2; +connection default; + +drop table t1; +