mirror of
https://github.com/MariaDB/server.git
synced 2025-08-03 09:01:34 +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
97 lines
2.2 KiB
Text
97 lines
2.2 KiB
Text
##############################################
|
|
# Change Author: JBM
|
|
# Change Date: 2006-02-07
|
|
# Change: Added ENGINE=MyISAM
|
|
##############################################
|
|
source include/have_binlog_format_mixed_or_statement.inc;
|
|
source include/master-slave.inc;
|
|
|
|
--disable_warnings
|
|
create database if not exists mysqltest;
|
|
--enable_warnings
|
|
|
|
connect (con_temp,127.0.0.1,root,,test,$MASTER_MYPORT,);
|
|
|
|
connection con_temp;
|
|
use mysqltest;
|
|
create temporary table mysqltest.t1 (n int)ENGINE=MyISAM;
|
|
create temporary table mysqltest.t2 (n int)ENGINE=MyISAM;
|
|
|
|
disconnect con_temp;
|
|
connection master;
|
|
if (`SELECT FIND_IN_SET(@@BINLOG_FORMAT,@@CREATE_TMP_TABLE_BINLOG_FORMATS) > 0`)
|
|
{
|
|
-- let $wait_binlog_event= DROP
|
|
-- source include/wait_for_binlog_event.inc
|
|
}
|
|
sync_slave_with_master;
|
|
|
|
connection slave;
|
|
show status like 'Slave_open_temp_tables';
|
|
# Cleanup
|
|
connection master;
|
|
drop database mysqltest;
|
|
sync_slave_with_master;
|
|
|
|
#
|
|
# Bug#49137
|
|
# This test verifies if DROP MULTI TEMPORARY TABLE
|
|
# will cause different errors on master and slave,
|
|
# when one or more of these tables do not exist.
|
|
#
|
|
|
|
connection master;
|
|
DROP TEMPORARY TABLE IF EXISTS tmp1;
|
|
CREATE TEMPORARY TABLE t1 ( a int );
|
|
--error 1051
|
|
DROP TEMPORARY TABLE t1, t2;
|
|
--error 1051
|
|
DROP TEMPORARY TABLE tmp2;
|
|
sync_slave_with_master;
|
|
|
|
connection slave;
|
|
stop slave;
|
|
wait_for_slave_to_stop;
|
|
|
|
connection master;
|
|
CREATE TEMPORARY TABLE tmp3 (a int);
|
|
DROP TEMPORARY TABLE tmp3;
|
|
|
|
connection slave;
|
|
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
|
|
START SLAVE;
|
|
|
|
connection master;
|
|
sync_slave_with_master;
|
|
|
|
|
|
#
|
|
# BUG#54842: DROP TEMPORARY TABLE not binlogged after manual switching binlog format to ROW
|
|
#
|
|
|
|
--source include/rpl_reset.inc
|
|
--connection master
|
|
|
|
CREATE TABLE t1 ( i INT );
|
|
--sync_slave_with_master
|
|
SHOW STATUS LIKE 'Slave_open_temp_tables';
|
|
|
|
--connect(con1,localhost,root,,)
|
|
set @@CREATE_TMP_TABLE_BINLOG_FORMATS="mixed";
|
|
CREATE TEMPORARY TABLE ttmp1 ( i INT );
|
|
SET SESSION binlog_format=ROW;
|
|
--disconnect con1
|
|
|
|
-- connection master
|
|
--let $wait_binlog_event= DROP
|
|
--source include/wait_for_binlog_event.inc
|
|
|
|
--sync_slave_with_master
|
|
SHOW STATUS LIKE 'Slave_open_temp_tables';
|
|
|
|
--connection master
|
|
--source include/show_binlog_events.inc
|
|
DROP TABLE t1;
|
|
|
|
# End of 4.1 tests
|
|
--source include/rpl_end.inc
|