From c2beb68385841c08407dbac934f9fa611a8afd82 Mon Sep 17 00:00:00 2001 From: Jon Olav Hauglid Date: Fri, 15 Jan 2010 12:47:22 +0100 Subject: [PATCH] Bug #43685 Lock table affects other non-related tables The problem was that FLUSH TABLE would block, waiting for all tables with old versions to be removed from the table definition cache, rather than waiting for only the tables in . This could happen if FLUSH TABLE was used in combination with LOCK TABLES. With the new MDL code, this problem is no longer repeatable. Regression test case added to lock.test. This commit contains no code changes. --- mysql-test/r/lock.result | 20 ++++++++++++++++++++ mysql-test/t/lock.test | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/mysql-test/r/lock.result b/mysql-test/r/lock.result index 348412ea441..5dbfa66b43e 100644 --- a/mysql-test/r/lock.result +++ b/mysql-test/r/lock.result @@ -369,5 +369,25 @@ INSERT INTO t1(f1) VALUES(0); ERROR HY000: Can't update table 't1' in stored function/trigger because it is already used by statement which invoked this stored function/trigger. DROP TABLE t1; # +# Bug#43685 Lock table affects other non-related tables +# +DROP TABLE IF EXISTS t1, t2; +CREATE TABLE t1 (id INT); +CREATE TABLE t2 (id INT); +# Connection default +LOCK TABLE t1 WRITE; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status Table is already up to date +# Connection con2 +LOCK TABLE t2 WRITE; +# This used to hang until the first connection +# unlocked t1. +FLUSH TABLE t2; +UNLOCK TABLES; +# Connection default +UNLOCK TABLES; +DROP TABLE t1, t2; +# # End of 6.0 tests. # diff --git a/mysql-test/t/lock.test b/mysql-test/t/lock.test index 49e98abdc76..bc9d1ea8245 100644 --- a/mysql-test/t/lock.test +++ b/mysql-test/t/lock.test @@ -2,6 +2,9 @@ # Testing of table locking # +# Save the initial number of concurrent sessions. +--source include/count_sessions.inc + --disable_warnings drop table if exists t1,t2,t3; --enable_warnings @@ -463,6 +466,43 @@ INSERT INTO t1(f1) VALUES(0); DROP TABLE t1; +--echo # +--echo # Bug#43685 Lock table affects other non-related tables +--echo # + +--disable_warnings +DROP TABLE IF EXISTS t1, t2; +--enable_warnings + +connect (con2, localhost, root); +CREATE TABLE t1 (id INT); +CREATE TABLE t2 (id INT); + +--echo # Connection default +connection default; +LOCK TABLE t1 WRITE; +ANALYZE TABLE t1; + +--echo # Connection con2 +connection con2; +LOCK TABLE t2 WRITE; +--echo # This used to hang until the first connection +--echo # unlocked t1. +FLUSH TABLE t2; + +UNLOCK TABLES; + +--echo # Connection default +connection default; +UNLOCK TABLES; +DROP TABLE t1, t2; +disconnect con2; + + --echo # --echo # End of 6.0 tests. --echo # + +# Check that all connections opened by test cases in this file are really +# gone so execution of other tests won't be affected by their presence. +--source include/wait_until_count_sessions.inc