mirror of
https://github.com/MariaDB/server.git
synced 2025-07-27 18:02:13 +03:00
cleanup: kill test
split it into debug and non-debug tests
This commit is contained in:
@ -1,225 +1,7 @@
|
||||
set local sql_mode="";
|
||||
set global sql_mode="";
|
||||
SET DEBUG_SYNC = 'RESET';
|
||||
DROP TABLE IF EXISTS t1, t2, t3;
|
||||
DROP FUNCTION IF EXISTS MY_KILL;
|
||||
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';
|
||||
connect con1, localhost, root;
|
||||
connect con2, localhost, root;
|
||||
#
|
||||
# Additional test for WL#3726 "DDL locking for all metadata objects"
|
||||
# Check that DDL and DML statements waiting for metadata locks can
|
||||
@ -227,7 +9,6 @@ SET DEBUG_SYNC = 'RESET';
|
||||
# can be tricky to write test case for some of them (e.g. REPAIR or
|
||||
# ALTER and other statements under LOCK TABLES).
|
||||
#
|
||||
drop tables if exists t1, t2, t3;
|
||||
create table t1 (i int primary key);
|
||||
connect blocker, localhost, root, , ;
|
||||
connect dml, localhost, root, , ;
|
||||
@ -380,9 +161,9 @@ connection default;
|
||||
ERROR 70100: Query execution was interrupted
|
||||
disconnect con5;
|
||||
DROP USER u1@localhost;
|
||||
SET DEBUG_SYNC = 'RESET';
|
||||
DROP FUNCTION MY_KILL;
|
||||
set global sql_mode=default;
|
||||
disconnect con1;
|
||||
disconnect con2;
|
||||
#
|
||||
# MDEV-17998
|
||||
# Deadlock and eventual Assertion `!table->pos_in_locked_tables' failed
|
||||
|
@ -8,294 +8,11 @@
|
||||
#
|
||||
|
||||
-- source include/not_embedded.inc
|
||||
-- source include/have_debug_sync.inc
|
||||
set local sql_mode="";
|
||||
set global sql_mode="";
|
||||
|
||||
--disable_warnings
|
||||
SET DEBUG_SYNC = 'RESET';
|
||||
DROP TABLE IF EXISTS t1, t2, t3;
|
||||
DROP FUNCTION IF EXISTS MY_KILL;
|
||||
--enable_warnings
|
||||
|
||||
delimiter |;
|
||||
# Helper function used to repeatedly kill a session.
|
||||
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|
|
||||
delimiter ;|
|
||||
|
||||
connect (con1, localhost, root,,);
|
||||
connect (con2, localhost, root,,);
|
||||
|
||||
# Save id of con1
|
||||
connection con1;
|
||||
--disable_reconnect
|
||||
let $ID= `SELECT @id := CONNECTION_ID()`;
|
||||
connection con2;
|
||||
let $ignore= `SELECT @id := $ID`;
|
||||
connection con1;
|
||||
# Signal when this connection is terminating.
|
||||
SET DEBUG_SYNC= 'thread_end SIGNAL con1_end';
|
||||
# See if we can kill read().
|
||||
# Run into read() immediately after hitting 'before_do_command_net_read'.
|
||||
SET DEBUG_SYNC= 'before_do_command_net_read SIGNAL con1_read';
|
||||
|
||||
# Kill con1
|
||||
connection con2;
|
||||
SET DEBUG_SYNC='now WAIT_FOR con1_read';
|
||||
# At this point we have no way to figure out, when con1 is blocked in
|
||||
# reading from the socket. Sending KILL to early would not terminate
|
||||
# con1. So we repeat KILL until con1 terminates.
|
||||
let $wait_condition= SELECT MY_KILL(@id);
|
||||
--source include/wait_condition.inc
|
||||
# If KILL missed the read(), sync point wait will time out.
|
||||
SET DEBUG_SYNC= 'now WAIT_FOR con1_end';
|
||||
SET DEBUG_SYNC = 'RESET';
|
||||
|
||||
connection con1;
|
||||
--error 1053,2006,2013,5014
|
||||
SELECT 1;
|
||||
|
||||
--enable_reconnect
|
||||
# this should work, and we should have a new connection_id()
|
||||
SELECT 1;
|
||||
let $ignore= `SELECT @id := $ID`;
|
||||
SELECT @id != CONNECTION_ID();
|
||||
|
||||
#make sure the server is still alive
|
||||
connection con2;
|
||||
SELECT 4;
|
||||
connection default;
|
||||
|
||||
--error ER_SUBQUERIES_NOT_SUPPORTED
|
||||
KILL (SELECT COUNT(*) FROM mysql.user);
|
||||
|
||||
connection con1;
|
||||
let $ID= `SELECT @id := CONNECTION_ID()`;
|
||||
connection con2;
|
||||
let $ignore= `SELECT @id := $ID`;
|
||||
connection con1;
|
||||
disable_reconnect;
|
||||
# Signal when this connection is terminating.
|
||||
SET DEBUG_SYNC= 'thread_end SIGNAL con1_end';
|
||||
# See if we can kill the sync point itself.
|
||||
# Wait in 'before_do_command_net_read' until killed.
|
||||
# It doesn't wait for a signal 'kill' but for to be killed.
|
||||
# The signal name doesn't matter here.
|
||||
SET DEBUG_SYNC= 'before_do_command_net_read SIGNAL con1_read WAIT_FOR kill';
|
||||
connection con2;
|
||||
SET DEBUG_SYNC= 'now WAIT_FOR con1_read';
|
||||
# Repeat KILL until con1 terminates.
|
||||
let $wait_condition= SELECT MY_KILL(@id);
|
||||
--source include/wait_condition.inc
|
||||
SET DEBUG_SYNC= 'now WAIT_FOR con1_end';
|
||||
SET DEBUG_SYNC = 'RESET';
|
||||
|
||||
connection con1;
|
||||
--error 1053,2006,2013,5014
|
||||
SELECT 1;
|
||||
enable_reconnect;
|
||||
SELECT 1;
|
||||
let $ignore= `SELECT @id := $ID`;
|
||||
SELECT @id != CONNECTION_ID();
|
||||
connection con2;
|
||||
SELECT 4;
|
||||
connection default;
|
||||
|
||||
#
|
||||
# BUG#14851: killing long running subquery processed via a temporary table.
|
||||
#
|
||||
|
||||
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;
|
||||
let $ID= `SELECT @id := CONNECTION_ID()`;
|
||||
connection con2;
|
||||
let $ignore= `SELECT @id := $ID`;
|
||||
|
||||
connection con1;
|
||||
SET DEBUG_SYNC= 'thread_end SIGNAL con1_end';
|
||||
SET DEBUG_SYNC= 'before_acos_function SIGNAL in_sync';
|
||||
# This is a very long running query. If this test start failing,
|
||||
# it may be necessary to change to an even longer query.
|
||||
send 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;
|
||||
--error 1317,1053,2006,2013,5014
|
||||
reap;
|
||||
SELECT 1;
|
||||
|
||||
connection default;
|
||||
SET DEBUG_SYNC = 'RESET';
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
#
|
||||
# Test of blocking of sending ERROR after OK or EOF
|
||||
#
|
||||
connection con1;
|
||||
let $ID= `SELECT @id := CONNECTION_ID()`;
|
||||
connection con2;
|
||||
let $ignore= `SELECT @id := $ID`;
|
||||
connection con1;
|
||||
SET DEBUG_SYNC= 'before_acos_function SIGNAL in_sync WAIT_FOR kill';
|
||||
send SELECT ACOS(0);
|
||||
connection con2;
|
||||
SET DEBUG_SYNC= 'now WAIT_FOR in_sync';
|
||||
KILL QUERY @id;
|
||||
connection con1;
|
||||
reap;
|
||||
SELECT 1;
|
||||
SELECT @id = CONNECTION_ID();
|
||||
connection default;
|
||||
SET DEBUG_SYNC = 'RESET';
|
||||
|
||||
#
|
||||
# Bug#27563: Stored functions and triggers wasn't throwing an error when killed.
|
||||
#
|
||||
CREATE TABLE t1 (f1 INT);
|
||||
delimiter |;
|
||||
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|
|
||||
delimiter ;|
|
||||
# Test stored functions
|
||||
# Test INSERT
|
||||
connection con1;
|
||||
let $ID= `SELECT @id := CONNECTION_ID()`;
|
||||
connection con2;
|
||||
let $ignore= `SELECT @id := $ID`;
|
||||
connection con1;
|
||||
send INSERT INTO t1 VALUES (bug27563());
|
||||
connection con2;
|
||||
SET DEBUG_SYNC= 'now WAIT_FOR in_sync';
|
||||
KILL QUERY @id;
|
||||
connection con1;
|
||||
--error 1317
|
||||
reap;
|
||||
SELECT * FROM t1;
|
||||
connection default;
|
||||
SET DEBUG_SYNC = 'RESET';
|
||||
|
||||
# Test UPDATE
|
||||
INSERT INTO t1 VALUES(0);
|
||||
connection con1;
|
||||
send UPDATE t1 SET f1= bug27563();
|
||||
connection con2;
|
||||
SET DEBUG_SYNC= 'now WAIT_FOR in_sync';
|
||||
KILL QUERY @id;
|
||||
connection con1;
|
||||
--error 1317
|
||||
reap;
|
||||
SELECT * FROM t1;
|
||||
connection default;
|
||||
SET DEBUG_SYNC = 'RESET';
|
||||
|
||||
# Test DELETE
|
||||
INSERT INTO t1 VALUES(1);
|
||||
connection con1;
|
||||
send DELETE FROM t1 WHERE bug27563() IS NULL;
|
||||
connection con2;
|
||||
SET DEBUG_SYNC= 'now WAIT_FOR in_sync';
|
||||
KILL QUERY @id;
|
||||
connection con1;
|
||||
--error 1317
|
||||
reap;
|
||||
SELECT * FROM t1;
|
||||
connection default;
|
||||
SET DEBUG_SYNC = 'RESET';
|
||||
|
||||
# Test SELECT
|
||||
connection con1;
|
||||
send SELECT * FROM t1 WHERE f1= bug27563();
|
||||
connection con2;
|
||||
SET DEBUG_SYNC= 'now WAIT_FOR in_sync';
|
||||
KILL QUERY @id;
|
||||
connection con1;
|
||||
--error 1317
|
||||
reap;
|
||||
SELECT * FROM t1;
|
||||
connection default;
|
||||
SET DEBUG_SYNC = 'RESET';
|
||||
DROP FUNCTION bug27563;
|
||||
|
||||
# Test TRIGGERS
|
||||
CREATE TABLE t2 (f2 INT);
|
||||
delimiter |;
|
||||
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|
|
||||
delimiter ;|
|
||||
connection con1;
|
||||
send INSERT INTO t1 VALUES(2),(3);
|
||||
connection con2;
|
||||
SET DEBUG_SYNC= 'now WAIT_FOR in_sync';
|
||||
KILL QUERY @id;
|
||||
connection con1;
|
||||
--error 1317
|
||||
reap;
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t2;
|
||||
connection default;
|
||||
SET DEBUG_SYNC = 'RESET';
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
--echo #
|
||||
--echo # Bug#19723: kill of active connection yields different error code
|
||||
--echo # depending on platform.
|
||||
--echo #
|
||||
|
||||
--connection con1
|
||||
let $ID= `SELECT @id := CONNECTION_ID()`;
|
||||
SET DEBUG_SYNC= 'thread_end SIGNAL con1_end';
|
||||
--disable_reconnect
|
||||
--error ER_CONNECTION_KILLED
|
||||
KILL @id;
|
||||
|
||||
connection con2;
|
||||
SET DEBUG_SYNC= 'now WAIT_FOR con1_end';
|
||||
connection con1;
|
||||
--echo # ER_SERVER_SHUTDOWN, CR_SERVER_GONE_ERROR, CR_SERVER_LOST,
|
||||
--echo # depending on the timing of close of the connection socket
|
||||
--error 1053,2006,2013,5014
|
||||
SELECT 1;
|
||||
--enable_reconnect
|
||||
SELECT 1;
|
||||
let $ignore= `SELECT @id := $ID`;
|
||||
SELECT @id != CONNECTION_ID();
|
||||
connection default;
|
||||
SET DEBUG_SYNC = 'RESET';
|
||||
connect con1, localhost, root;
|
||||
connect con2, localhost, root;
|
||||
|
||||
--echo #
|
||||
--echo # Additional test for WL#3726 "DDL locking for all metadata objects"
|
||||
@ -304,9 +21,6 @@ SET DEBUG_SYNC = 'RESET';
|
||||
--echo # can be tricky to write test case for some of them (e.g. REPAIR or
|
||||
--echo # ALTER and other statements under LOCK TABLES).
|
||||
--echo #
|
||||
--disable_warnings
|
||||
drop tables if exists t1, t2, t3;
|
||||
--enable_warnings
|
||||
|
||||
create table t1 (i int primary key);
|
||||
connect (blocker, localhost, root, , );
|
||||
@ -570,11 +284,9 @@ reap;
|
||||
disconnect con5;
|
||||
DROP USER u1@localhost;
|
||||
|
||||
|
||||
SET DEBUG_SYNC = 'RESET';
|
||||
DROP FUNCTION MY_KILL;
|
||||
|
||||
set global sql_mode=default;
|
||||
disconnect con1;
|
||||
disconnect con2;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-17998
|
||||
|
223
mysql-test/main/kill_debug.result
Normal file
223
mysql-test/main/kill_debug.result
Normal file
@ -0,0 +1,223 @@
|
||||
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;
|
298
mysql-test/main/kill_debug.test
Normal file
298
mysql-test/main/kill_debug.test
Normal file
@ -0,0 +1,298 @@
|
||||
#
|
||||
# Test KILL and KILL QUERY statements.
|
||||
#
|
||||
# Killing a connection in an embedded server does not work like in a normal
|
||||
# server, if it is waiting for a new statement. In an embedded server, the
|
||||
# connection does not read() from a socket, but returns control to the
|
||||
# application. 'mysqltest' does not handle the kill request.
|
||||
#
|
||||
|
||||
-- source include/not_embedded.inc
|
||||
-- source include/have_debug_sync.inc
|
||||
set local sql_mode="";
|
||||
set global sql_mode="";
|
||||
|
||||
delimiter |;
|
||||
# Helper function used to repeatedly kill a session.
|
||||
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|
|
||||
delimiter ;|
|
||||
|
||||
connect con1, localhost, root;
|
||||
connect con2, localhost, root;
|
||||
|
||||
# Save id of con1
|
||||
connection con1;
|
||||
--disable_reconnect
|
||||
let $ID= `SELECT @id := CONNECTION_ID()`;
|
||||
connection con2;
|
||||
let $ignore= `SELECT @id := $ID`;
|
||||
connection con1;
|
||||
# Signal when this connection is terminating.
|
||||
SET DEBUG_SYNC= 'thread_end SIGNAL con1_end';
|
||||
# See if we can kill read().
|
||||
# Run into read() immediately after hitting 'before_do_command_net_read'.
|
||||
SET DEBUG_SYNC= 'before_do_command_net_read SIGNAL con1_read';
|
||||
|
||||
# Kill con1
|
||||
connection con2;
|
||||
SET DEBUG_SYNC='now WAIT_FOR con1_read';
|
||||
# At this point we have no way to figure out, when con1 is blocked in
|
||||
# reading from the socket. Sending KILL to early would not terminate
|
||||
# con1. So we repeat KILL until con1 terminates.
|
||||
let $wait_condition= SELECT MY_KILL(@id);
|
||||
--source include/wait_condition.inc
|
||||
# If KILL missed the read(), sync point wait will time out.
|
||||
SET DEBUG_SYNC= 'now WAIT_FOR con1_end';
|
||||
SET DEBUG_SYNC = 'RESET';
|
||||
|
||||
connection con1;
|
||||
--error 1053,2006,2013,5014
|
||||
SELECT 1;
|
||||
|
||||
--enable_reconnect
|
||||
# this should work, and we should have a new connection_id()
|
||||
SELECT 1;
|
||||
let $ignore= `SELECT @id := $ID`;
|
||||
SELECT @id != CONNECTION_ID();
|
||||
|
||||
#make sure the server is still alive
|
||||
connection con2;
|
||||
SELECT 4;
|
||||
connection default;
|
||||
|
||||
--error ER_SUBQUERIES_NOT_SUPPORTED
|
||||
KILL (SELECT COUNT(*) FROM mysql.user);
|
||||
|
||||
connection con1;
|
||||
let $ID= `SELECT @id := CONNECTION_ID()`;
|
||||
connection con2;
|
||||
let $ignore= `SELECT @id := $ID`;
|
||||
connection con1;
|
||||
disable_reconnect;
|
||||
# Signal when this connection is terminating.
|
||||
SET DEBUG_SYNC= 'thread_end SIGNAL con1_end';
|
||||
# See if we can kill the sync point itself.
|
||||
# Wait in 'before_do_command_net_read' until killed.
|
||||
# It doesn't wait for a signal 'kill' but for to be killed.
|
||||
# The signal name doesn't matter here.
|
||||
SET DEBUG_SYNC= 'before_do_command_net_read SIGNAL con1_read WAIT_FOR kill';
|
||||
connection con2;
|
||||
SET DEBUG_SYNC= 'now WAIT_FOR con1_read';
|
||||
# Repeat KILL until con1 terminates.
|
||||
let $wait_condition= SELECT MY_KILL(@id);
|
||||
--source include/wait_condition.inc
|
||||
SET DEBUG_SYNC= 'now WAIT_FOR con1_end';
|
||||
SET DEBUG_SYNC = 'RESET';
|
||||
|
||||
connection con1;
|
||||
--error 1053,2006,2013,5014
|
||||
SELECT 1;
|
||||
enable_reconnect;
|
||||
SELECT 1;
|
||||
let $ignore= `SELECT @id := $ID`;
|
||||
SELECT @id != CONNECTION_ID();
|
||||
connection con2;
|
||||
SELECT 4;
|
||||
connection default;
|
||||
|
||||
#
|
||||
# BUG#14851: killing long running subquery processed via a temporary table.
|
||||
#
|
||||
|
||||
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;
|
||||
let $ID= `SELECT @id := CONNECTION_ID()`;
|
||||
connection con2;
|
||||
let $ignore= `SELECT @id := $ID`;
|
||||
|
||||
connection con1;
|
||||
SET DEBUG_SYNC= 'thread_end SIGNAL con1_end';
|
||||
SET DEBUG_SYNC= 'before_acos_function SIGNAL in_sync';
|
||||
# This is a very long running query. If this test start failing,
|
||||
# it may be necessary to change to an even longer query.
|
||||
send 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;
|
||||
--error 1317,1053,2006,2013,5014
|
||||
reap;
|
||||
SELECT 1;
|
||||
|
||||
connection default;
|
||||
SET DEBUG_SYNC = 'RESET';
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
#
|
||||
# Test of blocking of sending ERROR after OK or EOF
|
||||
#
|
||||
connection con1;
|
||||
let $ID= `SELECT @id := CONNECTION_ID()`;
|
||||
connection con2;
|
||||
let $ignore= `SELECT @id := $ID`;
|
||||
connection con1;
|
||||
SET DEBUG_SYNC= 'before_acos_function SIGNAL in_sync WAIT_FOR kill';
|
||||
send SELECT ACOS(0);
|
||||
connection con2;
|
||||
SET DEBUG_SYNC= 'now WAIT_FOR in_sync';
|
||||
KILL QUERY @id;
|
||||
connection con1;
|
||||
reap;
|
||||
SELECT 1;
|
||||
SELECT @id = CONNECTION_ID();
|
||||
connection default;
|
||||
SET DEBUG_SYNC = 'RESET';
|
||||
|
||||
#
|
||||
# Bug#27563: Stored functions and triggers wasn't throwing an error when killed.
|
||||
#
|
||||
CREATE TABLE t1 (f1 INT);
|
||||
delimiter |;
|
||||
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|
|
||||
delimiter ;|
|
||||
# Test stored functions
|
||||
# Test INSERT
|
||||
connection con1;
|
||||
let $ID= `SELECT @id := CONNECTION_ID()`;
|
||||
connection con2;
|
||||
let $ignore= `SELECT @id := $ID`;
|
||||
connection con1;
|
||||
send INSERT INTO t1 VALUES (bug27563());
|
||||
connection con2;
|
||||
SET DEBUG_SYNC= 'now WAIT_FOR in_sync';
|
||||
KILL QUERY @id;
|
||||
connection con1;
|
||||
--error 1317
|
||||
reap;
|
||||
SELECT * FROM t1;
|
||||
connection default;
|
||||
SET DEBUG_SYNC = 'RESET';
|
||||
|
||||
# Test UPDATE
|
||||
INSERT INTO t1 VALUES(0);
|
||||
connection con1;
|
||||
send UPDATE t1 SET f1= bug27563();
|
||||
connection con2;
|
||||
SET DEBUG_SYNC= 'now WAIT_FOR in_sync';
|
||||
KILL QUERY @id;
|
||||
connection con1;
|
||||
--error 1317
|
||||
reap;
|
||||
SELECT * FROM t1;
|
||||
connection default;
|
||||
SET DEBUG_SYNC = 'RESET';
|
||||
|
||||
# Test DELETE
|
||||
INSERT INTO t1 VALUES(1);
|
||||
connection con1;
|
||||
send DELETE FROM t1 WHERE bug27563() IS NULL;
|
||||
connection con2;
|
||||
SET DEBUG_SYNC= 'now WAIT_FOR in_sync';
|
||||
KILL QUERY @id;
|
||||
connection con1;
|
||||
--error 1317
|
||||
reap;
|
||||
SELECT * FROM t1;
|
||||
connection default;
|
||||
SET DEBUG_SYNC = 'RESET';
|
||||
|
||||
# Test SELECT
|
||||
connection con1;
|
||||
send SELECT * FROM t1 WHERE f1= bug27563();
|
||||
connection con2;
|
||||
SET DEBUG_SYNC= 'now WAIT_FOR in_sync';
|
||||
KILL QUERY @id;
|
||||
connection con1;
|
||||
--error 1317
|
||||
reap;
|
||||
SELECT * FROM t1;
|
||||
connection default;
|
||||
SET DEBUG_SYNC = 'RESET';
|
||||
DROP FUNCTION bug27563;
|
||||
|
||||
# Test TRIGGERS
|
||||
CREATE TABLE t2 (f2 INT);
|
||||
delimiter |;
|
||||
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|
|
||||
delimiter ;|
|
||||
connection con1;
|
||||
send INSERT INTO t1 VALUES(2),(3);
|
||||
connection con2;
|
||||
SET DEBUG_SYNC= 'now WAIT_FOR in_sync';
|
||||
KILL QUERY @id;
|
||||
connection con1;
|
||||
--error 1317
|
||||
reap;
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t2;
|
||||
connection default;
|
||||
SET DEBUG_SYNC = 'RESET';
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
--echo #
|
||||
--echo # Bug#19723: kill of active connection yields different error code
|
||||
--echo # depending on platform.
|
||||
--echo #
|
||||
|
||||
--connection con1
|
||||
let $ID= `SELECT @id := CONNECTION_ID()`;
|
||||
SET DEBUG_SYNC= 'thread_end SIGNAL con1_end';
|
||||
--disable_reconnect
|
||||
--error ER_CONNECTION_KILLED
|
||||
KILL @id;
|
||||
|
||||
connection con2;
|
||||
SET DEBUG_SYNC= 'now WAIT_FOR con1_end';
|
||||
connection con1;
|
||||
--echo # ER_SERVER_SHUTDOWN, CR_SERVER_GONE_ERROR, CR_SERVER_LOST,
|
||||
--echo # depending on the timing of close of the connection socket
|
||||
--error 1053,2006,2013,5014
|
||||
SELECT 1;
|
||||
--enable_reconnect
|
||||
SELECT 1;
|
||||
let $ignore= `SELECT @id := $ID`;
|
||||
SELECT @id != CONNECTION_ID();
|
||||
connection default;
|
||||
|
||||
SET DEBUG_SYNC = 'RESET';
|
||||
DROP FUNCTION MY_KILL;
|
||||
|
||||
set global sql_mode=default;
|
||||
disconnect con1;
|
||||
disconnect con2;
|
Reference in New Issue
Block a user