mirror of
https://github.com/MariaDB/server.git
synced 2025-01-30 18:41:56 +01:00
ae7e1b9b13
There is a race condition on a test. con1 is the older transaction as it query started wait first. Test continues so that con1 gets lock wait timeout first. There is possibility that default connection gets lock timeout also or as con1 is rolled back it gets the locks it waited and does the update. Fixed by removing query outputs as they could vary and accepting success from default connection query.
67 lines
1.3 KiB
Text
67 lines
1.3 KiB
Text
#
|
|
# wl#9383 INNODB: ADD AN OPTION TO TURN OFF/ON DEADLOCK CHECKER
|
|
#
|
|
|
|
--source include/have_innodb.inc
|
|
--source include/not_embedded.inc
|
|
--source include/count_sessions.inc
|
|
|
|
SET GLOBAL innodb_deadlock_detect=OFF;
|
|
SET GLOBAL innodb_lock_wait_timeout=2;
|
|
|
|
connection default;
|
|
|
|
CREATE TABLE t1(
|
|
id INT,
|
|
PRIMARY KEY(id)
|
|
) ENGINE=InnoDB;
|
|
|
|
INSERT INTO t1 VALUES(1), (2), (3);
|
|
|
|
# We are not interested query results, only errors
|
|
--disable_result_log
|
|
BEGIN;
|
|
|
|
SELECT * FROM t1 WHERE id = 1 FOR UPDATE;
|
|
|
|
connect (con1,localhost,root,,);
|
|
|
|
BEGIN;
|
|
|
|
SELECT * FROM t1 WHERE id = 2 FOR UPDATE;
|
|
|
|
send SELECT * FROM t1 WHERE id = 1 FOR UPDATE;
|
|
|
|
connection default;
|
|
send SELECT * FROM t1 WHERE id = 2 FOR UPDATE;
|
|
|
|
connection con1;
|
|
--error ER_LOCK_WAIT_TIMEOUT
|
|
reap;
|
|
|
|
ROLLBACK;
|
|
|
|
#
|
|
# Note here that con1 is the older transaction as it
|
|
# query started wait first. Thus, con1 gets lock
|
|
# wait timeout first. There is possibility that
|
|
# default connection gets lock timeout also or
|
|
# as con1 is rolled back it gets the locks it waited
|
|
# and does the update.
|
|
#
|
|
connection default;
|
|
--error 0,ER_LOCK_WAIT_TIMEOUT
|
|
reap;
|
|
|
|
ROLLBACK;
|
|
|
|
--enable_result_log
|
|
|
|
DROP TABLE t1;
|
|
|
|
disconnect con1;
|
|
|
|
--source include/wait_until_count_sessions.inc
|
|
|
|
SET GLOBAL innodb_lock_wait_timeout=default;
|
|
SET GLOBAL innodb_deadlock_detect=default;
|