polardbxengine/mysql-test/suite/perfschema/t/innodb_data_locks2.test

96 lines
2.3 KiB
Plaintext

# This test is a continuation of innodb_data_locks.test
# However it requires DEBUG_SYNC support and
# setting --innodb-autoinc-lock-mode=0 both of which are
# controled at the test file level, so I've moved it to
# separate file, not to impact the old test which do not
# have such specific requirements.
--source include/have_debug_sync.inc
--echo
--echo Bug #28176805 PERFORMANCE_SCHEMA.DATA_LOCKS.LOCK_MODE
--echo DOES NOT RECOGNIZE LOCK_REC_NOT_GAP
--echo
# This test attempts to demonstrate various modes of locking
CREATE TABLE t1 (id INT PRIMARY KEY) Engine=InnoDB;
INSERT INTO t1 VALUES (0),(10),(20),(30);
CREATE TABLE t2 (id INT PRIMARY KEY AUTO_INCREMENT, val INT) Engine=InnoDB;
--connect (C1, localhost, root,,)
--connect (C2, localhost, root,,)
--connect (C3, localhost, root,,)
--connect (C4, localhost, root,,)
--connection C1
BEGIN;
# table IS
# S
SELECT * FROM t1 WHERE id=10 FOR SHARE;
# table IX
# X,REC_NOT_GAP
INSERT INTO t1 VALUES (5);
# S,GAP
SELECT * FROM t1 WHERE id=25 FOR SHARE;
# X,GAP
SELECT * FROM t1 WHERE id=22 FOR UPDATE;
# S,REC_NOT_GAP
SELECT * FROM t1 where id>=10 and id<=20 FOR SHARE;
# X
SELECT * FROM t1 WHERE id>20 FOR UPDATE;
--connection C2
BEGIN;
SET DEBUG_SYNC = 'lock_wait_will_wait SIGNAL C2_will_wait';
# X,GAP,INSERT_INTENTION
--send INSERT INTO t1 VALUES (21)
--connection C3
SET DEBUG_SYNC = 'now WAIT_FOR C2_will_wait';
BEGIN;
SHOW VARIABLES LIKE 'innodb_autoinc_lock_mode';
SET DEBUG_SYNC = 'lock_wait_will_wait SIGNAL C3_will_wait';
# AUTO_INC
--send INSERT INTO t2 (val) SELECT id FROM t1 WHERE id>=0 AND id< 10;
--connection C4
SET DEBUG_SYNC = 'now WAIT_FOR C3_will_wait';
BEGIN;
SET DEBUG_SYNC = 'lock_wait_will_wait SIGNAL C4_will_wait';
# X,INSERT_INTENTION
--send INSERT INTO t1 VALUES (35)
--connection default
SET DEBUG_SYNC = 'now WAIT_FOR C4_will_wait';
SELECT
object_name,
index_name,
lock_type,
lock_mode,
lock_status,
lock_data
FROM performance_schema.data_locks
ORDER BY 1,2,3,4,5,6;
--connection C1
ROLLBACK;
--connection C2
--reap
ROLLBACK;
--connection C3
--reap
ROLLBACK;
--connection C4
--reap
ROLLBACK;
--connection default
--disconnect C1
--disconnect C2
--disconnect C3
--disconnect C4
DROP TABLE t1;
DROP TABLE t2;