mirror of
https://github.com/MariaDB/server.git
synced 2025-01-30 18:41:56 +01:00
121 lines
3.9 KiB
Text
121 lines
3.9 KiB
Text
#
|
|
# Bug #21025880 DUPLICATE UK VALUES IN READ-COMMITTED(AGAIN)
|
|
#
|
|
CREATE TABLE t1 (
|
|
a INT NOT NULL,
|
|
b INT NOT NULL,
|
|
PRIMARY KEY(b),
|
|
UNIQUE KEY(a))
|
|
ENGINE=INNODB;
|
|
SET @old_innodb_stats_auto_recalc = @@innodb_stats_auto_recalc;
|
|
SET GLOBAL innodb_stats_auto_recalc = OFF;
|
|
connect purge_control,localhost,root;
|
|
START TRANSACTION WITH CONSISTENT SNAPSHOT;
|
|
connection default;
|
|
SET @old_tx_isolation = @@tx_isolation;
|
|
SET GLOBAL tx_isolation = 'READ-COMMITTED';
|
|
SET @old_innodb_lock_wait_timeout = @@innodb_lock_wait_timeout;
|
|
SET GLOBAL innodb_lock_wait_timeout = 1;
|
|
connect con1,localhost,root,,;
|
|
INSERT INTO t1 VALUES (1,1),(2,2);
|
|
DELETE FROM t1;
|
|
SET debug_sync = 'row_ins_sec_index_entry_dup_locks_created SIGNAL
|
|
con1_locks_done WAIT_FOR con1_go';
|
|
SET debug_sync = 'ha_commit_trans_after_acquire_commit_lock SIGNAL
|
|
con1_insert_done WAIT_FOR con1_finish';
|
|
REPLACE INTO t1 VALUES (1,2);
|
|
connect con2,localhost,root,,;
|
|
SET debug_sync = 'now WAIT_FOR con1_locks_done';
|
|
SET debug_sync = 'lock_wait_start SIGNAL con2_blocked
|
|
WAIT_FOR con2_go';
|
|
SET debug_sync = 'ha_commit_trans_after_acquire_commit_lock
|
|
WAIT_FOR con2_finish';
|
|
SET debug_sync = 'ib_after_row_insert SIGNAL con2_insert_done';
|
|
REPLACE INTO t1 VALUES (1,3);
|
|
connection default;
|
|
SET debug_sync = 'now WAIT_FOR con2_blocked';
|
|
connection purge_control;
|
|
COMMIT;
|
|
disconnect purge_control;
|
|
connection default;
|
|
InnoDB 0 transactions not purged
|
|
SET debug_sync = 'now SIGNAL con2_go WAIT_FOR con2_insert_done';
|
|
SET debug_sync = 'now SIGNAL con1_go WAIT_FOR con1_insert_done';
|
|
SET debug_sync = 'now SIGNAL con1_finish';
|
|
connection con1;
|
|
disconnect con1;
|
|
connection default;
|
|
SET debug_sync = 'now SIGNAL con2_finish';
|
|
connection con2;
|
|
disconnect con2;
|
|
connection default;
|
|
SET DEBUG_SYNC= 'RESET';
|
|
SELECT * FROM t1;
|
|
a b
|
|
1 2
|
|
CHECK TABLE t1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
DROP TABLE t1;
|
|
SET GLOBAL innodb_stats_auto_recalc = @old_innodb_stats_auto_recalc;
|
|
SET GLOBAL tx_isolation = @old_tx_isolation;
|
|
SET GLOBAL innodb_lock_wait_timeout = @old_innodb_lock_wait_timeout;
|
|
CREATE TABLE t1 (
|
|
a INT NOT NULL,
|
|
b INT NOT NULL,
|
|
PRIMARY KEY(b),
|
|
UNIQUE KEY(a))
|
|
ENGINE=INNODB;
|
|
SET @old_innodb_stats_auto_recalc = @@innodb_stats_auto_recalc;
|
|
SET GLOBAL innodb_stats_auto_recalc = OFF;
|
|
connect purge_control,localhost,root;
|
|
START TRANSACTION WITH CONSISTENT SNAPSHOT;
|
|
connection default;
|
|
SET @old_tx_isolation = @@tx_isolation;
|
|
SET GLOBAL tx_isolation = 'READ-COMMITTED';
|
|
SET @old_innodb_lock_wait_timeout = @@innodb_lock_wait_timeout;
|
|
SET GLOBAL innodb_lock_wait_timeout = 1;
|
|
connect con1,localhost,root,,;
|
|
INSERT INTO t1 VALUES (1,1),(2,2);
|
|
DELETE FROM t1;
|
|
SET debug_sync = 'row_ins_sec_index_entry_dup_locks_created SIGNAL
|
|
con1_locks_done WAIT_FOR con1_go';
|
|
SET debug_sync = 'ha_commit_trans_after_acquire_commit_lock SIGNAL
|
|
con1_insert_done WAIT_FOR con1_finish';
|
|
INSERT INTO t1 values (1,2) ON DUPLICATE KEY UPDATE a=2;
|
|
connect con2,localhost,root,,;
|
|
SET debug_sync = 'now WAIT_FOR con1_locks_done';
|
|
SET debug_sync = 'lock_wait_start SIGNAL con2_blocked
|
|
WAIT_FOR con2_go';
|
|
SET debug_sync = 'ha_commit_trans_after_acquire_commit_lock
|
|
WAIT_FOR con2_finish';
|
|
SET debug_sync = 'ib_after_row_insert SIGNAL con2_insert_done';
|
|
REPLACE INTO t1 VALUES (1,3);
|
|
connection default;
|
|
SET debug_sync = 'now WAIT_FOR con2_blocked';
|
|
connection purge_control;
|
|
COMMIT;
|
|
disconnect purge_control;
|
|
connection default;
|
|
InnoDB 0 transactions not purged
|
|
SET debug_sync = 'now SIGNAL con2_go WAIT_FOR con2_insert_done';
|
|
SET debug_sync = 'now SIGNAL con1_go WAIT_FOR con1_insert_done';
|
|
SET debug_sync = 'now SIGNAL con1_finish';
|
|
connection con1;
|
|
disconnect con1;
|
|
connection default;
|
|
SET debug_sync = 'now SIGNAL con2_finish';
|
|
connection con2;
|
|
disconnect con2;
|
|
connection default;
|
|
SET DEBUG_SYNC= 'RESET';
|
|
SELECT * FROM t1;
|
|
a b
|
|
1 2
|
|
CHECK TABLE t1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
DROP TABLE t1;
|
|
SET GLOBAL innodb_stats_auto_recalc = @old_innodb_stats_auto_recalc;
|
|
SET GLOBAL tx_isolation = @old_tx_isolation;
|
|
SET GLOBAL innodb_lock_wait_timeout = @old_innodb_lock_wait_timeout;
|