Commit 2492d007 authored by Sergei Golubchik's avatar Sergei Golubchik

fix innodb_mysql_sync test - update from 5.6

parent cf039ec1
...@@ -101,7 +101,7 @@ DROP TABLE IF EXISTS t1; ...@@ -101,7 +101,7 @@ DROP TABLE IF EXISTS t1;
CREATE DATABASE db1; CREATE DATABASE db1;
CREATE TABLE db1.t1(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, value INT) engine=innodb; CREATE TABLE db1.t1(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, value INT) engine=innodb;
INSERT INTO db1.t1(value) VALUES (1), (2); INSERT INTO db1.t1(value) VALUES (1), (2);
SET DEBUG_SYNC= "alter_table_manage_keys SIGNAL manage WAIT_FOR query"; SET DEBUG_SYNC= "alter_table_inplace_after_lock_downgrade SIGNAL manage WAIT_FOR query";
# Sending: # Sending:
ALTER TABLE db1.t1 ADD INDEX(value); ALTER TABLE db1.t1 ADD INDEX(value);
# Connection con1 # Connection con1
...@@ -115,45 +115,47 @@ SET DEBUG_SYNC= "now SIGNAL query"; ...@@ -115,45 +115,47 @@ SET DEBUG_SYNC= "now SIGNAL query";
# Connection default # Connection default
# Reaping: ALTER TABLE db1.t1 ADD INDEX(value) # Reaping: ALTER TABLE db1.t1 ADD INDEX(value)
DROP DATABASE db1; DROP DATABASE db1;
# Test 2: Primary index (implicit), should block reads. # Test 2: Primary index (implicit), should block writes.
CREATE TABLE t1(a INT NOT NULL, b INT NOT NULL) engine=innodb; CREATE TABLE t1(a INT NOT NULL, b INT NOT NULL) engine=innodb;
SET DEBUG_SYNC= "alter_table_manage_keys SIGNAL manage WAIT_FOR query"; SET DEBUG_SYNC= "alter_table_inplace_after_lock_downgrade SIGNAL manage WAIT_FOR query";
# Sending: # Sending:
ALTER TABLE t1 ADD UNIQUE INDEX(a); ALTER TABLE t1 ADD UNIQUE INDEX(a), LOCK=SHARED;
# Connection con1 # Connection con1
SET DEBUG_SYNC= "now WAIT_FOR manage"; SET DEBUG_SYNC= "now WAIT_FOR manage";
USE test; USE test;
# Sending:
SELECT * FROM t1; SELECT * FROM t1;
a b
# Sending:
UPDATE t1 SET a=NULL;
# Connection con2 # Connection con2
# Waiting for SELECT to be blocked by the metadata lock on t1 # Waiting for SELECT to be blocked by the metadata lock on t1
SET DEBUG_SYNC= "now SIGNAL query"; SET DEBUG_SYNC= "now SIGNAL query";
# Connection default # Connection default
# Reaping: ALTER TABLE t1 ADD UNIQUE INDEX(a) # Reaping: ALTER TABLE t1 ADD UNIQUE INDEX(a)
# Connection con1 # Connection con1
# Reaping: SELECT * FROM t1 # Reaping: UPDATE t1 SET a=NULL
a b # Test 3: Primary index (explicit), should block writes.
# Test 3: Primary index (explicit), should block reads.
# Connection default # Connection default
ALTER TABLE t1 DROP INDEX a; ALTER TABLE t1 DROP INDEX a;
SET DEBUG_SYNC= "alter_table_manage_keys SIGNAL manage WAIT_FOR query"; SET DEBUG_SYNC= "alter_table_inplace_after_lock_downgrade SIGNAL manage WAIT_FOR query";
# Sending: # Sending:
ALTER TABLE t1 ADD PRIMARY KEY (a); ALTER TABLE t1 ADD PRIMARY KEY (a), LOCK=SHARED;
# Connection con1 # Connection con1
SET DEBUG_SYNC= "now WAIT_FOR manage"; SET DEBUG_SYNC= "now WAIT_FOR manage";
# Sending:
SELECT * FROM t1; SELECT * FROM t1;
a b
# Sending:
UPDATE t1 SET a=NULL;
# Connection con2 # Connection con2
# Waiting for SELECT to be blocked by the metadata lock on t1 # Waiting for SELECT to be blocked by the metadata lock on t1
SET DEBUG_SYNC= "now SIGNAL query"; SET DEBUG_SYNC= "now SIGNAL query";
# Connection default # Connection default
# Reaping: ALTER TABLE t1 ADD PRIMARY KEY (a) # Reaping: ALTER TABLE t1 ADD PRIMARY KEY (a)
# Connection con1 # Connection con1
# Reaping: SELECT * FROM t1 # Reaping: UPDATE t1 SET a=NULL
a b
# Test 4: Secondary unique index, should not block reads. # Test 4: Secondary unique index, should not block reads.
# Connection default # Connection default
SET DEBUG_SYNC= "alter_table_manage_keys SIGNAL manage WAIT_FOR query"; SET DEBUG_SYNC= "alter_table_inplace_after_lock_downgrade SIGNAL manage WAIT_FOR query";
# Sending: # Sending:
ALTER TABLE t1 ADD UNIQUE (b); ALTER TABLE t1 ADD UNIQUE (b);
# Connection con1 # Connection con1
...@@ -186,3 +188,170 @@ a b ...@@ -186,3 +188,170 @@ a b
1 12345 1 12345
2 23456 2 23456
DROP TABLE t1; DROP TABLE t1;
#
# Bug#13417754 ASSERT IN ROW_DROP_DATABASE_FOR_MYSQL DURING DROP SCHEMA
#
DROP TABLE IF EXISTS t1;
DROP DATABASE IF EXISTS db1;
CREATE TABLE t1(a int) engine=InnoDB;
CREATE DATABASE db1;
# Connection con1
SET DEBUG_SYNC= 'after_innobase_rename_table SIGNAL locked WAIT_FOR continue';
# Sending:
ALTER TABLE t1 RENAME db1.t1;
# Connection con2
SET DEBUG_SYNC= 'now WAIT_FOR locked';
# DROP DATABASE db1 should now be blocked by ALTER TABLE
# Sending:
DROP DATABASE db1;
# Connection default
# Check that DROP DATABASE is blocked by IX lock on db1
# Resume ALTER TABLE
SET DEBUG_SYNC= 'now SIGNAL continue';
# Connection con1
# Reaping: ALTER TABLE t1 RENAME db1.t1;
# Connection con2
# Reaping: DROP DATABASE db1
# Connection default;
SET DEBUG_SYNC= 'RESET';
#
# WL#5534 Online ALTER, Phase 1
#
# Multi thread tests.
# See alter_table.test for single thread tests.
DROP TABLE IF EXISTS t1;
CREATE TABLE t1(a INT PRIMARY KEY, b INT) engine=InnoDB;
INSERT INTO t1 VALUES (1,1), (2,2);
SET DEBUG_SYNC= 'RESET';
SET SESSION lock_wait_timeout= 1;
#
# 1: In-place + writes blocked.
#
# Connection default
SET DEBUG_SYNC= 'alter_opened_table SIGNAL opened WAIT_FOR continue1';
SET DEBUG_SYNC= 'alter_table_inplace_after_lock_upgrade SIGNAL upgraded WAIT_FOR continue2';
SET DEBUG_SYNC= 'alter_table_inplace_before_commit SIGNAL beforecommit WAIT_FOR continue3';
SET DEBUG_SYNC= 'alter_table_before_main_binlog SIGNAL binlog WAIT_FOR continue4';
# Sending:
ALTER TABLE t1 ADD INDEX i1(b), ALGORITHM= INPLACE, LOCK= SHARED;
# Connection con1;
SET DEBUG_SYNC= 'now WAIT_FOR opened';
# At this point, neither reads nor writes should be blocked.
SELECT * FROM t1;
a b
1 1
2 2
INSERT INTO t1 VALUES (3,3);
SET DEBUG_SYNC= 'now SIGNAL continue1';
SET DEBUG_SYNC= 'now WAIT_FOR upgraded';
# Now both reads and writes should be blocked
SELECT * FROM t1;
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
INSERT INTO t1 VALUES (4,4);
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
SET DEBUG_SYNC= 'now SIGNAL continue2';
SET DEBUG_SYNC= 'now WAIT_FOR beforecommit';
# Still both reads and writes should be blocked.
SELECT * FROM t1;
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
INSERT INTO t1 VALUES (5,5);
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
SET DEBUG_SYNC= 'now SIGNAL continue3';
SET DEBUG_SYNC= 'now WAIT_FOR binlog';
# Same here.
SELECT * FROM t1;
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
INSERT INTO t1 VALUES (6,6);
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
SET DEBUG_SYNC= 'now SIGNAL continue4';
# Connection default
# Reaping ALTER TABLE ...
SET DEBUG_SYNC= 'RESET';
DELETE FROM t1 WHERE a= 3;
#
# 2: Copy + writes blocked.
#
SET DEBUG_SYNC= 'alter_opened_table SIGNAL opened WAIT_FOR continue1';
SET DEBUG_SYNC= 'alter_table_copy_after_lock_upgrade SIGNAL upgraded WAIT_FOR continue2';
SET DEBUG_SYNC= 'alter_table_before_main_binlog SIGNAL binlog WAIT_FOR continue3';
# Sending:
ALTER TABLE t1 ADD INDEX i2(b), ALGORITHM= COPY, LOCK= SHARED;
# Connection con1;
SET DEBUG_SYNC= 'now WAIT_FOR opened';
# At this point, neither reads nor writes should be blocked.
SELECT * FROM t1;
a b
1 1
2 2
INSERT INTO t1 VALUES (3,3);
SET DEBUG_SYNC= 'now SIGNAL continue1';
SET DEBUG_SYNC= 'now WAIT_FOR upgraded';
# Now writes should be blocked, reads still allowed.
SELECT * FROM t1;
a b
1 1
2 2
3 3
INSERT INTO t1 VALUES (4,4);
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
SET DEBUG_SYNC= 'now SIGNAL continue2';
SET DEBUG_SYNC= 'now WAIT_FOR binlog';
# Now both reads and writes should be blocked.
SELECT * FROM t1 limit 1;
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
INSERT INTO t1 VALUES (5,5);
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
SET DEBUG_SYNC= 'now SIGNAL continue3';
# Connection default
# Reaping ALTER TABLE ...
SET DEBUG_SYNC= 'RESET';
DELETE FROM t1 WHERE a= 3;
#
# 3: In-place + writes allowed.
#
# TODO: Enable this test once WL#5526 is pushed
#
# 4: In-place + reads and writes blocked.
#
# Connection default
SET DEBUG_SYNC= 'alter_opened_table SIGNAL opened WAIT_FOR continue1';
SET DEBUG_SYNC= 'alter_table_inplace_after_lock_upgrade SIGNAL upgraded WAIT_FOR continue2';
SET DEBUG_SYNC= 'alter_table_inplace_before_commit SIGNAL beforecommit WAIT_FOR continue3';
SET DEBUG_SYNC= 'alter_table_before_main_binlog SIGNAL binlog WAIT_FOR continue4';
# Sending:
ALTER TABLE t1 ADD INDEX i4(b), ALGORITHM= INPLACE, LOCK= EXCLUSIVE;
# Connection con1;
SET DEBUG_SYNC= 'now WAIT_FOR opened';
# At this point, neither reads nor writes should be blocked.
SELECT * FROM t1;
a b
1 1
2 2
INSERT INTO t1 VALUES (3,3);
SET DEBUG_SYNC= 'now SIGNAL continue1';
SET DEBUG_SYNC= 'now WAIT_FOR upgraded';
# Now both reads and writes should be blocked.
SELECT * FROM t1;
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
INSERT INTO t1 VALUES (4,4);
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
SET DEBUG_SYNC= 'now SIGNAL continue2';
SET DEBUG_SYNC= 'now WAIT_FOR beforecommit';
# Same here.
SELECT * FROM t1;
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
INSERT INTO t1 VALUES (5,5);
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
SET DEBUG_SYNC= 'now SIGNAL continue3';
SET DEBUG_SYNC= 'now WAIT_FOR binlog';
# Same here.
SELECT * FROM t1;
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
INSERT INTO t1 VALUES (6,6);
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
SET DEBUG_SYNC= 'now SIGNAL continue4';
# Connection default
# Reaping ALTER TABLE ...
SET DEBUG_SYNC= 'RESET';
DROP TABLE t1;
SET DEBUG_SYNC= 'RESET';
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment