mirror of
https://github.com/MariaDB/server.git
synced 2025-04-18 21:44:20 +03:00
SAMU-292 INSERT and DELETE transactions on sys_mutex/ire_mutex tables active for 600+ seconds
Test case is added. The test case is not full, but can be used for debugging. If we need test case for commit in 10.4 trunk, we need to grep error log with the following sequence of mtr commands: --let SEARCH_FILE = $MYSQLTEST_VARDIR/log/mysqld.1.err --let SEARCH_PATTERN= "some regex" --source include/search_pattern_in_file.inc
This commit is contained in:
parent
575493eec7
commit
89eae6930f
38
mysql-test/suite/innodb/r/deadlock_diagnostics.result
Normal file
38
mysql-test/suite/innodb/r/deadlock_diagnostics.result
Normal file
@ -0,0 +1,38 @@
|
||||
CREATE TABLE t(a INT PRIMARY KEY) ENGINE=InnoDB, STATS_PERSISTENT=0;
|
||||
INSERT INTO t VALUES (1),(2),(3),(4),(5),(6),(7),(8);
|
||||
BEGIN;
|
||||
SELECT * FROM t WHERE a = 1 FOR UPDATE;
|
||||
a
|
||||
1
|
||||
connect con1,localhost,root;
|
||||
BEGIN;
|
||||
SELECT * FROM t WHERE a = 2 FOR UPDATE;
|
||||
a
|
||||
2
|
||||
SET DEBUG_SYNC="lock_wait_suspend_thread_enter SIGNAL select_locked";
|
||||
SELECT * FROM t WHERE a = 1 FOR UPDATE;
|
||||
connect con2,localhost,root;
|
||||
SET DEBUG_SYNC="now WAIT_FOR select_locked";
|
||||
BEGIN;
|
||||
SELECT * FROM t WHERE a = 3 FOR UPDATE;
|
||||
a
|
||||
3
|
||||
SET DEBUG_SYNC="lock_wait_suspend_thread_enter SIGNAL select_locked";
|
||||
SELECT * FROM t WHERE a = 2 FOR UPDATE;
|
||||
connect con3,localhost,root;
|
||||
SET DEBUG_SYNC="now WAIT_FOR select_locked";
|
||||
BEGIN;
|
||||
SELECT * FROM t WHERE a = 4 FOR UPDATE;
|
||||
a
|
||||
4
|
||||
SET DEBUG_SYNC="lock_wait_suspend_thread_enter SIGNAL select_locked";
|
||||
SELECT * FROM t WHERE a = 3 FOR UPDATE;
|
||||
connection default;
|
||||
SELECT * FROM t WHERE a = 4 FOR UPDATE;
|
||||
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
||||
### See error log
|
||||
disconnect con1;
|
||||
disconnect con2;
|
||||
disconnect con3;
|
||||
SET DEBUG_SYNC="RESET";
|
||||
DROP TABLE t;
|
1
mysql-test/suite/innodb/t/deadlock_diagnostics.opt
Normal file
1
mysql-test/suite/innodb/t/deadlock_diagnostics.opt
Normal file
@ -0,0 +1 @@
|
||||
--innodb-print-all-deadlocks=1
|
44
mysql-test/suite/innodb/t/deadlock_diagnostics.test
Normal file
44
mysql-test/suite/innodb/t/deadlock_diagnostics.test
Normal file
@ -0,0 +1,44 @@
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_debug.inc
|
||||
--source include/have_debug_sync.inc
|
||||
--source include/count_sessions.inc
|
||||
|
||||
CREATE TABLE t(a INT PRIMARY KEY) ENGINE=InnoDB, STATS_PERSISTENT=0;
|
||||
INSERT INTO t VALUES (1),(2),(3),(4),(5),(6),(7),(8);
|
||||
|
||||
#1
|
||||
BEGIN; SELECT * FROM t WHERE a = 1 FOR UPDATE;
|
||||
|
||||
--connect con1,localhost,root
|
||||
#2
|
||||
BEGIN; SELECT * FROM t WHERE a = 2 FOR UPDATE;
|
||||
SET DEBUG_SYNC="lock_wait_suspend_thread_enter SIGNAL select_locked";
|
||||
--send SELECT * FROM t WHERE a = 1 FOR UPDATE
|
||||
|
||||
--connect con2,localhost,root
|
||||
SET DEBUG_SYNC="now WAIT_FOR select_locked";
|
||||
#3
|
||||
BEGIN; SELECT * FROM t WHERE a = 3 FOR UPDATE;
|
||||
SET DEBUG_SYNC="lock_wait_suspend_thread_enter SIGNAL select_locked";
|
||||
--send SELECT * FROM t WHERE a = 2 FOR UPDATE
|
||||
|
||||
--connect con3,localhost,root
|
||||
SET DEBUG_SYNC="now WAIT_FOR select_locked";
|
||||
#4
|
||||
BEGIN; SELECT * FROM t WHERE a = 4 FOR UPDATE;
|
||||
SET DEBUG_SYNC="lock_wait_suspend_thread_enter SIGNAL select_locked";
|
||||
--send SELECT * FROM t WHERE a = 3 FOR UPDATE
|
||||
|
||||
--connection default
|
||||
#1->4->3->2->1 loop
|
||||
--error 1213
|
||||
SELECT * FROM t WHERE a = 4 FOR UPDATE;
|
||||
--echo ### See error log
|
||||
|
||||
--disconnect con1
|
||||
--disconnect con2
|
||||
--disconnect con3
|
||||
|
||||
SET DEBUG_SYNC="RESET";
|
||||
DROP TABLE t;
|
||||
--source include/wait_until_count_sessions.inc
|
Loading…
x
Reference in New Issue
Block a user