Commit 3ddb4fdd authored by Marko Mäkelä's avatar Marko Mäkelä

MDEV-24738: Extend the test innodb.deadlock_detect

parent 272a1289
SET GLOBAL innodb_deadlock_detect=OFF;
SET GLOBAL innodb_lock_wait_timeout=2;
connection default; connection default;
CREATE TABLE t1( CREATE TABLE t1(
id INT, id INT,
...@@ -7,18 +5,20 @@ PRIMARY KEY(id) ...@@ -7,18 +5,20 @@ PRIMARY KEY(id)
) ENGINE=InnoDB; ) ENGINE=InnoDB;
INSERT INTO t1 VALUES(1), (2), (3); INSERT INTO t1 VALUES(1), (2), (3);
BEGIN; BEGIN;
SELECT * FROM t1 WHERE id = 1 FOR UPDATE; SELECT * FROM t1 WHERE id = 1 LOCK IN SHARE MODE;
connect con1,localhost,root,,; connect con1,localhost,root,,;
BEGIN; BEGIN;
SELECT * FROM t1 WHERE id = 2 FOR UPDATE; SELECT * FROM t1 WHERE id = 2 LOCK IN SHARE MODE;
connect con2,localhost,root,,;
BEGIN;
SELECT * FROM t1 WHERE id = 2 LOCK IN SHARE MODE;
SELECT * FROM t1 WHERE id = 1 FOR UPDATE; SELECT * FROM t1 WHERE id = 1 FOR UPDATE;
connection default; connection default;
SELECT * FROM t1 WHERE id = 2 FOR UPDATE; SELECT * FROM t1 WHERE id = 2 FOR UPDATE;
connection con1; connection con2;
ROLLBACK; ROLLBACK;
disconnect con2;
disconnect con1;
connection default; connection default;
ROLLBACK; ROLLBACK;
DROP TABLE t1; DROP TABLE t1;
disconnect con1;
SET GLOBAL innodb_lock_wait_timeout=default;
SET GLOBAL innodb_deadlock_detect=default;
[OFF]
--innodb-deadlock-detect=OFF
--innodb-lock-wait-timeout=1
[ON]
--innodb-deadlock-detect=ON
--innodb-lock-wait-timeout=1
...@@ -3,11 +3,9 @@ ...@@ -3,11 +3,9 @@
# #
--source include/have_innodb.inc --source include/have_innodb.inc
--source include/not_embedded.inc
--source include/count_sessions.inc --source include/count_sessions.inc
SET GLOBAL innodb_deadlock_detect=OFF; let $have_deadlock=`select @@GLOBAL.innodb_deadlock_detect`;
SET GLOBAL innodb_lock_wait_timeout=2;
connection default; connection default;
...@@ -22,24 +20,33 @@ INSERT INTO t1 VALUES(1), (2), (3); ...@@ -22,24 +20,33 @@ INSERT INTO t1 VALUES(1), (2), (3);
--disable_result_log --disable_result_log
BEGIN; BEGIN;
SELECT * FROM t1 WHERE id = 1 FOR UPDATE; SELECT * FROM t1 WHERE id = 1 LOCK IN SHARE MODE;
connect (con1,localhost,root,,); connect (con1,localhost,root,,);
BEGIN; BEGIN;
SELECT * FROM t1 WHERE id = 2 LOCK IN SHARE MODE;
SELECT * FROM t1 WHERE id = 2 FOR UPDATE; connect (con2,localhost,root,,);
BEGIN;
SELECT * FROM t1 WHERE id = 2 LOCK IN SHARE MODE;
send SELECT * FROM t1 WHERE id = 1 FOR UPDATE; send SELECT * FROM t1 WHERE id = 1 FOR UPDATE;
connection default; connection default;
send SELECT * FROM t1 WHERE id = 2 FOR UPDATE; send SELECT * FROM t1 WHERE id = 2 FOR UPDATE;
connection con1; connection con2;
if (!$have_deadlock) {
--error ER_LOCK_WAIT_TIMEOUT --error ER_LOCK_WAIT_TIMEOUT
reap; reap;
}
if ($have_deadlock) {
--error 0,ER_LOCK_DEADLOCK
reap;
}
ROLLBACK; ROLLBACK;
disconnect con2;
disconnect con1;
# #
# Note here that con1 is the older transaction as it # Note here that con1 is the older transaction as it
...@@ -50,8 +57,14 @@ ROLLBACK; ...@@ -50,8 +57,14 @@ ROLLBACK;
# and does the update. # and does the update.
# #
connection default; connection default;
if (!$have_deadlock) {
--error 0,ER_LOCK_WAIT_TIMEOUT --error 0,ER_LOCK_WAIT_TIMEOUT
reap; reap;
}
if ($have_deadlock) {
--error 0,ER_LOCK_DEADLOCK
reap;
}
ROLLBACK; ROLLBACK;
...@@ -59,9 +72,4 @@ ROLLBACK; ...@@ -59,9 +72,4 @@ ROLLBACK;
DROP TABLE t1; DROP TABLE t1;
disconnect con1;
--source include/wait_until_count_sessions.inc --source include/wait_until_count_sessions.inc
SET GLOBAL innodb_lock_wait_timeout=default;
SET GLOBAL innodb_deadlock_detect=default;
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment