Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
74ac683a
Commit
74ac683a
authored
Sep 28, 2022
by
Sergei Golubchik
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
cleanup: kill test
split it into debug and non-debug tests
parent
d7d3ad69
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
529 additions
and
515 deletions
+529
-515
mysql-test/main/kill.result
mysql-test/main/kill.result
+4
-223
mysql-test/main/kill.test
mysql-test/main/kill.test
+4
-292
mysql-test/main/kill_debug.result
mysql-test/main/kill_debug.result
+223
-0
mysql-test/main/kill_debug.test
mysql-test/main/kill_debug.test
+298
-0
No files found.
mysql-test/main/kill.result
View file @
74ac683a
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
...
...
mysql-test/main/kill.test
View file @
74ac683a
...
...
@@ -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
...
...
mysql-test/main/kill_debug.result
0 → 100644
View file @
74ac683a
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;
mysql-test/main/kill_debug.test
0 → 100644
View file @
74ac683a
#
# 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
;
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment