-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
MDEV-14401: Stored procedure that declares a handler that catches ER_…
…LOCK_DEADLOCK error causes thd->is_error() assertion This was missing bug fix from MySQL wsrep i.e. Galera. Problem was that if stored procedure declares a handler that catches deadlock error, then the error may have been cleared in method sp_rcontext::handle_sql_condition(). Use wsrep_conflict_state correctly to determine is the error already sent to client. Add test case for both this bug and MDEV-12837: WSREP: BF lock wait long. Test requires both fixes to pass.
- Loading branch information
Jan Lindström
committed
Dec 7, 2017
1 parent
da3a3a6
commit ba576c5
Showing
3 changed files
with
96 additions
and
12 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
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() | ||
BEGIN | ||
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION rollback; | ||
WHILE 1 DO | ||
start transaction; | ||
update t1 set b=connection_id() where a=1; | ||
commit; | ||
END WHILE; | ||
END| | ||
connect node_1_p1, 127.0.0.1, root, , test, $NODE_MYPORT_1; | ||
call p1; | ||
connect node_1_p2, 127.0.0.1, root, , test, $NODE_MYPORT_1; | ||
call p1; | ||
connect node_2_p1, 127.0.0.1, root, , test, $NODE_MYPORT_2; | ||
call p1; | ||
connect node_2_p2, 127.0.0.1, root, , test, $NODE_MYPORT_2; | ||
call p1; | ||
connection default; | ||
checking error log for 'BF lock wait long' message for 10 times every 10 seconds ... | ||
drop table t1; | ||
drop procedure p1; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
--source include/galera_cluster.inc | ||
--source include/big_test.inc | ||
|
||
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() | ||
BEGIN | ||
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION rollback; | ||
WHILE 1 DO | ||
start transaction; | ||
update t1 set b=connection_id() where a=1; | ||
commit; | ||
END WHILE; | ||
END| | ||
|
||
|
||
DELIMITER ;| | ||
|
||
--connect node_1_p1, 127.0.0.1, root, , test, $NODE_MYPORT_1 | ||
send call p1; | ||
--connect node_1_p2, 127.0.0.1, root, , test, $NODE_MYPORT_1 | ||
send call p1; | ||
--connect node_2_p1, 127.0.0.1, root, , test, $NODE_MYPORT_2 | ||
send call p1; | ||
--connect node_2_p2, 127.0.0.1, root, , test, $NODE_MYPORT_2 | ||
send call p1; | ||
|
||
connection default; | ||
let $counter=10; | ||
let $sleep_period=10; | ||
|
||
echo checking error log for 'BF lock wait long' message for $counter times every $sleep_period seconds ...; | ||
while($counter > 0) | ||
{ | ||
--disable_query_log | ||
--disable_result_log | ||
eval do sleep($sleep_period); | ||
--enable_query_log | ||
--enable_result_log | ||
|
||
# use error 0,1 instead if want test to continue | ||
--error 1 | ||
exec grep 'BF lock wait long' $MYSQLTEST_VARDIR/log/mysqld.*.err; | ||
dec $counter; | ||
} | ||
|
||
drop table t1; | ||
drop procedure p1; | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters