From: Dmitry Lenev Date: October 26 2010 2:19pm Subject: bzr commit into mysql-5.5-runtime branch (Dmitry.Lenev:3182) List-Archive: http://lists.mysql.com/commits/121935 Message-Id: <20101026141946.D93D72F0E23@mockturtle> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0675499386==" --===============0675499386== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///home/dlenev/src/bzr/mysql-5.5-rt-grl/ based on revid:dmitry.lenev@stripped 3182 Dmitry Lenev 2010-10-26 More changes to draft patch refactoring global read lock implementation. Makes GRL yet another type of metadata lock and thus exposes it to deadlock detector in MDL subsystem. Solves bugs #54673 "It takes too long to get readlock for 'FLUSH TABLES WITH READ LOCK'" and #57006 "Deadlock between HANDLER and FLUSH TABLES WITH READ LOCK". Work-in-progress. Extended test coverage. modified: mysql-test/r/flush_read_lock.result mysql-test/t/flush_read_lock.test === modified file 'mysql-test/r/flush_read_lock.result' --- a/mysql-test/r/flush_read_lock.result 2010-10-25 18:30:28 +0000 +++ b/mysql-test/r/flush_read_lock.result 2010-10-26 14:19:27 +0000 @@ -1362,6 +1362,159 @@ unlock tables; delete from t3_trans; set debug_sync= "RESET"; # +# 38) Test effect of auto-commit mode for DML on transactional +# temporary tables. +# +# 38.1) When auto-commit is on each such a statement ends with commit +# of changes to temporary tables. But since transactions doing +# such changes are considered read only [sic!/QQ] this commit +# is compatible with FTWRL. +# +# Let us demostrate this fact for some common DML statements. +Success: Was able to run 'delete from t3_temp_trans' under FTWRL. +Success: Was able to run 'delete from t3_temp_trans' with FTWRL active in another connection. +Success: Was able to run FTWRL while 'delete from t3_temp_trans' was active in another connection. +Success: Was able to run 'insert into t3_temp_trans values (1)' under FTWRL. +Success: Was able to run 'insert into t3_temp_trans values (1)' with FTWRL active in another connection. +Success: Was able to run FTWRL while 'insert into t3_temp_trans values (1)' was active in another connection. +Success: Was able to run 'update t3_temp_trans, t2_temp set t3_temp_trans.i= 1 where t3_temp_trans.i = t2_temp.j' under FTWRL. +Success: Was able to run 'update t3_temp_trans, t2_temp set t3_temp_trans.i= 1 where t3_temp_trans.i = t2_temp.j' with FTWRL active in another connection. +Success: Was able to run FTWRL while 'update t3_temp_trans, t2_temp set t3_temp_trans.i= 1 where t3_temp_trans.i = t2_temp.j' was active in another connection. +# +# 38.2) When auto-commit is off DML on transaction temporary tables +# is compatible with FTWRL. +# +set autocommit= 0; +Success: Was able to run 'delete from t3_temp_trans' under FTWRL. +Success: Was able to run 'delete from t3_temp_trans' with FTWRL active in another connection. +Success: Was able to run FTWRL while 'delete from t3_temp_trans' was active in another connection. +Success: Was able to run 'insert into t3_temp_trans values (1)' under FTWRL. +Success: Was able to run 'insert into t3_temp_trans values (1)' with FTWRL active in another connection. +Success: Was able to run FTWRL while 'insert into t3_temp_trans values (1)' was active in another connection. +Success: Was able to run 'update t3_temp_trans, t2_temp set t3_temp_trans.i= 1 where t3_temp_trans.i = t2_temp.j' under FTWRL. +Success: Was able to run 'update t3_temp_trans, t2_temp set t3_temp_trans.i= 1 where t3_temp_trans.i = t2_temp.j' with FTWRL active in another connection. +Success: Was able to run FTWRL while 'update t3_temp_trans, t2_temp set t3_temp_trans.i= 1 where t3_temp_trans.i = t2_temp.j' was active in another connection. +set autocommit= 1; +# +# 39) Test effect of DDL on transactional tables. +# +# 39.1) Due to implicit commit at the end of statement some of DDL +# statements which are compatible with FTWRL in non-transactional +# case are not compatible in case of transactional tables. +# +# 39.1.a) ANALYZE TABLE for transactional table is incompatible with +# FTWRL. +flush tables with read lock; +# Implicit commits are allowed under FTWRL. +analyze table t3_trans; +Table Op Msg_type Msg_text +test.t3_trans analyze status OK +unlock tables; +# +# Switching to connection 'con1'. +flush tables with read lock; +# Switching to connection 'default'. +analyze table t3_trans; +# Switching to connection 'con1'. +# Check that ANALYZE TABLE is blocked. +unlock tables; +# Switching to connection 'default'. +# Reap ANALYZE TABLE +Table Op Msg_type Msg_text +test.t3_trans analyze status OK +# +# 39.1.b) CHECK TABLE for transactional table is compatible with FTWRL. +# Although it does implicit commit at the end of statement it +# is considered to be read-only operation. +# Skip last part of compatibility testing as this statement +# releases metadata locks in non-standard place. +Success: Was able to run 'check table t3_trans' under FTWRL. +Success: Was able to run 'check table t3_trans' with FTWRL active in another connection. +# +# 39.2) Situation with DDL on temporary transactional tables is +# complex. +# +# 39.2.a) Some statements compatible with FTWRL since they don't +# do implicit commit. +# +# For example, CREATE TEMPORARY TABLE: +Success: Was able to run 'create temporary table t4_temp_trans(i int) engine=innodb' under FTWRL. +Success: Was able to run 'create temporary table t4_temp_trans(i int) engine=innodb' with FTWRL active in another connection. +Success: Was able to run FTWRL while 'create temporary table t4_temp_trans(i int) engine=innodb' was active in another connection. +# +# Or DROP TEMPORARY TABLE: +Success: Was able to run 'drop temporary tables t3_temp_trans' under FTWRL. +Success: Was able to run 'drop temporary tables t3_temp_trans' with FTWRL active in another connection. +Success: Was able to run FTWRL while 'drop temporary tables t3_temp_trans' was active in another connection. +# +# 39.2.b) Some statements do implicit commit but are considered +# read-only and so are compatible with FTWRL. +# +# For example, REPAIR TABLE: +Success: Was able to run 'repair table t3_temp_trans' under FTWRL. +Success: Was able to run 'repair table t3_temp_trans' with FTWRL active in another connection. +Success: Was able to run FTWRL while 'repair table t3_temp_trans' was active in another connection. +# +# And ANALYZE TABLE: +Success: Was able to run 'analyze table t3_temp_trans' under FTWRL. +Success: Was able to run 'analyze table t3_temp_trans' with FTWRL active in another connection. +Success: Was able to run FTWRL while 'analyze table t3_temp_trans' was active in another connection. +# +# 39.2.c) Some statements do implicit commit and not +# considered read-only. As result they are +# not compatible with FTWRL. +# +flush tables with read lock; +# Implicit commits are allowed under FTWRL. +alter table t3_temp_trans add column c1 int; +unlock tables; +# +# Switching to connection 'con1'. +flush tables with read lock; +# Switching to connection 'default'. +alter table t3_temp_trans drop column c1; +# Switching to connection 'con1'. +# Check that ALTER TABLE is blocked. +unlock tables; +# Switching to connection 'default'. +# Reap ALTER TABLE +# +# 40) Test effect of implicit commit for DDL which is otherwise +# compatible with FTWRL. Implicit commit at the start of DDL +# statement can make it incompatible with FTWRL if there are +# some changes to be commited even in case when DDL statement +# itself is compatible with FTWRL. +# +# For example CHECK TABLE for base non-transactional tables and +# ALTER TABLE for temporary non-transactional tables are affected. +begin; +insert into t3_trans values (1); +# +# Switching to connection 'con1'. +flush tables with read lock; +# Switching to connection 'default'. +check table t1_base; +# Switching to connection 'con1'. +# Check that CHECK TABLE is blocked. +unlock tables; +# Switching to connection 'default'. +# Reap CHECK TABLE +Table Op Msg_type Msg_text +test.t1_base check status OK +begin; +delete from t3_trans; +# +# Switching to connection 'con1'. +flush tables with read lock; +# Switching to connection 'default'. +alter table t1_temp add column c1 int; +# Switching to connection 'con1'. +# Check that ALTER TABLE is blocked. +unlock tables; +# Switching to connection 'default'. +# Reap ALTER TABLE +alter table t1_temp drop column c1; +# # Check that FLUSH TABLES WITH READ LOCK is blocked by individual # statements and is not blocked in the presence of transaction which # has done some changes earlier but is idle now (or does only reads). === modified file 'mysql-test/t/flush_read_lock.test' --- a/mysql-test/t/flush_read_lock.test 2010-10-25 18:30:28 +0000 +++ b/mysql-test/t/flush_read_lock.test 2010-10-26 14:19:27 +0000 @@ -1781,6 +1781,209 @@ set debug_sync= "RESET"; --echo # +--echo # 38) Test effect of auto-commit mode for DML on transactional +--echo # temporary tables. +--echo # +--echo # 38.1) When auto-commit is on each such a statement ends with commit +--echo # of changes to temporary tables. But since transactions doing +--echo # such changes are considered read only [sic!/QQ] this commit +--echo # is compatible with FTWRL. +--echo # +--echo # Let us demostrate this fact for some common DML statements. +let $statement= delete from t3_temp_trans; +let $cleanup_stmt= ; +--source include/check_ftwrl_compatible.inc + +let $statement= insert into t3_temp_trans values (1); +let $cleanup_stmt= delete from t3_temp_trans limit 1; +--source include/check_ftwrl_compatible.inc + +let $statement= update t3_temp_trans, t2_temp set t3_temp_trans.i= 1 where t3_temp_trans.i = t2_temp.j; +let $cleanup_stmt= ; +--source include/check_ftwrl_compatible.inc + +--echo # +--echo # 38.2) When auto-commit is off DML on transaction temporary tables +--echo # is compatible with FTWRL. +--echo # +set autocommit= 0; +let $statement= delete from t3_temp_trans; +let $cleanup_stmt= ; +--source include/check_ftwrl_compatible.inc + +let $statement= insert into t3_temp_trans values (1); +let $cleanup_stmt= delete from t3_temp_trans limit 1; +--source include/check_ftwrl_compatible.inc + +let $statement= update t3_temp_trans, t2_temp set t3_temp_trans.i= 1 where t3_temp_trans.i = t2_temp.j; +let $cleanup_stmt= ; +--source include/check_ftwrl_compatible.inc +set autocommit= 1; + + +--echo # +--echo # 39) Test effect of DDL on transactional tables. +--echo # +--echo # 39.1) Due to implicit commit at the end of statement some of DDL +--echo # statements which are compatible with FTWRL in non-transactional +--echo # case are not compatible in case of transactional tables. +--echo # +--echo # 39.1.a) ANALYZE TABLE for transactional table is incompatible with +--echo # FTWRL. +flush tables with read lock; +--echo # Implicit commits are allowed under FTWRL. +analyze table t3_trans; +unlock tables; +--echo # +--echo # Switching to connection '$con_aux1'. +connection $con_aux1; +flush tables with read lock; +--echo # Switching to connection 'default'. +connection default; +--send analyze table t3_trans +--echo # Switching to connection '$con_aux1'. +connection $con_aux1; +--echo # Check that ANALYZE TABLE is blocked. +let $wait_condition= + select count(*) = 1 from information_schema.processlist + where state = "Waiting for global read lock" and + info = "analyze table t3_trans"; +--source include/wait_condition.inc +unlock tables; +--echo # Switching to connection 'default'. +connection default; +--echo # Reap ANALYZE TABLE +--reap + +--echo # +--echo # 39.1.b) CHECK TABLE for transactional table is compatible with FTWRL. +--echo # Although it does implicit commit at the end of statement it +--echo # is considered to be read-only operation. +let $statement= check table t3_trans; +let $cleanup_stmt= ; +--echo # Skip last part of compatibility testing as this statement +--echo # releases metadata locks in non-standard place. +let $skip_3rd_check= 1; +--source include/check_ftwrl_compatible.inc +let $skip_3rd_check= ; + +--echo # +--echo # 39.2) Situation with DDL on temporary transactional tables is +--echo # complex. +--echo # +--echo # 39.2.a) Some statements compatible with FTWRL since they don't +--echo # do implicit commit. +--echo # +--echo # For example, CREATE TEMPORARY TABLE: +let $statement= create temporary table t4_temp_trans(i int) engine=innodb; +let $cleanup_stmt= drop temporary tables t4_temp_trans; +--source include/check_ftwrl_compatible.inc +--echo # +--echo # Or DROP TEMPORARY TABLE: +let $statement= drop temporary tables t3_temp_trans; +let $cleanup_stmt= create temporary table t3_temp_trans(i int) engine=innodb; +--source include/check_ftwrl_compatible.inc +--echo # +--echo # 39.2.b) Some statements do implicit commit but are considered +--echo # read-only and so are compatible with FTWRL. +--echo # +--echo # For example, REPAIR TABLE: +let $statement= repair table t3_temp_trans; +let $cleanup_stmt= ; +--source include/check_ftwrl_compatible.inc +--echo # +--echo # And ANALYZE TABLE: +let $statement= analyze table t3_temp_trans; +let $cleanup_stmt= ; +--source include/check_ftwrl_compatible.inc +--echo # +--echo # 39.2.c) Some statements do implicit commit and not +--echo # considered read-only. As result they are +--echo # not compatible with FTWRL. +--echo # +flush tables with read lock; +--echo # Implicit commits are allowed under FTWRL. +alter table t3_temp_trans add column c1 int; +unlock tables; +--echo # +--echo # Switching to connection '$con_aux1'. +connection $con_aux1; +flush tables with read lock; +--echo # Switching to connection 'default'. +connection default; +--send alter table t3_temp_trans drop column c1 +--echo # Switching to connection '$con_aux1'. +connection $con_aux1; +--echo # Check that ALTER TABLE is blocked. +let $wait_condition= + select count(*) = 1 from information_schema.processlist + where state = "Waiting for global read lock" and + info = "alter table t3_temp_trans drop column c1"; +--source include/wait_condition.inc +unlock tables; +--echo # Switching to connection 'default'. +connection default; +--echo # Reap ALTER TABLE +--reap + + +--echo # +--echo # 40) Test effect of implicit commit for DDL which is otherwise +--echo # compatible with FTWRL. Implicit commit at the start of DDL +--echo # statement can make it incompatible with FTWRL if there are +--echo # some changes to be commited even in case when DDL statement +--echo # itself is compatible with FTWRL. +--echo # +--echo # For example CHECK TABLE for base non-transactional tables and +--echo # ALTER TABLE for temporary non-transactional tables are affected. +begin; +insert into t3_trans values (1); +--echo # +--echo # Switching to connection '$con_aux1'. +connection $con_aux1; +flush tables with read lock; +--echo # Switching to connection 'default'. +connection default; +--send check table t1_base +--echo # Switching to connection '$con_aux1'. +connection $con_aux1; +--echo # Check that CHECK TABLE is blocked. +let $wait_condition= + select count(*) = 1 from information_schema.processlist + where state = "Waiting for global read lock" and + info = "check table t1_base"; +--source include/wait_condition.inc +unlock tables; +--echo # Switching to connection 'default'. +connection default; +--echo # Reap CHECK TABLE +--reap +begin; +delete from t3_trans; +--echo # +--echo # Switching to connection '$con_aux1'. +connection $con_aux1; +flush tables with read lock; +--echo # Switching to connection 'default'. +connection default; +--send alter table t1_temp add column c1 int +--echo # Switching to connection '$con_aux1'. +connection $con_aux1; +--echo # Check that ALTER TABLE is blocked. +let $wait_condition= + select count(*) = 1 from information_schema.processlist + where state = "Waiting for global read lock" and + info = "alter table t1_temp add column c1 int"; +--source include/wait_condition.inc +unlock tables; +--echo # Switching to connection 'default'. +connection default; +--echo # Reap ALTER TABLE +--reap +alter table t1_temp drop column c1; + + +--echo # --echo # Check that FLUSH TABLES WITH READ LOCK is blocked by individual --echo # statements and is not blocked in the presence of transaction which --echo # has done some changes earlier but is idle now (or does only reads). --===============0675499386== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/dmitry.lenev@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: dmitry.lenev@stripped # target_branch: file:///home/dlenev/src/bzr/mysql-5.5-rt-grl/ # testament_sha1: 5e3e863afdc90cc65d05ae5d94b40b9d4e7ff3ea # timestamp: 2010-10-26 18:19:46 +0400 # base_revision_id: dmitry.lenev@stripped\ # 15cms1hraefgx1ql # # Begin bundle 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 --===============0675499386==--