mirror of
https://github.com/MariaDB/server.git
synced 2025-01-19 05:22:25 +01:00
8f6664c59a
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().
114 lines
2.6 KiB
Text
114 lines
2.6 KiB
Text
# TODO: Only run this if we have privilege to do flush table
|
|
|
|
#
|
|
# 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;
|
|
|
|
#
|
|
# 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;
|
|
|