diff options
Diffstat (limited to 'mysql-test/suite/innodb/t/deadlock_detect.test')
-rw-r--r-- | mysql-test/suite/innodb/t/deadlock_detect.test | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/mysql-test/suite/innodb/t/deadlock_detect.test b/mysql-test/suite/innodb/t/deadlock_detect.test new file mode 100644 index 00000000..babdb547 --- /dev/null +++ b/mysql-test/suite/innodb/t/deadlock_detect.test @@ -0,0 +1,67 @@ +# +# 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; |