diff options
author | unknown <guilhem@mysql.com> | 2004-12-02 23:02:38 +0100 |
---|---|---|
committer | unknown <guilhem@mysql.com> | 2004-12-02 23:02:38 +0100 |
commit | 75fa4c00ef6eaacfd0ce3381627269ea415ac0eb (patch) | |
tree | fa1a5fa41aa9adfc6fb1b42cb9b732f551625e0f /mysql-test/t/flush_read_lock_kill.test | |
parent | d967118ff655ce9e220e92c30b83e79740af7dda (diff) | |
download | mariadb-git-75fa4c00ef6eaacfd0ce3381627269ea415ac0eb.tar.gz |
Making FLUSH TABLES WITH READ LOCK killable while it's waiting for running commits to finish. Normally this step is not long but it's still nice to be killable
(especially in case of bug like BUG#6732 "FLUSH TABLES WITH READ LOCK + COMMIT makes next FLUSH...LOCK hang forever").
sql/lock.cc:
making FLUSH TABLES WITH READ LOCK killable while it's waiting for running commits to finish
sql/mysql_priv.h:
prototype change
sql/sql_parse.cc:
now it's possible that make_global_read_lock_block_commit fails (killed)
Diffstat (limited to 'mysql-test/t/flush_read_lock_kill.test')
-rw-r--r-- | mysql-test/t/flush_read_lock_kill.test | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/mysql-test/t/flush_read_lock_kill.test b/mysql-test/t/flush_read_lock_kill.test new file mode 100644 index 00000000000..b711bc63e0e --- /dev/null +++ b/mysql-test/t/flush_read_lock_kill.test @@ -0,0 +1,46 @@ +# 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). + +-- source include/have_debug.inc + +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; + +--sleep 2; # leave time for FLUSH to block +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,1053 +reap; + +connection con2; +drop table t1; |