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:
@ -13,6 +13,5 @@
|
|||||||
innodb_scrub : MDEV-8139
|
innodb_scrub : MDEV-8139
|
||||||
innodb_scrub_compressed : MDEV-8139
|
innodb_scrub_compressed : MDEV-8139
|
||||||
innodb_scrub_background : MDEV-8139
|
innodb_scrub_background : MDEV-8139
|
||||||
innodb_encryption-page-compression : Fails with lost connection at line 156
|
innochecksum : MDEV-10727
|
||||||
innochecksum : Waiting for merge
|
innodb_encryption_discard_import : MDEV-9099
|
||||||
|
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
SET GLOBAL innodb_file_format = `Barracuda`;
|
SET GLOBAL innodb_file_format = `Barracuda`;
|
||||||
|
Warnings:
|
||||||
|
Warning 131 Using innodb_file_format is deprecated and the parameter may be removed in future releases. See http://dev.mysql.com/doc/refman/5.7/en/innodb-file-format.html
|
||||||
SET GLOBAL innodb_file_per_table = ON;
|
SET GLOBAL innodb_file_per_table = ON;
|
||||||
SET GLOBAL innodb_encryption_threads = 4;
|
SET GLOBAL innodb_encryption_threads = 4;
|
||||||
SET GLOBAL innodb_encrypt_tables = on;
|
SET GLOBAL innodb_encrypt_tables = on;
|
||||||
@ -262,3 +264,5 @@ drop table innodb_page_compressed6;
|
|||||||
drop table innodb_page_compressed7;
|
drop table innodb_page_compressed7;
|
||||||
drop table innodb_page_compressed8;
|
drop table innodb_page_compressed8;
|
||||||
drop table innodb_page_compressed9;
|
drop table innodb_page_compressed9;
|
||||||
|
Warnings:
|
||||||
|
Warning 131 Using innodb_file_format is deprecated and the parameter may be removed in future releases. See http://dev.mysql.com/doc/refman/5.7/en/innodb-file-format.html
|
||||||
|
@ -10,5 +10,4 @@
|
|||||||
#
|
#
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
innodb.auto_increment_dup : MDEV-10548
|
|
||||||
innodb_defragment_fill_factor : MDEV-10771
|
innodb_defragment_fill_factor : MDEV-10771
|
@ -1,4 +1,137 @@
|
|||||||
drop table if exists t1;
|
drop table if exists t1;
|
||||||
|
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;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`k` int(11) DEFAULT NULL,
|
||||||
|
`c` char(1) DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
UNIQUE KEY `k` (`k`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||||
|
#
|
||||||
|
# Sequential execution
|
||||||
|
#
|
||||||
|
INSERT INTO t1(k) VALUES (1), (2), (3) ON DUPLICATE KEY UPDATE c='1';
|
||||||
|
affected rows: 3
|
||||||
|
info: Records: 3 Duplicates: 0 Warnings: 0
|
||||||
|
#
|
||||||
|
# 1 duplicate
|
||||||
|
#
|
||||||
|
INSERT INTO t1(k) VALUES (2), (4), (5) ON DUPLICATE KEY UPDATE c='2';
|
||||||
|
affected rows: 4
|
||||||
|
info: Records: 3 Duplicates: 1 Warnings: 0
|
||||||
|
#
|
||||||
|
# 5 rows, consecutive auto_inc values
|
||||||
|
#
|
||||||
|
SELECT * FROM t1 order by k;
|
||||||
|
id k c
|
||||||
|
1 1 NULL
|
||||||
|
2 2 2
|
||||||
|
3 3 NULL
|
||||||
|
4 4 NULL
|
||||||
|
5 5 NULL
|
||||||
|
affected rows: 5
|
||||||
|
DROP TABLE t1;
|
||||||
|
affected rows: 0
|
||||||
|
CREATE TABLE t1(
|
||||||
|
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||||
|
k INT,
|
||||||
|
c CHAR(1),
|
||||||
|
UNIQUE KEY(k)) ENGINE=InnoDB;
|
||||||
|
affected rows: 0
|
||||||
|
#
|
||||||
|
# Sequential execution 2
|
||||||
|
#
|
||||||
|
INSERT INTO t1(k) VALUES (2), (4), (5) ON DUPLICATE KEY UPDATE c='2';
|
||||||
|
affected rows: 3
|
||||||
|
info: Records: 3 Duplicates: 0 Warnings: 0
|
||||||
|
#
|
||||||
|
# 1 duplicate
|
||||||
|
#
|
||||||
|
INSERT INTO t1(k) VALUES (1), (2), (3) ON DUPLICATE KEY UPDATE c='1';
|
||||||
|
affected rows: 4
|
||||||
|
info: Records: 3 Duplicates: 1 Warnings: 0
|
||||||
|
#
|
||||||
|
# 5 rows, consecutive auto_inc values
|
||||||
|
#
|
||||||
|
SELECT * FROM t1 order by k;
|
||||||
|
id k c
|
||||||
|
4 1 NULL
|
||||||
|
1 2 1
|
||||||
|
5 3 NULL
|
||||||
|
2 4 NULL
|
||||||
|
3 5 NULL
|
||||||
|
affected rows: 5
|
||||||
|
DROP TABLE t1;
|
||||||
|
affected rows: 0
|
||||||
|
CREATE TABLE t1(
|
||||||
|
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||||
|
k INT,
|
||||||
|
c CHAR(1),
|
||||||
|
UNIQUE KEY(k)) ENGINE=InnoDB;
|
||||||
|
affected rows: 0
|
||||||
|
#
|
||||||
|
# Parallel execution
|
||||||
|
#
|
||||||
|
connect con1, localhost, root;
|
||||||
|
connect con2, localhost, root;
|
||||||
|
connection con1;
|
||||||
|
#
|
||||||
|
# Connection 1
|
||||||
|
#
|
||||||
|
SET DEBUG_SYNC=IF(@@innodb_autoinc_lock_mode > 0, 'ha_write_row_end WAIT_FOR continue', 'RESET');
|
||||||
|
affected rows: 0
|
||||||
|
INSERT INTO t1(k) VALUES (1), (2), (3) ON DUPLICATE KEY UPDATE c='1';
|
||||||
|
connection con2;
|
||||||
|
#
|
||||||
|
# Connection 2
|
||||||
|
#
|
||||||
|
SET DEBUG_SYNC=IF(@@innodb_autoinc_lock_mode > 0, 'execute_command_after_close_tables SIGNAL continue', 'RESET');
|
||||||
|
affected rows: 0
|
||||||
|
INSERT INTO t1(k) VALUES (2), (4), (5) ON DUPLICATE KEY UPDATE c='2';
|
||||||
|
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
||||||
|
connection con1;
|
||||||
|
#
|
||||||
|
# 2 duplicates
|
||||||
|
#
|
||||||
|
affected rows: 3
|
||||||
|
info: Records: 3 Duplicates: 0 Warnings: 0
|
||||||
|
connection default;
|
||||||
|
#
|
||||||
|
# 3 rows
|
||||||
|
#
|
||||||
|
SELECT * FROM t1 order by k;
|
||||||
|
id k c
|
||||||
|
1 1 NULL
|
||||||
|
2 2 NULL
|
||||||
|
3 3 NULL
|
||||||
|
affected rows: 3
|
||||||
|
INSERT INTO t1(k) VALUES (2), (4), (5) ON DUPLICATE KEY UPDATE c='2';
|
||||||
|
affected rows: 4
|
||||||
|
info: Records: 3 Duplicates: 1 Warnings: 0
|
||||||
|
SELECT * FROM t1 order by k;
|
||||||
|
id k c
|
||||||
|
1 1 NULL
|
||||||
|
2 2 2
|
||||||
|
3 3 NULL
|
||||||
|
7 4 NULL
|
||||||
|
8 5 NULL
|
||||||
|
affected rows: 5
|
||||||
|
disconnect con1;
|
||||||
|
disconnect con2;
|
||||||
|
connection default;
|
||||||
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# Parallel test with read_committed
|
||||||
|
#
|
||||||
|
set global transaction isolation level read committed;
|
||||||
|
drop table if exists t1;
|
||||||
CREATE TABLE t1(
|
CREATE TABLE t1(
|
||||||
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||||
k INT,
|
k INT,
|
||||||
@ -7,10 +140,16 @@ UNIQUE KEY(k)) ENGINE=InnoDB;
|
|||||||
connect con1, localhost, root;
|
connect con1, localhost, root;
|
||||||
connect con2, localhost, root;
|
connect con2, localhost, root;
|
||||||
connection con1;
|
connection con1;
|
||||||
|
#
|
||||||
|
# Connection 1
|
||||||
|
#
|
||||||
SET DEBUG_SYNC='ha_write_row_end SIGNAL continue2 WAIT_FOR continue1';
|
SET DEBUG_SYNC='ha_write_row_end SIGNAL continue2 WAIT_FOR continue1';
|
||||||
affected rows: 0
|
affected rows: 0
|
||||||
INSERT INTO t1(k) VALUES (1), (2), (3) ON DUPLICATE KEY UPDATE c='1';
|
INSERT INTO t1(k) VALUES (1), (2), (3) ON DUPLICATE KEY UPDATE c='1';
|
||||||
connection con2;
|
connection con2;
|
||||||
|
#
|
||||||
|
# Connection 2
|
||||||
|
#
|
||||||
SET DEBUG_SYNC='ha_write_row_start WAIT_FOR continue2';
|
SET DEBUG_SYNC='ha_write_row_start WAIT_FOR continue2';
|
||||||
affected rows: 0
|
affected rows: 0
|
||||||
SET DEBUG_SYNC='after_mysql_insert SIGNAL continue1';
|
SET DEBUG_SYNC='after_mysql_insert SIGNAL continue1';
|
||||||
@ -22,6 +161,9 @@ connection con1;
|
|||||||
affected rows: 4
|
affected rows: 4
|
||||||
info: Records: 3 Duplicates: 1 Warnings: 0
|
info: Records: 3 Duplicates: 1 Warnings: 0
|
||||||
SET DEBUG_SYNC='RESET';
|
SET DEBUG_SYNC='RESET';
|
||||||
|
#
|
||||||
|
# 5 rows, gap in autoinc values
|
||||||
|
#
|
||||||
SELECT * FROM t1 ORDER BY k;
|
SELECT * FROM t1 ORDER BY k;
|
||||||
id k c
|
id k c
|
||||||
1 1 NULL
|
1 1 NULL
|
||||||
@ -33,3 +175,4 @@ disconnect con1;
|
|||||||
disconnect con2;
|
disconnect con2;
|
||||||
connection default;
|
connection default;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
set global transaction isolation level repeatable read;
|
||||||
|
@ -1 +1,2 @@
|
|||||||
--innodb_autoinc_lock_mode=1
|
--innodb_autoinc_lock_mode=1
|
||||||
|
--innodb_lock_wait_timeout=2
|
||||||
|
@ -10,6 +10,123 @@
|
|||||||
drop table if exists t1;
|
drop table if exists t1;
|
||||||
--enable_warnings
|
--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(
|
CREATE TABLE t1(
|
||||||
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||||
k INT,
|
k INT,
|
||||||
@ -23,10 +140,16 @@ CREATE TABLE t1(
|
|||||||
|
|
||||||
--connection con1
|
--connection con1
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Connection 1
|
||||||
|
--echo #
|
||||||
SET DEBUG_SYNC='ha_write_row_end SIGNAL continue2 WAIT_FOR continue1';
|
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'
|
--send INSERT INTO t1(k) VALUES (1), (2), (3) ON DUPLICATE KEY UPDATE c='1'
|
||||||
|
|
||||||
--connection con2
|
--connection con2
|
||||||
|
--echo #
|
||||||
|
--echo # Connection 2
|
||||||
|
--echo #
|
||||||
SET DEBUG_SYNC='ha_write_row_start WAIT_FOR continue2';
|
SET DEBUG_SYNC='ha_write_row_start WAIT_FOR continue2';
|
||||||
SET DEBUG_SYNC='after_mysql_insert SIGNAL continue1';
|
SET DEBUG_SYNC='after_mysql_insert SIGNAL continue1';
|
||||||
INSERT INTO t1(k) VALUES (2), (4), (5) ON DUPLICATE KEY UPDATE c='2';
|
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
|
--reap
|
||||||
--disable_info
|
--disable_info
|
||||||
SET DEBUG_SYNC='RESET';
|
SET DEBUG_SYNC='RESET';
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # 5 rows, gap in autoinc values
|
||||||
|
--echo #
|
||||||
SELECT * FROM t1 ORDER BY k;
|
SELECT * FROM t1 ORDER BY k;
|
||||||
|
|
||||||
--disconnect con1
|
--disconnect con1
|
||||||
@ -43,3 +170,6 @@ SELECT * FROM t1 ORDER BY k;
|
|||||||
--connection default
|
--connection default
|
||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
set global transaction isolation level repeatable read;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user