summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/r/alter_table-big.result44
-rw-r--r--mysql-test/t/alter_table-big.test106
-rw-r--r--mysql-test/t/disabled.def1
3 files changed, 112 insertions, 39 deletions
diff --git a/mysql-test/r/alter_table-big.result b/mysql-test/r/alter_table-big.result
index d6b936bd5d7..33af60938a1 100644
--- a/mysql-test/r/alter_table-big.result
+++ b/mysql-test/r/alter_table-big.result
@@ -1,57 +1,77 @@
drop table if exists t1, t2;
+set debug_sync='RESET';
create table t1 (n1 int, n2 int, n3 int,
key (n1, n2, n3),
key (n2, n3, n1),
key (n3, n1, n2));
create table t2 (i int);
alter table t1 disable keys;
-insert into t1 values (RAND()*1000, RAND()*1000, RAND()*1000);
+insert into t1 values (1, 2, 3);
reset master;
-set session debug="+d,sleep_alter_enable_indexes";
+set debug_sync='alter_table_enable_indexes SIGNAL parked WAIT_FOR go';
alter table t1 enable keys;;
+set debug_sync='now WAIT_FOR parked';
insert into t2 values (1);
-insert into t1 values (1, 1, 1);
-set session debug="-d,sleep_alter_enable_indexes";
+insert into t1 values (1, 1, 1);;
+set debug_sync='now SIGNAL go';
show binlog events from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # BEGIN
master-bin.000001 # Query # # use `test`; insert into t2 values (1)
+master-bin.000001 # Query # # COMMIT
master-bin.000001 # Query # # use `test`; alter table t1 enable keys
+master-bin.000001 # Query # # BEGIN
master-bin.000001 # Query # # use `test`; insert into t1 values (1, 1, 1)
+master-bin.000001 # Query # # COMMIT
drop tables t1, t2;
+set debug_sync='RESET';
End of 5.0 tests
drop table if exists t1, t2, t3;
create table t1 (i int);
reset master;
-set session debug="+d,sleep_alter_before_main_binlog";
+set debug_sync='alter_table_before_main_binlog SIGNAL parked WAIT_FOR go';
alter table t1 change i c char(10) default 'Test1';;
-insert into t1 values ();
+set debug_sync='now WAIT_FOR parked';
+insert into t1 values ();;
+set debug_sync='now SIGNAL go';
select * from t1;
c
Test1
+set debug_sync='alter_table_before_main_binlog SIGNAL parked WAIT_FOR go';
alter table t1 change c vc varchar(100) default 'Test2';;
-rename table t1 to t2;
+set debug_sync='now WAIT_FOR parked';
+rename table t1 to t2;;
+set debug_sync='now SIGNAL go';
drop table t2;
create table t1 (i int);
+set debug_sync='alter_table_before_main_binlog SIGNAL parked WAIT_FOR go';
alter table t1 change i c char(10) default 'Test3', rename to t2;;
-insert into t2 values ();
+set debug_sync='now WAIT_FOR parked';
+insert into t2 values();;
+set debug_sync='now SIGNAL go';
select * from t2;
c
Test3
alter table t2 change c vc varchar(100) default 'Test2', rename to t1;;
rename table t1 to t3;
drop table t3;
-set session debug="-d,sleep_alter_before_main_binlog";
+set debug_sync='alter_table_before_main_binlog SIGNAL parked WAIT_FOR go';
+set debug_sync='RESET';
show binlog events from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Query # # use `test`; alter table t1 change i c char(10) default 'Test1'
+master-bin.000001 # Query # # BEGIN
master-bin.000001 # Query # # use `test`; insert into t1 values ()
+master-bin.000001 # Query # # COMMIT
master-bin.000001 # Query # # use `test`; alter table t1 change c vc varchar(100) default 'Test2'
master-bin.000001 # Query # # use `test`; rename table t1 to t2
-master-bin.000001 # Query # # use `test`; drop table t2
+master-bin.000001 # Query # # use `test`; DROP TABLE `t2` /* generated by server */
master-bin.000001 # Query # # use `test`; create table t1 (i int)
master-bin.000001 # Query # # use `test`; alter table t1 change i c char(10) default 'Test3', rename to t2
-master-bin.000001 # Query # # use `test`; insert into t2 values ()
+master-bin.000001 # Query # # BEGIN
+master-bin.000001 # Query # # use `test`; insert into t2 values()
+master-bin.000001 # Query # # COMMIT
master-bin.000001 # Query # # use `test`; alter table t2 change c vc varchar(100) default 'Test2', rename to t1
master-bin.000001 # Query # # use `test`; rename table t1 to t3
-master-bin.000001 # Query # # use `test`; drop table t3
+master-bin.000001 # Query # # use `test`; DROP TABLE `t3` /* generated by server */
End of 5.1 tests
diff --git a/mysql-test/t/alter_table-big.test b/mysql-test/t/alter_table-big.test
index e007a3a55e0..b010815955f 100644
--- a/mysql-test/t/alter_table-big.test
+++ b/mysql-test/t/alter_table-big.test
@@ -18,7 +18,10 @@
--disable_warnings
drop table if exists t1, t2;
--enable_warnings
+set debug_sync='RESET';
+
connect (addconroot, localhost, root,,);
+connect (addconroot2, localhost, root,,);
connection default;
create table t1 (n1 int, n2 int, n3 int,
key (n1, n2, n3),
@@ -26,38 +29,45 @@ create table t1 (n1 int, n2 int, n3 int,
key (n3, n1, n2));
create table t2 (i int);
-# Starting from 5.1 we have runtime settable @@debug variable,
-# which can be used for introducing delays at certain points of
-# statement execution, so we don't need many rows in 't1' to make
-# this test repeatable.
alter table t1 disable keys;
---disable_warnings
-insert into t1 values (RAND()*1000, RAND()*1000, RAND()*1000);
---enable_warnings
+insert into t1 values (1, 2, 3);
# Later we use binlog to check the order in which statements are
# executed so let us reset it first.
reset master;
-set session debug="+d,sleep_alter_enable_indexes";
+set debug_sync='alter_table_enable_indexes SIGNAL parked WAIT_FOR go';
--send alter table t1 enable keys;
connection addconroot;
---sleep 2
+# Wait until ALTER TABLE acquires metadata lock.
+set debug_sync='now WAIT_FOR parked';
# This statement should not be blocked by in-flight ALTER and therefore
# should be executed and written to binlog before ALTER TABLE ... ENABLE KEYS
# finishes.
insert into t2 values (1);
# And this should wait until the end of ALTER TABLE ... ENABLE KEYS.
-insert into t1 values (1, 1, 1);
+--send insert into t1 values (1, 1, 1);
+connection addconroot2;
+# Wait until the above INSERT INTO t1 is blocked due to ALTER
+let $wait_condition=
+ select count(*) = 1 from information_schema.processlist
+ where state = "Waiting for table metadata lock" and
+ info = "insert into t1 values (1, 1, 1)";
+--source include/wait_condition.inc
+# Resume ALTER execution.
+set debug_sync='now SIGNAL go';
connection default;
--reap
-set session debug="-d,sleep_alter_enable_indexes";
+connection addconroot;
+--reap
+connection default;
# Check that statements were executed/binlogged in correct order.
source include/show_binlog_events.inc;
# Clean up
drop tables t1, t2;
disconnect addconroot;
-
+disconnect addconroot2;
+set debug_sync='RESET';
--echo End of 5.0 tests
@@ -72,48 +82,92 @@ disconnect addconroot;
--disable_warnings
drop table if exists t1, t2, t3;
--enable_warnings
+connect (addconroot, localhost, root,,);
+connect (addconroot2, localhost, root,,);
+connection default;
create table t1 (i int);
# We are going to check that statements are logged in correct order
reset master;
-set session debug="+d,sleep_alter_before_main_binlog";
+set debug_sync='alter_table_before_main_binlog SIGNAL parked WAIT_FOR go';
--send alter table t1 change i c char(10) default 'Test1';
-connect (addconroot, localhost, root,,);
connection addconroot;
---sleep 2
-insert into t1 values ();
-select * from t1;
+# Wait until ALTER TABLE acquires metadata lock.
+set debug_sync='now WAIT_FOR parked';
+--send insert into t1 values ();
+connection addconroot2;
+# Wait until the above INSERT INTO t1 is blocked due to ALTER
+let $wait_condition=
+ select count(*) = 1 from information_schema.processlist
+ where state = "Waiting for table metadata lock" and
+ info = "insert into t1 values ()";
+--source include/wait_condition.inc
+# Resume ALTER execution.
+set debug_sync='now SIGNAL go';
connection default;
--reap
+connection addconroot;
+--reap
+connection default;
+select * from t1;
+set debug_sync='alter_table_before_main_binlog SIGNAL parked WAIT_FOR go';
--send alter table t1 change c vc varchar(100) default 'Test2';
connection addconroot;
---sleep 2
-rename table t1 to t2;
+# Wait until ALTER TABLE acquires metadata lock.
+set debug_sync='now WAIT_FOR parked';
+--send rename table t1 to t2;
+connection addconroot2;
+# Wait until the above RENAME TABLE is blocked due to ALTER
+let $wait_condition=
+ select count(*) = 1 from information_schema.processlist
+ where state = "Waiting for table metadata lock" and
+ info = "rename table t1 to t2";
+--source include/wait_condition.inc
+# Resume ALTER execution.
+set debug_sync='now SIGNAL go';
connection default;
--reap
+connection addconroot;
+--reap
+connection default;
drop table t2;
# And now tests for ALTER TABLE with RENAME clause. In this
# case target table name should be properly locked as well.
create table t1 (i int);
+set debug_sync='alter_table_before_main_binlog SIGNAL parked WAIT_FOR go';
--send alter table t1 change i c char(10) default 'Test3', rename to t2;
connection addconroot;
---sleep 2
-insert into t2 values ();
-select * from t2;
+# Wait until ALTER TABLE acquires metadata lock.
+set debug_sync='now WAIT_FOR parked';
+--send insert into t2 values();
+connection addconroot2;
+# Wait until the above INSERT INTO t2 is blocked due to ALTER
+let $wait_condition=
+ select count(*) = 1 from information_schema.processlist
+ where state = "Waiting for table metadata lock" and
+ info = "insert into t2 values()";
+--source include/wait_condition.inc
+# Resume ALTER execution.
+set debug_sync='now SIGNAL go';
connection default;
--reap
+connection addconroot;
+--reap
+connection default;
+select * from t2;
--send alter table t2 change c vc varchar(100) default 'Test2', rename to t1;
connection addconroot;
---sleep 2
-rename table t1 to t3;
connection default;
--reap
+rename table t1 to t3;
+
disconnect addconroot;
+disconnect addconroot2;
drop table t3;
-set session debug="-d,sleep_alter_before_main_binlog";
+set debug_sync='alter_table_before_main_binlog SIGNAL parked WAIT_FOR go';
+set debug_sync='RESET';
# Check that all statements were logged in correct order
source include/show_binlog_events.inc;
--echo End of 5.1 tests
-
diff --git a/mysql-test/t/disabled.def b/mysql-test/t/disabled.def
index 08db85a3f45..cb1de2cb0ff 100644
--- a/mysql-test/t/disabled.def
+++ b/mysql-test/t/disabled.def
@@ -12,7 +12,6 @@
lowercase_table3 : Bug#11762269 2010-06-30 alik main.lowercase_table3 on Mac OSX
read_many_rows_innodb : Bug#11748886 2010-11-15 mattiasj report already exists
sum_distinct-big : Bug#11764126 2010-11-15 mattiasj was not tested
-alter_table-big : Bug#11748731 2010-11-15 mattiasj was not tested
create-big : Bug#11748731 2010-11-15 mattiasj was not tested
archive-big : Bug#11817185 2011-03-10 Anitha Disabled since this leads to timeout on Solaris Sparc
log_tables-big : Bug#11756699 2010-11-15 mattiasj report already exists