mirror of
https://github.com/MariaDB/server.git
synced 2025-08-26 04:11:36 +02:00

Remove one of the major sources of race condiitons in mariadb-test. Normally, mariadb_close() sends COM_QUIT to the server and immediately disconnects. In mariadb-test it means the test can switch to another connection and sends queries to the server before the server even started parsing the COM_QUIT packet and these queries can see the connection as fully active, as it didn't reach dispatch_command yet. This is a major source of instability in tests and many - but not all, still less than a half - tests employ workarounds. The correct one is a pair count_sessions.inc/wait_until_count_sessions.inc. Also very popular was wait_until_disconnected.inc, which was completely useless, because it verifies that the connection is closed, and after disconnect it always is, it didn't verify whether the server processed COM_QUIT. Sadly the placebo was as widely used as the real thing. Let's fix this by making mariadb-test `disconnect` command _to wait_ for the server to confirm. This makes almost all workarounds redundant. In some cases count_sessions.inc/wait_until_count_sessions.inc is still needed, though, as only `disconnect` command is changed: * after external tools, like `exec $MYSQL` * after failed `connect` command * replication, after `STOP SLAVE` * Federated/CONNECT/SPIDER/etc after `DROP TABLE` and also in some XA tests, because an XA transaction is dissociated from the THD very late, after the server has closed the client connection. Collateral cleanups: fix comments, remove some redundant statements: * DROP IF EXISTS if nothing is known to exist * DROP table/view before DROP DATABASE * REVOKE privileges before DROP USER etc
101 lines
2.3 KiB
Text
101 lines
2.3 KiB
Text
--source include/have_debug.inc
|
|
--source include/have_debug_sync.inc
|
|
|
|
call mtr.add_suppression("Sort aborted.*");
|
|
|
|
SET @old_debug= @@session.debug_dbug;
|
|
|
|
--echo #
|
|
--echo # Bug#36022 please log more information about "Sort aborted" queries
|
|
--echo #
|
|
|
|
CREATE TABLE t1(f0 int auto_increment primary key, f1 int);
|
|
INSERT INTO t1(f1) VALUES (0),(1),(2),(3),(4),(5);
|
|
|
|
SET session debug_dbug= '+d,alloc_sort_buffer_fail';
|
|
CALL mtr.add_suppression("Out of sort memory");
|
|
--error ER_OUT_OF_SORTMEMORY
|
|
SELECT * FROM t1 ORDER BY f1 ASC, f0;
|
|
SET session debug_dbug= @old_debug;
|
|
|
|
CREATE FUNCTION f1() RETURNS INT RETURN 1;
|
|
--error ER_SP_WRONG_NO_OF_ARGS
|
|
DELETE FROM t1 ORDER BY (f1(10)) LIMIT 1;
|
|
|
|
DROP TABLE t1;
|
|
DROP FUNCTION f1;
|
|
|
|
--echo #
|
|
--echo # Bug #11747102
|
|
--echo # 30771: LOG MORE INFO ABOUT THREADS KILL'D AND SORT ABORTED MESSAGES
|
|
--echo #
|
|
|
|
connect (con1, localhost, root);
|
|
connect (con2, localhost, root);
|
|
|
|
connection con1;
|
|
CREATE TABLE t1(f0 int auto_increment primary key, f1 int);
|
|
INSERT INTO t1(f1) VALUES (0),(1),(2),(3),(4),(5);
|
|
|
|
let $ID= `SELECT @id := CONNECTION_ID()`;
|
|
|
|
SET DEBUG_SYNC='filesort_start SIGNAL filesort_started WAIT_FOR filesort_killed';
|
|
--echo # Sending: (not reaped since connection is killed later)
|
|
--send SELECT * FROM t1 ORDER BY f1 ASC, f0
|
|
|
|
connection con2;
|
|
let $ignore= `SELECT @id := $ID`;
|
|
SET DEBUG_SYNC='now WAIT_FOR filesort_started';
|
|
KILL @id;
|
|
SET DEBUG_SYNC='now SIGNAL filesort_killed';
|
|
|
|
connection default;
|
|
disconnect con1;
|
|
disconnect con2;
|
|
SET DEBUG_SYNC= "RESET";
|
|
DROP TABLE t1;
|
|
|
|
--echo #
|
|
--echo # Bug#13832772 ASSERTION `THD->IS_ERROR() || KILL_ERRNO'
|
|
--echo # FAILED IN FILESORT/MYSQL_DELETE
|
|
--echo #
|
|
|
|
CREATE TABLE t1 (
|
|
c1 BLOB,
|
|
c2 TEXT,
|
|
c3 TEXT,
|
|
c4 TEXT,
|
|
c5 TEXT,
|
|
c6 TEXT,
|
|
c7 TEXT,
|
|
c8 BLOB,
|
|
c9 TEXT,
|
|
c19 TEXT,
|
|
pk INT,
|
|
c20 TEXT,
|
|
c21 BLOB,
|
|
c22 TEXT,
|
|
c23 TEXT,
|
|
c24 TEXT,
|
|
c25 TEXT,
|
|
c26 BLOB,
|
|
c27 TEXT,
|
|
c28 TEXT,
|
|
primary key (pk)
|
|
);
|
|
|
|
insert into t1 (pk) values (1),(2),(3);
|
|
|
|
CALL mtr.add_suppression("Out of sort memory");
|
|
|
|
--error ER_OUT_OF_SORTMEMORY
|
|
DELETE IGNORE FROM t1 ORDER BY c26,c7,c23,c4,c25,c5,c20,
|
|
c19,c21,c8,c1,c27,c28,c3,c9,c22,c24,c6,c2,pk LIMIT 2;
|
|
SHOW WARNINGS;
|
|
|
|
--error ER_OUT_OF_SORTMEMORY
|
|
DELETE FROM t1 ORDER BY c26,c7,c23,c4,c25,c5,c20,
|
|
c19,c21,c8,c1,c27,c28,c3,c9,c22,c24,c6,c2,pk LIMIT 2;
|
|
SHOW WARNINGS;
|
|
|
|
DROP TABLE t1;
|