2008-09-29 15:53:40 +02:00
|
|
|
--source include/have_log_bin.inc
|
2009-11-18 15:50:31 +01:00
|
|
|
# Test sets its own binlog_format, so we restrict it to run only once
|
|
|
|
--source include/have_binlog_format_row.inc
|
|
|
|
|
2010-04-28 14:47:49 +02:00
|
|
|
CALL mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
|
2008-09-29 15:53:40 +02:00
|
|
|
|
|
|
|
# Get rid of previous tests binlog
|
|
|
|
--disable_query_log
|
|
|
|
reset master;
|
|
|
|
--enable_query_log
|
|
|
|
|
|
|
|
#
|
|
|
|
# Bug#34306: Can't make copy of log tables when server binary log is enabled
|
|
|
|
#
|
|
|
|
# This is an additional test for Bug#34306 in order to ensure that INSERT INTO
|
|
|
|
# .. SELECT FROM is properly replicated under SBR and RBR and that the proper
|
|
|
|
# read lock type are acquired.
|
|
|
|
#
|
|
|
|
|
|
|
|
--disable_warnings
|
|
|
|
DROP TABLE IF EXISTS t1;
|
|
|
|
DROP TABLE IF EXISTS t2;
|
|
|
|
--enable_warnings
|
|
|
|
|
2009-01-30 14:44:49 +01:00
|
|
|
set @saved_global_binlog_format = @@global.binlog_format;
|
|
|
|
set @saved_local_binlog_format = @@session.binlog_format;
|
2008-09-29 15:53:40 +02:00
|
|
|
SET GLOBAL BINLOG_FORMAT = STATEMENT;
|
|
|
|
SET SESSION BINLOG_FORMAT = STATEMENT;
|
|
|
|
|
|
|
|
CREATE TABLE t1 (a INT);
|
|
|
|
CREATE TABLE t2 LIKE t1;
|
|
|
|
select @@SESSION.BINLOG_FORMAT;
|
|
|
|
INSERT INTO t1 VALUES(1);
|
|
|
|
INSERT INTO t2 VALUES(2);
|
|
|
|
|
|
|
|
--connect(con1,localhost,root,,)
|
|
|
|
--connect(con2,localhost,root,,)
|
|
|
|
|
|
|
|
--echo #
|
|
|
|
--echo # Ensure that INSERT INTO .. SELECT FROM under SBR takes a read
|
|
|
|
--echo # lock that will prevent the source table from being modified.
|
|
|
|
--echo #
|
|
|
|
|
|
|
|
--connection con1
|
|
|
|
--echo # con1
|
|
|
|
SELECT GET_LOCK('Bug#34306', 120);
|
|
|
|
--connection con2
|
|
|
|
--echo # con2
|
|
|
|
PREPARE stmt FROM "INSERT INTO t1 SELECT * FROM t2 WHERE GET_LOCK('Bug#34306', 120)";
|
|
|
|
--send EXECUTE stmt;
|
|
|
|
--connection default
|
|
|
|
--echo # default
|
|
|
|
let $wait_condition=
|
|
|
|
SELECT COUNT(*) = 1 FROM information_schema.processlist WHERE
|
|
|
|
state = "User lock" AND
|
|
|
|
info = "INSERT INTO t1 SELECT * FROM t2 WHERE GET_LOCK('Bug#34306', 120)";
|
|
|
|
--source include/wait_condition.inc
|
|
|
|
--send INSERT INTO t2 VALUES (3);
|
|
|
|
--connection con1
|
|
|
|
--echo # con1
|
|
|
|
let $wait_condition=
|
|
|
|
SELECT COUNT(*) = 1 FROM information_schema.processlist WHERE
|
Part of fix for bug#52044 "FLUSH TABLES WITH READ LOCK and
FLUSH TABLES <list> WITH READ LOCK are incompatible" to
be pushed as separate patch.
Replaced thread state name "Waiting for table", which was
used by threads waiting for a metadata lock or table flush,
with a set of names which better reflect types of resources
being waited for.
Also replaced "Table lock" thread state name, which was used
by threads waiting on thr_lock.c table level lock, with more
elaborate "Waiting for table level lock", to make it
more consistent with other thread state names.
Updated test cases and their results according to these
changes.
Fixed sys_vars.query_cache_wlock_invalidate_func test to not
to wait for timeout of wait_condition.inc script.
mysql-test/r/query_cache.result:
Added test coverage for query_cache_wlock_invalidate
behavior for implicitly locked tables.
mysql-test/suite/sys_vars/r/query_cache_wlock_invalidate_func.result:
Fixed sys_vars.query_cache_wlock_invalidate_func test to not
to wait for timeout of wait_condition.inc script. Reverted
changes to test which introduced timeout and replaced waiting
condition with a more appropriate one.
Test coverage for query_cache_wlock_invalidate behavior for
implicitly locked tables was added to query_cache.test.
mysql-test/suite/sys_vars/t/query_cache_wlock_invalidate_func.test:
Fixed sys_vars.query_cache_wlock_invalidate_func test to not
to wait for timeout of wait_condition.inc script. Reverted
changes to test which introduced timeout and replaced waiting
condition with a more appropriate one.
Test coverage for query_cache_wlock_invalidate behavior for
implicitly locked tables was added to query_cache.test.
mysql-test/t/query_cache.test:
Added test coverage for query_cache_wlock_invalidate
behavior for implicitly locked tables.
mysys/thr_lock.c:
Replaced "Table lock" thread state name, which was used by
threads waiting on thr_lock.c table level lock, with more
elaborate "Waiting for table level lock", to make it
consistent with thread state names which are used while
waiting for metadata locks and table flush.
sql/mdl.cc:
Replaced thread state name "Waiting for table", which was
used by threads waiting for a metadata lock or table flush,
with a set of names which better reflect types of resources
being waited for.
To implement this:
- Adjusted MDL_wait::timed_wait() to take thread state name
as parameter.
- Introduced method of MDL_key class which allows to get
thread state name to be used while waiting for resource
corresponding to the key and changed code to use it.
Added array translating namespaces to thread state names
as part of this change.
sql/mdl.h:
To implement this:
- Adjusted MDL_wait::timed_wait() to take thread state name
as parameter.
- Introduced method of MDL_key class which allows to get
thread state name to be used while waiting for resource
corresponding to the key and changed code to use it.
Added array translating namespaces to thread state names
as part of this change.
sql/sql_base.cc:
Replaced thread state name "Waiting for table", which was
used by threads waiting for table flush, with a more elaborate
"Waiting for table flush".
2010-08-06 13:29:37 +02:00
|
|
|
state = "Waiting for table level lock" and info = "INSERT INTO t2 VALUES (3)";
|
2008-09-29 15:53:40 +02:00
|
|
|
--source include/wait_condition.inc
|
|
|
|
SELECT RELEASE_LOCK('Bug#34306');
|
|
|
|
--connection con2
|
|
|
|
--echo # con2
|
|
|
|
--reap
|
|
|
|
SELECT RELEASE_LOCK('Bug#34306');
|
|
|
|
--connection default
|
|
|
|
--echo # default
|
|
|
|
--reap
|
|
|
|
|
|
|
|
--echo #
|
|
|
|
--echo # Ensure that INSERT INTO .. SELECT FROM prepared under SBR does
|
|
|
|
--echo # not prevent the source table from being modified if under RBR.
|
|
|
|
--echo #
|
|
|
|
|
|
|
|
--connection con2
|
|
|
|
--echo # con2
|
|
|
|
SET SESSION BINLOG_FORMAT = ROW;
|
|
|
|
--connection con1
|
|
|
|
--echo # con1
|
|
|
|
SELECT GET_LOCK('Bug#34306', 120);
|
|
|
|
--connection con2
|
|
|
|
--echo # con2
|
|
|
|
--send EXECUTE stmt;
|
|
|
|
--connection default
|
|
|
|
--echo # default
|
|
|
|
let $wait_condition=
|
|
|
|
SELECT COUNT(*) = 1 FROM information_schema.processlist WHERE
|
|
|
|
state = "User lock" AND
|
|
|
|
info = "INSERT INTO t1 SELECT * FROM t2 WHERE GET_LOCK('Bug#34306', 120)";
|
|
|
|
--source include/wait_condition.inc
|
|
|
|
--connection con1
|
|
|
|
--echo # con1
|
|
|
|
INSERT INTO t2 VALUES (4);
|
|
|
|
SELECT RELEASE_LOCK('Bug#34306');
|
|
|
|
--connection con2
|
|
|
|
--echo # con2
|
|
|
|
--reap
|
|
|
|
|
|
|
|
--disconnect con1
|
|
|
|
--disconnect con2
|
|
|
|
--connection default
|
|
|
|
--echo # default
|
|
|
|
|
|
|
|
--echo # Show binlog events
|
|
|
|
source include/show_binlog_events.inc;
|
|
|
|
|
|
|
|
DROP TABLE t1;
|
|
|
|
DROP TABLE t2;
|
2009-01-30 14:44:49 +01:00
|
|
|
SET GLOBAL BINLOG_FORMAT = @saved_global_binlog_format;
|
|
|
|
SET SESSION BINLOG_FORMAT = @saved_local_binlog_format;
|