summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVlad Lesin <vlad_lesin@mail.ru>2022-09-01 09:55:49 +0300
committerVlad Lesin <vlad_lesin@mail.ru>2022-09-08 13:36:30 +0300
commit43745b7e17e2889c0e2891a2ffaf4ec203aa5c7b (patch)
tree3a75b9dfd6731eb7a4a9693f78e042d4a6acaaa7
parent04899d6d9167acc2132ee86e011dcdc026f73d51 (diff)
downloadmariadb-git-43745b7e17e2889c0e2891a2ffaf4ec203aa5c7b.tar.gz
MDEV-29433 innodb.lock_delete_updated is unstable
Use suspend thread syncpoint instead of include/wait_condition.inc to make sure DELETE created waiting lock before the next UPDATE begins locking. This is backport of commit 0fa4dd0747bb12479662952e7fe6ae2fffff737b from 10.6.
-rw-r--r--mysql-test/suite/innodb/r/lock_delete_updated.result4
-rw-r--r--mysql-test/suite/innodb/t/lock_delete_updated.test12
2 files changed, 8 insertions, 8 deletions
diff --git a/mysql-test/suite/innodb/r/lock_delete_updated.result b/mysql-test/suite/innodb/r/lock_delete_updated.result
index c2cd47b5dd9..b78cd11fb78 100644
--- a/mysql-test/suite/innodb/r/lock_delete_updated.result
+++ b/mysql-test/suite/innodb/r/lock_delete_updated.result
@@ -1,11 +1,12 @@
CREATE TABLE t(a INT PRIMARY KEY) ENGINE=InnoDB;
INSERT INTO t VALUES (3);
BEGIN;
-connection default;
UPDATE t SET a = 2;
connect con1,localhost,root;
+SET DEBUG_SYNC="lock_wait_suspend_thread_enter SIGNAL del_locked";
DELETE FROM t;
connection default;
+SET DEBUG_SYNC="now WAIT_FOR del_locked";
UPDATE t SET a = 1;
COMMIT;
connection con1;
@@ -17,4 +18,5 @@ connection default;
SELECT count(*) FROM t;
count(*)
1
+SET DEBUG_SYNC="reset";
DROP TABLE t;
diff --git a/mysql-test/suite/innodb/t/lock_delete_updated.test b/mysql-test/suite/innodb/t/lock_delete_updated.test
index 4621d5fcd2b..dd1a7483f79 100644
--- a/mysql-test/suite/innodb/t/lock_delete_updated.test
+++ b/mysql-test/suite/innodb/t/lock_delete_updated.test
@@ -1,23 +1,20 @@
--source include/have_innodb.inc
--source include/count_sessions.inc
+--source include/have_debug.inc
+--source include/have_debug_sync.inc
CREATE TABLE t(a INT PRIMARY KEY) ENGINE=InnoDB;
INSERT INTO t VALUES (3);
BEGIN;
-
-connection default;
UPDATE t SET a = 2;
connect con1,localhost,root;
+SET DEBUG_SYNC="lock_wait_suspend_thread_enter SIGNAL del_locked";
send DELETE FROM t;
connection default;
-let $wait_condition=
- select count(*) = 1 from information_schema.processlist
- where state = "Updating" and info = "DELETE FROM t";
---source include/wait_condition.inc
-
+SET DEBUG_SYNC="now WAIT_FOR del_locked";
UPDATE t SET a = 1;
COMMIT;
@@ -30,5 +27,6 @@ connection default;
--echo # The above DELETE must delete all the rows in the table, so the
--echo # following SELECT must show 0 rows.
SELECT count(*) FROM t;
+SET DEBUG_SYNC="reset";
DROP TABLE t;
--source include/wait_until_count_sessions.inc