# Let's see if FLUSH TABLES WITH READ LOCK can be killed when waiting # for running commits to finish (in the past it could not) # This will not be a meaningful test on non-debug servers so will be # skipped. # If running mysql-test-run --debug, the --debug added by # mysql-test-run to the mysqld command line will override the one of # -master.opt. But this test is designed to still pass then (though it # won't test anything interesting). # This also won't work with the embedded server test --source include/not_embedded.inc --source include/have_debug.inc # Save the initial number of concurrent sessions --source include/count_sessions.inc # Disable concurrent inserts to avoid test failures when reading the # connection id which was inserted into a table by another thread. SET @old_concurrent_insert= @@global.concurrent_insert; SET @@global.concurrent_insert= 0; connect (con1,localhost,root,,); connect (con2,localhost,root,,); connection con1; --disable_warnings DROP TABLE IF EXISTS t1; --enable_warnings CREATE TABLE t1 (kill_id INT); INSERT INTO t1 VALUES(connection_id()); # Thanks to the parameter we passed to --debug, this FLUSH will # block on a debug build running with our --debug=make_global... It # will block until killed. In other cases (non-debug build or other # --debug) it will succeed immediately connection con1; send FLUSH TABLES WITH READ LOCK; # kill con1 connection con2; SELECT ((@id := kill_id) - kill_id) FROM t1; # Wait for the debug sync point, test won't run on non-debug # builds anyway. let $wait_condition= select count(*) = 1 from information_schema.processlist where state = "Waiting for all running commits to finish" and info = "flush tables with read lock"; --source include/wait_condition.inc KILL CONNECTION @id; connection con1; # On debug builds it will be error 1053 (killed); on non-debug, or # debug build running without our --debug=make_global..., will be # error 0 (no error). The only important thing to test is that on # debug builds with our --debug=make_global... we don't hang forever. --error 0,1317,2013 reap; connection con2; DROP TABLE t1; connection default; disconnect con2; # Restore global concurrent_insert value SET @@global.concurrent_insert= @old_concurrent_insert; # Wait till all disconnects are completed --source include/wait_until_count_sessions.inc