mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
46b79b8cd1
debug-only issue. the test was doing set debug_sync='now SIGNAL go3'; ... set debug_sync='reset'; which translated into add "go3" to the hash of active signals pthread_broadcast to wake up waiting threads ... clear the hash of active signals as a result a waiting thread was awoken, but the hash was emptied before the thread checked if its signal was in the hash. so the thread didn't find its signal and went back to sleep. let's wait until the awoken thread has completely finished disconnecting and was added to the thread cache.
240 lines
6 KiB
Text
240 lines
6 KiB
Text
set local sql_mode="";
|
|
set global sql_mode="";
|
|
CREATE FUNCTION MY_KILL(tid INT) RETURNS INT
|
|
BEGIN
|
|
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN END;
|
|
KILL tid;
|
|
RETURN (SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE ID = tid);
|
|
END|
|
|
connect con1, localhost, root;
|
|
connect con2, localhost, root;
|
|
connection con1;
|
|
connection con2;
|
|
connection con1;
|
|
SET DEBUG_SYNC= 'thread_end SIGNAL con1_end';
|
|
SET DEBUG_SYNC= 'before_do_command_net_read SIGNAL con1_read';
|
|
connection con2;
|
|
SET DEBUG_SYNC='now WAIT_FOR con1_read';
|
|
SET DEBUG_SYNC= 'now WAIT_FOR con1_end';
|
|
SET DEBUG_SYNC = 'RESET';
|
|
connection con1;
|
|
SELECT 1;
|
|
Got one of the listed errors
|
|
SELECT 1;
|
|
1
|
|
1
|
|
SELECT @id != CONNECTION_ID();
|
|
@id != CONNECTION_ID()
|
|
1
|
|
connection con2;
|
|
SELECT 4;
|
|
4
|
|
4
|
|
connection default;
|
|
KILL (SELECT COUNT(*) FROM mysql.user);
|
|
ERROR 42000: KILL does not support subqueries or stored functions
|
|
connection con1;
|
|
connection con2;
|
|
connection con1;
|
|
SET DEBUG_SYNC= 'thread_end SIGNAL con1_end';
|
|
SET DEBUG_SYNC= 'before_do_command_net_read SIGNAL con1_read WAIT_FOR kill';
|
|
connection con2;
|
|
SET DEBUG_SYNC= 'now WAIT_FOR con1_read';
|
|
SET DEBUG_SYNC= 'now WAIT_FOR con1_end';
|
|
SET DEBUG_SYNC = 'RESET';
|
|
connection con1;
|
|
SELECT 1;
|
|
Got one of the listed errors
|
|
SELECT 1;
|
|
1
|
|
1
|
|
SELECT @id != CONNECTION_ID();
|
|
@id != CONNECTION_ID()
|
|
1
|
|
connection con2;
|
|
SELECT 4;
|
|
4
|
|
4
|
|
connection default;
|
|
CREATE TABLE t1 (id INT PRIMARY KEY AUTO_INCREMENT);
|
|
CREATE TABLE t2 (id INT UNSIGNED NOT NULL);
|
|
INSERT INTO t1 VALUES
|
|
(0),(0),(0),(0),(0),(0),(0),(0), (0),(0),(0),(0),(0),(0),(0),(0),
|
|
(0),(0),(0),(0),(0),(0),(0),(0), (0),(0),(0),(0),(0),(0),(0),(0),
|
|
(0),(0),(0),(0),(0),(0),(0),(0), (0),(0),(0),(0),(0),(0),(0),(0),
|
|
(0),(0),(0),(0),(0),(0),(0),(0), (0),(0),(0),(0),(0),(0),(0),(0);
|
|
INSERT t1 SELECT 0 FROM t1 AS a1, t1 AS a2 LIMIT 4032;
|
|
INSERT INTO t2 SELECT id FROM t1;
|
|
connection con1;
|
|
connection con2;
|
|
connection con1;
|
|
SET DEBUG_SYNC= 'thread_end SIGNAL con1_end';
|
|
SET DEBUG_SYNC= 'before_acos_function SIGNAL in_sync';
|
|
SELECT id FROM t1 WHERE id IN
|
|
(SELECT DISTINCT a.id FROM t2 a, t2 b, t2 c, t2 d
|
|
GROUP BY ACOS(1/a.id), b.id, c.id, d.id
|
|
HAVING a.id BETWEEN 10 AND 20);
|
|
connection con2;
|
|
SET DEBUG_SYNC= 'now WAIT_FOR in_sync';
|
|
KILL @id;
|
|
SET DEBUG_SYNC= 'now WAIT_FOR con1_end';
|
|
connection con1;
|
|
Got one of the listed errors
|
|
SELECT 1;
|
|
1
|
|
1
|
|
connection default;
|
|
SET DEBUG_SYNC = 'RESET';
|
|
DROP TABLE t1, t2;
|
|
connection con1;
|
|
connection con2;
|
|
connection con1;
|
|
SET DEBUG_SYNC= 'before_acos_function SIGNAL in_sync WAIT_FOR kill';
|
|
SELECT ACOS(0);
|
|
connection con2;
|
|
SET DEBUG_SYNC= 'now WAIT_FOR in_sync';
|
|
KILL QUERY @id;
|
|
connection con1;
|
|
ACOS(0)
|
|
1.5707963267948966
|
|
SELECT 1;
|
|
1
|
|
1
|
|
SELECT @id = CONNECTION_ID();
|
|
@id = CONNECTION_ID()
|
|
1
|
|
connection default;
|
|
SET DEBUG_SYNC = 'RESET';
|
|
CREATE TABLE t1 (f1 INT);
|
|
CREATE FUNCTION bug27563() RETURNS INT(11)
|
|
DETERMINISTIC
|
|
BEGIN
|
|
DECLARE CONTINUE HANDLER FOR SQLSTATE '70100' SET @a:= 'killed';
|
|
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET @a:= 'exception';
|
|
SET DEBUG_SYNC= 'now SIGNAL in_sync WAIT_FOR kill';
|
|
RETURN 1;
|
|
END|
|
|
connection con1;
|
|
connection con2;
|
|
connection con1;
|
|
INSERT INTO t1 VALUES (bug27563());
|
|
connection con2;
|
|
SET DEBUG_SYNC= 'now WAIT_FOR in_sync';
|
|
KILL QUERY @id;
|
|
connection con1;
|
|
ERROR 70100: Query execution was interrupted
|
|
SELECT * FROM t1;
|
|
f1
|
|
connection default;
|
|
SET DEBUG_SYNC = 'RESET';
|
|
INSERT INTO t1 VALUES(0);
|
|
connection con1;
|
|
UPDATE t1 SET f1= bug27563();
|
|
connection con2;
|
|
SET DEBUG_SYNC= 'now WAIT_FOR in_sync';
|
|
KILL QUERY @id;
|
|
connection con1;
|
|
ERROR 70100: Query execution was interrupted
|
|
SELECT * FROM t1;
|
|
f1
|
|
0
|
|
connection default;
|
|
SET DEBUG_SYNC = 'RESET';
|
|
INSERT INTO t1 VALUES(1);
|
|
connection con1;
|
|
DELETE FROM t1 WHERE bug27563() IS NULL;
|
|
connection con2;
|
|
SET DEBUG_SYNC= 'now WAIT_FOR in_sync';
|
|
KILL QUERY @id;
|
|
connection con1;
|
|
ERROR 70100: Query execution was interrupted
|
|
SELECT * FROM t1;
|
|
f1
|
|
0
|
|
1
|
|
connection default;
|
|
SET DEBUG_SYNC = 'RESET';
|
|
connection con1;
|
|
SELECT * FROM t1 WHERE f1= bug27563();
|
|
connection con2;
|
|
SET DEBUG_SYNC= 'now WAIT_FOR in_sync';
|
|
KILL QUERY @id;
|
|
connection con1;
|
|
ERROR 70100: Query execution was interrupted
|
|
SELECT * FROM t1;
|
|
f1
|
|
0
|
|
1
|
|
connection default;
|
|
SET DEBUG_SYNC = 'RESET';
|
|
DROP FUNCTION bug27563;
|
|
CREATE TABLE t2 (f2 INT);
|
|
CREATE TRIGGER trg27563 BEFORE INSERT ON t1 FOR EACH ROW
|
|
BEGIN
|
|
DECLARE CONTINUE HANDLER FOR SQLSTATE '70100' SET @a:= 'killed';
|
|
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET @a:= 'exception';
|
|
INSERT INTO t2 VALUES(0);
|
|
SET DEBUG_SYNC= 'now SIGNAL in_sync WAIT_FOR kill';
|
|
INSERT INTO t2 VALUES(1);
|
|
END|
|
|
connection con1;
|
|
INSERT INTO t1 VALUES(2),(3);
|
|
connection con2;
|
|
SET DEBUG_SYNC= 'now WAIT_FOR in_sync';
|
|
KILL QUERY @id;
|
|
connection con1;
|
|
ERROR 70100: Query execution was interrupted
|
|
SELECT * FROM t1;
|
|
f1
|
|
0
|
|
1
|
|
SELECT * FROM t2;
|
|
f2
|
|
0
|
|
connection default;
|
|
SET DEBUG_SYNC = 'RESET';
|
|
DROP TABLE t1, t2;
|
|
#
|
|
# Bug#19723: kill of active connection yields different error code
|
|
# depending on platform.
|
|
#
|
|
connection con1;
|
|
SET DEBUG_SYNC= 'thread_end SIGNAL con1_end';
|
|
KILL @id;
|
|
ERROR 70100: Connection was killed
|
|
connection con2;
|
|
SET DEBUG_SYNC= 'now WAIT_FOR con1_end';
|
|
connection con1;
|
|
# ER_SERVER_SHUTDOWN, CR_SERVER_GONE_ERROR, CR_SERVER_LOST,
|
|
# depending on the timing of close of the connection socket
|
|
SELECT 1;
|
|
Got one of the listed errors
|
|
SELECT 1;
|
|
1
|
|
1
|
|
SELECT @id != CONNECTION_ID();
|
|
@id != CONNECTION_ID()
|
|
1
|
|
connection default;
|
|
SET DEBUG_SYNC = 'RESET';
|
|
DROP FUNCTION MY_KILL;
|
|
set global sql_mode=default;
|
|
disconnect con1;
|
|
disconnect con2;
|
|
#
|
|
# MDEV-29368 Assertion `trx->mysql_thd == thd' failed in innobase_kill_query from process_timers/timer_handler and use-after-poison in innobase_kill_query
|
|
#
|
|
connect foo,localhost,root;
|
|
create table t1 (a int) engine=innodb;
|
|
insert t1 values (1);
|
|
set debug_sync='THD_cleanup_after_set_killed SIGNAL go0 WAIT_FOR go1';
|
|
set debug_sync='innobase_connection_closed SIGNAL go2 WAIT_FOR go3';
|
|
disconnect foo;
|
|
connection default;
|
|
set debug_sync='now WAIT_FOR go0';
|
|
set debug_sync='found_killee SIGNAL go1 WAIT_FOR go2';
|
|
kill $id;
|
|
select variable_value into @threads_cached from information_schema.global_status where variable_name='threads_cached';
|
|
set debug_sync='now SIGNAL go3';
|
|
drop table t1;
|
|
set debug_sync='reset';
|