1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-30 16:24:05 +03:00

MDEV-10548: Some of the debug sync waits do not work with InnoDB 5.7 (branch bb-10.2-jan)

Fixed auto_increment_dup test. Current behavior is correct for repeatable read (and
serializable) isolation levels. Old behavior is correct for read committed
isolation level.
This commit is contained in:
Jan Lindström
2016-09-14 11:28:40 +03:00
parent da168b3405
commit a729656006
6 changed files with 280 additions and 4 deletions

View File

@ -10,6 +10,123 @@
drop table if exists t1;
--enable_warnings
set global transaction isolation level repeatable read;
CREATE TABLE t1(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
k INT,
c CHAR(1),
UNIQUE KEY(k)) ENGINE=InnoDB;
SHOW CREATE TABLE t1;
--enable_info
--echo #
--echo # Sequential execution
--echo #
INSERT INTO t1(k) VALUES (1), (2), (3) ON DUPLICATE KEY UPDATE c='1';
--echo #
--echo # 1 duplicate
--echo #
INSERT INTO t1(k) VALUES (2), (4), (5) ON DUPLICATE KEY UPDATE c='2';
--echo #
--echo # 5 rows, consecutive auto_inc values
--echo #
SELECT * FROM t1 order by k;
DROP TABLE t1;
CREATE TABLE t1(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
k INT,
c CHAR(1),
UNIQUE KEY(k)) ENGINE=InnoDB;
--echo #
--echo # Sequential execution 2
--echo #
INSERT INTO t1(k) VALUES (2), (4), (5) ON DUPLICATE KEY UPDATE c='2';
--echo #
--echo # 1 duplicate
--echo #
INSERT INTO t1(k) VALUES (1), (2), (3) ON DUPLICATE KEY UPDATE c='1';
--echo #
--echo # 5 rows, consecutive auto_inc values
--echo #
SELECT * FROM t1 order by k;
DROP TABLE t1;
CREATE TABLE t1(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
k INT,
c CHAR(1),
UNIQUE KEY(k)) ENGINE=InnoDB;
--echo #
--echo # Parallel execution
--echo #
--connect(con1, localhost, root)
--connect(con2, localhost, root)
--connection con1
--echo #
--echo # Connection 1
--echo #
SET DEBUG_SYNC=IF(@@innodb_autoinc_lock_mode > 0, 'ha_write_row_end WAIT_FOR continue', 'RESET');
--send INSERT INTO t1(k) VALUES (1), (2), (3) ON DUPLICATE KEY UPDATE c='1'
--connection con2
--echo #
--echo # Connection 2
--echo #
SET DEBUG_SYNC=IF(@@innodb_autoinc_lock_mode > 0, 'execute_command_after_close_tables SIGNAL continue', 'RESET');
--error 1205
INSERT INTO t1(k) VALUES (2), (4), (5) ON DUPLICATE KEY UPDATE c='2';
--connection con1
--echo #
--echo # 2 duplicates
--echo #
--reap
--connection default
--echo #
--echo # 3 rows
--echo #
SELECT * FROM t1 order by k;
INSERT INTO t1(k) VALUES (2), (4), (5) ON DUPLICATE KEY UPDATE c='2';
SELECT * FROM t1 order by k;
--disable_info
--disconnect con1
--disconnect con2
--connection default
DROP TABLE t1;
--echo #
--echo # Parallel test with read_committed
--echo #
set global transaction isolation level read committed;
--disable_warnings
drop table if exists t1;
--enable_warnings
CREATE TABLE t1(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
k INT,
@ -23,10 +140,16 @@ CREATE TABLE t1(
--connection con1
--echo #
--echo # Connection 1
--echo #
SET DEBUG_SYNC='ha_write_row_end SIGNAL continue2 WAIT_FOR continue1';
--send INSERT INTO t1(k) VALUES (1), (2), (3) ON DUPLICATE KEY UPDATE c='1'
--connection con2
--echo #
--echo # Connection 2
--echo #
SET DEBUG_SYNC='ha_write_row_start WAIT_FOR continue2';
SET DEBUG_SYNC='after_mysql_insert SIGNAL continue1';
INSERT INTO t1(k) VALUES (2), (4), (5) ON DUPLICATE KEY UPDATE c='2';
@ -35,6 +158,10 @@ INSERT INTO t1(k) VALUES (2), (4), (5) ON DUPLICATE KEY UPDATE c='2';
--reap
--disable_info
SET DEBUG_SYNC='RESET';
--echo #
--echo # 5 rows, gap in autoinc values
--echo #
SELECT * FROM t1 ORDER BY k;
--disconnect con1
@ -43,3 +170,6 @@ SELECT * FROM t1 ORDER BY k;
--connection default
DROP TABLE t1;
set global transaction isolation level repeatable read;