diff options
author | unknown <ingo@mysql.com> | 2004-06-24 15:06:56 +0200 |
---|---|---|
committer | unknown <ingo@mysql.com> | 2004-06-24 15:06:56 +0200 |
commit | 8f6664c59a147469cd7abba8440ae43fc221b054 (patch) | |
tree | 3e35aa94e3031d9c40bbf2f3b31a48fb7979516e /mysql-test/t/flush_table.test | |
parent | c0edb2e0ceed434c2209e5e7083fb512f25f5433 (diff) | |
download | mariadb-git-8f6664c59a147469cd7abba8440ae43fc221b054.tar.gz |
bug#3565 - HANDLER and FLUSH TABLE/TABLES deadlock.
Redesigned the handler close functions so that they are usable
at different places where waiting for closing tables is done.
mysql-test/r/flush_table.result:
bug#3565 - HANDLER and FLUSH TABLE/TABLES deadlock.
Added the test results.
mysql-test/t/flush_table.test:
bug#3565 - HANDLER and FLUSH TABLE/TABLES deadlock.
Activated old test case.
Added new test cases.
sql/mysql_priv.h:
bug#3565 - HANDLER and FLUSH TABLE/TABLES deadlock.
Made mysql_ha_close() more flexible.
Removed mysql_ha_closeall(), which closed only one table despite its name.
Added mysql_ha_close_list(), which closes the complete list or all tables and does not lock.
Removed a duplicate declaration.
sql/sql_base.cc:
bug#3565 - HANDLER and FLUSH TABLE/TABLES deadlock.
Added proper close calls before some wait points to avoid deadlocks
or infinite loops.
sql/sql_handler.cc:
bug#3565 - HANDLER and FLUSH TABLE/TABLES deadlock.
Redesigned the internal function find_table_ptr_by_name().
It can now suppress locking and tells if the requested table
has been flushed by itself.
Extended mysql_ha_close() so that it can now suppres locking
and error reporting. That way it can be used at more places and the
old function mysql_ha_closeall() is now obsolete.
Added a new function mysql_ha_close_list() which closes a whole list
of HANDLER tables or all HANDLER tables, if the list is NULL.
Furthermore is can close all 'old' (marked for flush) HANDLER tables.
sql/sql_table.cc:
bug#3565 - HANDLER and FLUSH TABLE/TABLES deadlock.
Replaced the obsolte mysql_ha_closeall() by the new mysql_ha_close().
Diffstat (limited to 'mysql-test/t/flush_table.test')
-rw-r--r-- | mysql-test/t/flush_table.test | 115 |
1 files changed, 108 insertions, 7 deletions
diff --git a/mysql-test/t/flush_table.test b/mysql-test/t/flush_table.test index 4ddcd53d5c8..ad81f266afc 100644 --- a/mysql-test/t/flush_table.test +++ b/mysql-test/t/flush_table.test @@ -4,10 +4,111 @@ # Test of flush table # -#drop table if exists t1; -#create table t1 (a int not null auto_increment primary key); -#insert into t1 values(0); -#lock table t1 read; -#flush table t1; -#check table t1; -#drop table t1; +drop table if exists t1; +create table t1 (a int not null auto_increment primary key); +insert into t1 values(0); +lock table t1 read; +flush table t1; +check table t1; +drop table t1; + +# +# Check if two database names beginning the same are seen as different. +# +# This database begins like the usual 'test' database. +# +--disable_warnings +drop database if exists test_test; +--enable_warnings +create database test_test; +use test_test; +create table t1(table_id char(20) primary key); +insert into t1 values ('test_test.t1'); +insert into t1 values (''); +handler t1 open; +handler t1 read first limit 9; +create table t2(table_id char(20) primary key); +insert into t2 values ('test_test.t2'); +insert into t2 values (''); +handler t2 open; +handler t2 read first limit 9; +# +# This is the usual 'test' database. +# +use test; +--disable_warnings +drop table if exists t1; +--enable_warnings +create table t1(table_id char(20) primary key); +insert into t1 values ('test.t1'); +insert into t1 values (''); +handler t1 open; +handler t1 read first limit 9; +# +# Check accesibility of all the tables. +# +use test; +handler test.t1 read first limit 9; +--error 1109; +handler test.t2 read first limit 9; +handler test_test.t1 read first limit 9; +handler test_test.t2 read first limit 9; +# +# Cleanup. +# +handler test_test.t1 close; +drop table test_test.t1; +handler test_test.t2 close; +drop table test_test.t2; +drop database test_test; +# +use test; +handler test.t1 close; +drop table test.t1; + +# +# In the following test FLUSH TABLES produces a deadlock +# (hang forever) if the fix for bug#3565 is missing. +# +--disable_warnings +drop table if exists t1; +drop table if exists t2; +--enable_warnings +create table t1(table_id char(20) primary key); +create table t2(table_id char(20) primary key); +insert into t1 values ('test.t1'); +insert into t1 values (''); +insert into t2 values ('test.t2'); +insert into t2 values (''); +handler t1 open as a1; +handler t1 open as a2; +handler t2 open; +handler a1 read first limit 9; +handler a2 read first limit 9; +handler t2 read first limit 9; +flush tables; +--error 1109; +handler a1 read first limit 9; +--error 1109; +handler a2 read first limit 9; +--error 1109; +handler t2 read first limit 9; +# +handler t1 open as a1; +handler t1 open as a2; +handler t2 open; +handler a1 read first limit 9; +handler a2 read first limit 9; +handler t2 read first limit 9; +flush table t1; +--error 1109; +handler a1 read first limit 9; +--error 1109; +handler a2 read first limit 9; +handler t2 read first limit 9; +flush table t2; +--error 1109; +handler t2 close; +drop table t1; +drop table t2; + |