summaryrefslogtreecommitdiff
path: root/mysql-test/t/kill.test
diff options
context:
space:
mode:
Diffstat (limited to 'mysql-test/t/kill.test')
-rw-r--r--mysql-test/t/kill.test644
1 files changed, 0 insertions, 644 deletions
diff --git a/mysql-test/t/kill.test b/mysql-test/t/kill.test
deleted file mode 100644
index b6000ffced1..00000000000
--- a/mysql-test/t/kill.test
+++ /dev/null
@@ -1,644 +0,0 @@
-#
-# 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
--- source include/not_threadpool.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
-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
-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
-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;
-
-#
-# Bug#28598: mysqld crash when killing a long-running explain query.
-#
-connection con1;
-let $ID= `SELECT @id := CONNECTION_ID()`;
-connection con2;
-let $ignore= `SELECT @id := $ID`;
-connection con1;
---disable_query_log
-let $tab_count= 40;
-
---disable_query_log
-begin;
-let $i= $tab_count;
-while ($i)
-{
- eval CREATE TABLE t$i (a$i INT, KEY(a$i));
- eval INSERT INTO t$i VALUES (1),(2),(3),(4),(5),(6),(7);
- dec $i ;
-}
-
-commit;
---enable_query_log
-
-SET SESSION optimizer_search_depth=0;
-
-let $i=$tab_count;
-while ($i)
-{
- let $a= a$i;
- let $t= t$i;
- dec $i;
- if ($i)
- {
- let $comma=,;
- let $from=$comma$t$from;
- let $where=a$i=$a $and $where;
- }
- if (!$i)
- {
- let $from=FROM $t$from;
- let $where=WHERE $where;
- }
- let $and=AND;
-}
-
---enable_query_log
-SET DEBUG_SYNC= 'before_join_optimize SIGNAL in_sync';
-eval PREPARE stmt FROM 'EXPLAIN SELECT * $from $where';
-send EXECUTE stmt;
-
-connection con2;
-SET DEBUG_SYNC= 'now WAIT_FOR in_sync';
-KILL QUERY @id;
-connection con1;
---error 1317
-reap;
---disable_query_log
-let $i= $tab_count;
-while ($i)
-{
- eval DROP TABLE t$i;
- dec $i ;
-}
---enable_query_log
-connection default;
-SET DEBUG_SYNC = 'RESET';
-
---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
-SELECT 1;
---enable_reconnect
-SELECT 1;
-let $ignore= `SELECT @id := $ID`;
-SELECT @id != CONNECTION_ID();
-connection default;
-SET DEBUG_SYNC = 'RESET';
-
---echo #
---echo # Additional test for WL#3726 "DDL locking for all metadata objects"
---echo # Check that DDL and DML statements waiting for metadata locks can
---echo # be killed. Note that we don't cover all situations here since it
---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, , );
-connect (dml, localhost, root, , );
-connect (ddl, localhost, root, , );
-
---echo # Test for RENAME TABLE
-connection blocker;
-lock table t1 read;
-connection ddl;
-let $ID= `select connection_id()`;
---send rename table t1 to t2
-connection default;
-let $wait_condition=
- select count(*) = 1 from information_schema.processlist
- where state = "Waiting for table metadata lock" and
- info = "rename table t1 to t2";
---source include/wait_condition.inc
---replace_result $ID ID
-eval kill query $ID;
-connection ddl;
---error ER_QUERY_INTERRUPTED
---reap
-
---echo # Test for DROP TABLE
---send drop table t1
-connection default;
-let $wait_condition=
- select count(*) = 1 from information_schema.processlist
- where state = "Waiting for table metadata lock" and
- info = "drop table t1";
---source include/wait_condition.inc
---replace_result $ID ID
-eval kill query $ID;
-connection ddl;
---error ER_QUERY_INTERRUPTED
---reap
-
---echo # Test for CREATE TRIGGER
---send create trigger t1_bi before insert on t1 for each row set @a:=1
-connection default;
-let $wait_condition=
- select count(*) = 1 from information_schema.processlist
- where state = "Waiting for table metadata lock" and
- info = "create trigger t1_bi before insert on t1 for each row set @a:=1";
---source include/wait_condition.inc
---replace_result $ID ID
-eval kill query $ID;
-connection ddl;
---error ER_QUERY_INTERRUPTED
---reap
-
---echo #
---echo # Tests for various kinds of ALTER TABLE
---echo #
---echo # Full-blown ALTER which should copy table
---send alter table t1 add column j int
-connection default;
-let $wait_condition=
- select count(*) = 1 from information_schema.processlist
- where state = "Waiting for table metadata lock" and
- info = "alter table t1 add column j int";
---source include/wait_condition.inc
---replace_result $ID ID
-eval kill query $ID;
-connection ddl;
---error ER_QUERY_INTERRUPTED
---reap
-
---echo # Two kinds of simple ALTER
---send alter table t1 rename to t2
-connection default;
-let $wait_condition=
- select count(*) = 1 from information_schema.processlist
- where state = "Waiting for table metadata lock" and
- info = "alter table t1 rename to t2";
---source include/wait_condition.inc
---replace_result $ID ID
-eval kill query $ID;
-connection ddl;
---error ER_QUERY_INTERRUPTED
---reap
---send alter table t1 disable keys
-connection default;
-let $wait_condition=
- select count(*) = 1 from information_schema.processlist
- where state = "Waiting for table metadata lock" and
- info = "alter table t1 disable keys";
---source include/wait_condition.inc
---replace_result $ID ID
-eval kill query $ID;
-connection ddl;
---error ER_QUERY_INTERRUPTED
---reap
---echo # Fast ALTER
---send alter table t1 alter column i set default 100
-connection default;
-let $wait_condition=
- select count(*) = 1 from information_schema.processlist
- where state = "Waiting for table metadata lock" and
- info = "alter table t1 alter column i set default 100";
---source include/wait_condition.inc
---replace_result $ID ID
-eval kill query $ID;
-connection ddl;
---error ER_QUERY_INTERRUPTED
---reap
---echo # Special case which is triggered only for MERGE tables.
-connection blocker;
-unlock tables;
-create table t2 (i int primary key) engine=merge union=(t1);
-lock tables t2 read;
-connection ddl;
---send alter table t2 alter column i set default 100
-connection default;
-let $wait_condition=
- select count(*) = 1 from information_schema.processlist
- where state = "Waiting for table metadata lock" and
- info = "alter table t2 alter column i set default 100";
---source include/wait_condition.inc
---replace_result $ID ID
-eval kill query $ID;
-connection ddl;
---error ER_QUERY_INTERRUPTED
---reap
-
---echo # Test for DML waiting for meta-data lock
-connection blocker;
-unlock tables;
-lock tables t1 read;
-connection ddl;
-# Let us add pending exclusive metadata lock on t2
---send truncate table t1
-connection dml;
-let $wait_condition=
- select count(*) = 1 from information_schema.processlist
- where state = "Waiting for table metadata lock" and
- info = "truncate table t1";
---source include/wait_condition.inc
-let $ID2= `select connection_id()`;
---send insert into t1 values (1)
-connection default;
-let $wait_condition=
- select count(*) = 1 from information_schema.processlist
- where state = "Waiting for table metadata lock" and
- info = "insert into t1 values (1)";
---source include/wait_condition.inc
---replace_result $ID2 ID2
-eval kill query $ID2;
-connection dml;
---error ER_QUERY_INTERRUPTED
---reap
-connection blocker;
-unlock tables;
-connection ddl;
---reap
-
---echo # Test for DML waiting for tables to be flushed
-connection blocker;
-lock tables t1 read;
-connection ddl;
---echo # Let us mark locked table t1 as old
---send flush tables
-connection dml;
-let $wait_condition=
- select count(*) = 1 from information_schema.processlist
- where state = "Waiting for table flush" and
- info = "flush tables";
---source include/wait_condition.inc
---send select * from t1
-connection default;
-let $wait_condition=
- select count(*) = 1 from information_schema.processlist
- where state = "Waiting for table flush" and
- info = "select * from t1";
---source include/wait_condition.inc
---replace_result $ID2 ID2
-eval kill query $ID2;
-connection dml;
---error ER_QUERY_INTERRUPTED
---reap
-connection blocker;
-unlock tables;
-connection ddl;
---reap
-
---echo # Cleanup.
-connection default;
-drop table t1;
-drop table t2;
-
-###########################################################################
-
---echo #
---echo # Test kill USER
---echo #
-grant ALL on test.* to test@localhost;
-grant ALL on test.* to test2@localhost;
-connect (con3, localhost, test,,);
-connect (con4, localhost, test2,,);
-connection default;
---enable_info
-kill hard query user test2@nohost;
-kill soft query user test@localhost;
-kill hard query user test@localhost;
-kill soft connection user test2;
-kill hard connection user test@localhost;
---disable_info
-revoke all privileges on test.* from test@localhost;
-revoke all privileges on test.* from test2@localhost;
-drop user test@localhost;
-drop user test2@localhost;
-
-connection con3;
---error 2013,2006
-select 1;
-connection con4;
---error 2013,2006
-select 1;
-connection default;
-
---echo #
---echo # MDEV-4911 - add KILL query id, and add query id information to
---echo # processlist
---echo #
-send SELECT SLEEP(1000);
-connection con1;
-let $wait_condition= SELECT @id:=QUERY_ID FROM INFORMATION_SCHEMA.PROCESSLIST WHERE INFO='SELECT SLEEP(1000)';
-source include/wait_condition.inc;
-KILL QUERY ID @id;
-connection default;
-reap;
-
---error ER_NO_SUCH_QUERY
-KILL QUERY ID 0;
-
---echo #
---echo # MDEV-5096 - Wrong error message on attempt to kill somebody else's
---echo # query ID
---echo #
-CREATE USER u1@localhost;
-send SELECT SLEEP(1000);
-
-connection con1;
-let $wait_condition= SELECT @id:=QUERY_ID FROM INFORMATION_SCHEMA.PROCESSLIST WHERE INFO='SELECT SLEEP(1000)';
-source include/wait_condition.inc;
-let $id= `SELECT @id`;
-
-connect(con5, localhost, u1,,);
---replace_result $id ID
---error ER_KILL_QUERY_DENIED_ERROR
-eval KILL QUERY ID $id;
-
-connection con1;
-KILL QUERY ID @id;
-
-connection default;
-reap;
-disconnect con5;
-DROP USER u1@localhost;
-
-
-SET DEBUG_SYNC = 'RESET';
-DROP FUNCTION MY_KILL;
-
-set global sql_mode=default;