summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Lindström <jan.lindstrom@mariadb.com>2020-08-07 10:22:38 +0300
committerJan Lindström <jan.lindstrom@mariadb.com>2020-08-07 10:22:38 +0300
commit845e3c9801d17905bf2392f27cda66669c00f75f (patch)
treefb29f7e1b4f97b75d1b0709a0c761f74b7b53518
parent1dec60c79508f338572a69ef5e21b0535a13d064 (diff)
downloadmariadb-git-845e3c9801d17905bf2392f27cda66669c00f75f.tar.gz
Replaced infinite loop in procedure with limited loop to avoidbb-10.2-MDEV-22626
hang.
-rw-r--r--mysql-test/suite/galera/r/galera_bf_lock_wait.result32
-rw-r--r--mysql-test/suite/galera/t/galera_bf_lock_wait.test52
2 files changed, 67 insertions, 17 deletions
diff --git a/mysql-test/suite/galera/r/galera_bf_lock_wait.result b/mysql-test/suite/galera/r/galera_bf_lock_wait.result
index 7ec524da888..0b22f963b29 100644
--- a/mysql-test/suite/galera/r/galera_bf_lock_wait.result
+++ b/mysql-test/suite/galera/r/galera_bf_lock_wait.result
@@ -1,23 +1,41 @@
+connection node_1;
CREATE TABLE t1 ENGINE=InnoDB select 1 as a, 1 as b union select 2, 2;
ALTER TABLE t1 add primary key(a);
-CREATE PROCEDURE p1()
+CREATE PROCEDURE p1(repeat_count INT)
BEGIN
+DECLARE current_num int;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION rollback;
-WHILE 1 DO
+SET current_num = 0;
+WHILE current_num < repeat_count DO
start transaction;
update t1 set b=connection_id() where a=1;
commit;
+SET current_num = current_num + 1;
END WHILE;
END|
+connection node_2;
connect node_1_p1, 127.0.0.1, root, , test, $NODE_MYPORT_1;
-call p1;
+SET SESSION wsrep_sync_wait=0;
+call p1(1000);
connect node_1_p2, 127.0.0.1, root, , test, $NODE_MYPORT_1;
-call p1;
+SET SESSION wsrep_sync_wait=0;
+call p1(1000);
connect node_2_p1, 127.0.0.1, root, , test, $NODE_MYPORT_2;
-call p1;
+SET SESSION wsrep_sync_wait=0;
+call p1(1000);
connect node_2_p2, 127.0.0.1, root, , test, $NODE_MYPORT_2;
-call p1;
-connection default;
+SET SESSION wsrep_sync_wait=0;
+call p1(1000);
+connection node_1;
checking error log for 'BF lock wait long' message for 10 times every 10 seconds ...
+connection node_1_p1;
+connection node_1_p2;
+connection node_2_p1;
+connection node_2_p2;
+connection node_1;
drop table t1;
drop procedure p1;
+disconnect node_1_p1;
+disconnect node_1_p2;
+disconnect node_2_p1;
+disconnect node_2_p2;
diff --git a/mysql-test/suite/galera/t/galera_bf_lock_wait.test b/mysql-test/suite/galera/t/galera_bf_lock_wait.test
index e3a9077a888..c8a31506ffa 100644
--- a/mysql-test/suite/galera/t/galera_bf_lock_wait.test
+++ b/mysql-test/suite/galera/t/galera_bf_lock_wait.test
@@ -1,34 +1,47 @@
--source include/galera_cluster.inc
--source include/big_test.inc
-
+
+--connection node_1
CREATE TABLE t1 ENGINE=InnoDB select 1 as a, 1 as b union select 2, 2;
ALTER TABLE t1 add primary key(a);
DELIMITER |;
-CREATE PROCEDURE p1()
+CREATE PROCEDURE p1(repeat_count INT)
BEGIN
+ DECLARE current_num int;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION rollback;
- WHILE 1 DO
+ SET current_num = 0;
+
+ WHILE current_num < repeat_count DO
start transaction;
update t1 set b=connection_id() where a=1;
commit;
+ SET current_num = current_num + 1;
END WHILE;
END|
DELIMITER ;|
-
+
+--connection node_2
+--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE' AND ROUTINE_NAME = 'p1'
+--source include/wait_condition.inc
+
--connect node_1_p1, 127.0.0.1, root, , test, $NODE_MYPORT_1
-send call p1;
+SET SESSION wsrep_sync_wait=0;
+send call p1(1000);
--connect node_1_p2, 127.0.0.1, root, , test, $NODE_MYPORT_1
-send call p1;
+SET SESSION wsrep_sync_wait=0;
+send call p1(1000);
--connect node_2_p1, 127.0.0.1, root, , test, $NODE_MYPORT_2
-send call p1;
+SET SESSION wsrep_sync_wait=0;
+send call p1(1000);
--connect node_2_p2, 127.0.0.1, root, , test, $NODE_MYPORT_2
-send call p1;
+SET SESSION wsrep_sync_wait=0;
+send call p1(1000);
-connection default;
+connection node_1;
let $counter=10;
let $sleep_period=10;
@@ -46,7 +59,26 @@ while($counter > 0)
exec grep 'BF lock wait long' $MYSQLTEST_VARDIR/log/mysqld.*.err;
dec $counter;
}
-
+
+--connection node_1_p1
+--error 0,1213
+--reap
+--connection node_1_p2
+--error 0,1213
+--reap
+--connection node_2_p1
+--error 0,1213
+--reap
+--connection node_2_p2
+--error 0,1213
+--reap
+
+--connection node_1
drop table t1;
drop procedure p1;
+--disconnect node_1_p1
+--disconnect node_1_p2
+--disconnect node_2_p1
+--disconnect node_2_p2
+