Nice work! Approved!
Luis Soares wrote:
> #At file:///home/lsoares/Workspace/bzr/work/bugfixing/54842/mysql-trunk-bugfixing/
> based on revid:alik@stripped
>
> 3079 Luis Soares 2010-06-29
> BUG#54842: DROP TEMPORARY TABLE not binlogged after manual
> switching binlog format to ROW
>
> BUG 52616 fixed the case which the user would switch from STMT to
> ROW binlog format, but the server would silently ignore it. After
> that fix thd->is_current_stmt_binlog_format_row() reports correct
> value at logging time and events are logged in ROW (as expected)
> instead of STMT as they were previously and wrongly logged.
>
> However, the fix was only partially complete, because on
> disconnect, at THD cleanup, the implicit logging of temporary
> tables is conditionally performed. If the binlog_format==ROW and
> thd->is_current_stmt_binlog_format_row() is true then DROPs are
> not logged. Given that the user can switch from STMT to ROW, this
> is wrong because the server cannot tell, just by relying on the
> ROW binlog format, that the tables have been dropped before. This
> is effectively similar to the MIXED scenario when a switch from
> STMT to ROW is triggered.
>
> We fix this by removing this condition from
> close_temporary_tables.
> @ mysql-test/extra/binlog_tests/drop_temp_table.test
> Added binlog test case.
> @ mysql-test/suite/binlog/r/binlog_row_drop_tmp_tbl.result
> Result changes because:
> - there is a missing drop on three temporary tables
> - it now contains results for the test added
> @ mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result
> Result now contains the implicit drop for the temporary table.
> @ mysql-test/suite/binlog/r/binlog_stm_drop_tmp_tbl.result
> Result file changed because it now contains results for added
> test case.
> @ mysql-test/suite/rpl/r/rpl_drop_temp.result
> Result file changed because it now contains results for added
> test case.
> @ mysql-test/suite/rpl/t/rpl_drop_temp.test
> Added replication test case.
> @ sql/sql_base.cc
> Removed the condition that would make the server to skip
> logging implicit drops when ROW binary log format mode was
> in use.
> Additionally, deployed DBUG_ENTER/RETURN macros.
>
> modified:
> mysql-test/extra/binlog_tests/drop_temp_table.test
> mysql-test/suite/binlog/r/binlog_row_drop_tmp_tbl.result
> mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result
> mysql-test/suite/binlog/r/binlog_stm_drop_tmp_tbl.result
> mysql-test/suite/rpl/r/rpl_drop_temp.result
> mysql-test/suite/rpl/t/rpl_drop_temp.test
> sql/sql_base.cc
> === modified file 'mysql-test/extra/binlog_tests/drop_temp_table.test'
> --- a/mysql-test/extra/binlog_tests/drop_temp_table.test 2010-02-26 13:16:46 +0000
> +++ b/mysql-test/extra/binlog_tests/drop_temp_table.test 2010-06-29 10:54:58 +0000
> @@ -69,4 +69,34 @@ let $VERSION=`SELECT VERSION()`;
> source include/show_binlog_events.inc;
> DROP DATABASE `drop-temp+table-test`;
>
> +
> +#
> +# Bug #54842: DROP TEMPORARY TABLE not binlogged after manual switching binlog
> format to ROW
> +#
> +# Sanity test. Checking that implicit DROP event is logged.
> +#
> +# After BUG#52616, the switch to ROW mode becomes effective even
> +# if there are open temporary tables. As such the implicit drop
> +# for temporary tables on session closing must be logged.
> +#
> +
> +RESET MASTER;
> +
> +CREATE TABLE t1 ( i text );
> +
> +--connect(con1,localhost,root,,)
> +CREATE TEMPORARY TABLE ttmp1 ( i text );
> +SET @@session.binlog_format=ROW;
> +INSERT INTO t1 VALUES ('1');
> +SELECT @@session.binlog_format;
> +--disconnect con1
> +
> +-- connection default
> +--let $wait_binlog_event= DROP
> +--source include/wait_for_binlog_event.inc
> +-- source include/show_binlog_events.inc
> +RESET MASTER;
> +
> +DROP TABLE t1;
> +
> # End of 4.1 tests
>
> === modified file 'mysql-test/suite/binlog/r/binlog_row_drop_tmp_tbl.result'
> --- a/mysql-test/suite/binlog/r/binlog_row_drop_tmp_tbl.result 2010-04-20 09:10:43
> +0000
> +++ b/mysql-test/suite/binlog/r/binlog_row_drop_tmp_tbl.result 2010-06-29 10:54:58
> +0000
> @@ -33,4 +33,23 @@ master-bin.000001 # Query # # use `drop-
> master-bin.000001 # Query # # use `drop-temp+table-test`; DROP TABLE IF EXISTS `t`
> /* generated by server */
> master-bin.000001 # Query # # use `drop-temp+table-test`; DROP TEMPORARY TABLE IF
> EXISTS `tmp2` /* generated by server */
> master-bin.000001 # Query # # use `drop-temp+table-test`; DROP TABLE IF EXISTS tmp2,
> t
> +master-bin.000001 # Query # # use `drop-temp+table-test`; DROP /*!40005 TEMPORARY */
> TABLE IF EXISTS `shortn2`,`table:name`,`shortn1`
> DROP DATABASE `drop-temp+table-test`;
> +RESET MASTER;
> +CREATE TABLE t1 ( i text );
> +CREATE TEMPORARY TABLE ttmp1 ( i text );
> +SET @@session.binlog_format=ROW;
> +INSERT INTO t1 VALUES ('1');
> +SELECT @@session.binlog_format;
> +@@session.binlog_format
> +ROW
> +show binlog events from <binlog_start>;
> +Log_name Pos Event_type Server_id End_log_pos Info
> +master-bin.000001 # Query # # use `test`; CREATE TABLE t1 ( i text )
> +master-bin.000001 # Query # # BEGIN
> +master-bin.000001 # Table_map # # table_id: # (test.t1)
> +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
> +master-bin.000001 # Query # # COMMIT
> +master-bin.000001 # Query # # use `test`; DROP /*!40005 TEMPORARY */ TABLE IF EXISTS
> `ttmp1`
> +RESET MASTER;
> +DROP TABLE t1;
>
> === modified file 'mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result'
> --- a/mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result 2010-06-01
> 19:34:40 +0000
> +++ b/mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result 2010-06-29
> 10:54:58 +0000
> @@ -297,6 +297,7 @@ master-bin.000001 # Table_map # # table_
> master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
> master-bin.000001 # Query # # COMMIT
> master-bin.000001 # Query # # use `test`; create table t2 (n int) engine=innodb
> +master-bin.000001 # Query # # use `test`; DROP /*!40005 TEMPORARY */ TABLE IF EXISTS
> `t1`,`ti`
> do release_lock("lock1");
> drop table t0,t2;
> set autocommit=0;
>
> === modified file 'mysql-test/suite/binlog/r/binlog_stm_drop_tmp_tbl.result'
> --- a/mysql-test/suite/binlog/r/binlog_stm_drop_tmp_tbl.result 2010-02-26 13:16:46
> +0000
> +++ b/mysql-test/suite/binlog/r/binlog_stm_drop_tmp_tbl.result 2010-06-29 10:54:58
> +0000
> @@ -42,3 +42,22 @@ master-bin.000001 # Query # # use `drop-
> master-bin.000001 # Query # # use `drop-temp+table-test`; DROP TABLE IF EXISTS tmp2,
> t
> master-bin.000001 # Query # # use `drop-temp+table-test`; DROP /*!40005 TEMPORARY */
> TABLE IF EXISTS `shortn2`,`table:name`,`shortn1`
> DROP DATABASE `drop-temp+table-test`;
> +RESET MASTER;
> +CREATE TABLE t1 ( i text );
> +CREATE TEMPORARY TABLE ttmp1 ( i text );
> +SET @@session.binlog_format=ROW;
> +INSERT INTO t1 VALUES ('1');
> +SELECT @@session.binlog_format;
> +@@session.binlog_format
> +ROW
> +show binlog events from <binlog_start>;
> +Log_name Pos Event_type Server_id End_log_pos Info
> +master-bin.000001 # Query # # use `test`; CREATE TABLE t1 ( i text )
> +master-bin.000001 # Query # # use `test`; CREATE TEMPORARY TABLE ttmp1 ( i text )
> +master-bin.000001 # Query # # BEGIN
> +master-bin.000001 # Table_map # # table_id: # (test.t1)
> +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
> +master-bin.000001 # Query # # COMMIT
> +master-bin.000001 # Query # # use `test`; DROP /*!40005 TEMPORARY */ TABLE IF EXISTS
> `ttmp1`
> +RESET MASTER;
> +DROP TABLE t1;
>
> === modified file 'mysql-test/suite/rpl/r/rpl_drop_temp.result'
> --- a/mysql-test/suite/rpl/r/rpl_drop_temp.result 2009-12-31 04:04:19 +0000
> +++ b/mysql-test/suite/rpl/r/rpl_drop_temp.result 2010-06-29 10:54:58 +0000
> @@ -26,3 +26,24 @@ CREATE TEMPORARY TABLE tmp3 (a int);
> DROP TEMPORARY TABLE tmp3;
> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
> START SLAVE;
> +stop slave;
> +drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
> +reset master;
> +reset slave;
> +drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
> +start slave;
> +CREATE TABLE t1 ( i INT );
> +SHOW STATUS LIKE 'Slave_open_temp_tables';
> +Variable_name Value
> +Slave_open_temp_tables 0
> +CREATE TEMPORARY TABLE ttmp1 ( i INT );
> +SET SESSION binlog_format=ROW;
> +SHOW STATUS LIKE 'Slave_open_temp_tables';
> +Variable_name Value
> +Slave_open_temp_tables 0
> +show binlog events from <binlog_start>;
> +Log_name Pos Event_type Server_id End_log_pos Info
> +master-bin.000001 # Query # # use `test`; CREATE TABLE t1 ( i INT )
> +master-bin.000001 # Query # # use `test`; CREATE TEMPORARY TABLE ttmp1 ( i INT )
> +master-bin.000001 # Query # # use `test`; DROP /*!40005 TEMPORARY */ TABLE IF EXISTS
> `ttmp1`
> +DROP TABLE t1;
>
> === modified file 'mysql-test/suite/rpl/t/rpl_drop_temp.test'
> --- a/mysql-test/suite/rpl/t/rpl_drop_temp.test 2009-12-31 04:04:19 +0000
> +++ b/mysql-test/suite/rpl/t/rpl_drop_temp.test 2010-06-29 10:54:58 +0000
> @@ -66,4 +66,32 @@ START SLAVE;
> connection master;
> sync_slave_with_master;
>
> +
> +#
> +# BUG#54842: DROP TEMPORARY TABLE not binlogged after manual switching binlog format
> to ROW
> +#
> +
> +-- connection master
> +-- source include/master-slave-reset.inc
> +-- connection master
> +
> +CREATE TABLE t1 ( i INT );
> +--sync_slave_with_master
> +SHOW STATUS LIKE 'Slave_open_temp_tables';
> +
> +--connect(con1,localhost,root,,)
> +CREATE TEMPORARY TABLE ttmp1 ( i INT );
> +SET SESSION binlog_format=ROW;
> +--disconnect con1
> +
> +-- connection master
> +--let $wait_binlog_event= DROP
> +--source include/wait_for_binlog_event.inc
> +--sync_slave_with_master
> +SHOW STATUS LIKE 'Slave_open_temp_tables';
> +
> +--connection master
> +--source include/show_binlog_events.inc
> +DROP TABLE t1;
> +
> # End of 4.1 tests
>
> === modified file 'sql/sql_base.cc'
> --- a/sql/sql_base.cc 2010-06-17 13:31:51 +0000
> +++ b/sql/sql_base.cc 2010-06-29 10:54:58 +0000
> @@ -1636,6 +1636,7 @@ static inline uint tmpkeyval(THD *thd,
>
> void close_temporary_tables(THD *thd)
> {
> + DBUG_ENTER("close_temporary_tables");
> TABLE *table;
> TABLE *next= NULL;
> TABLE *prev_table;
> @@ -1643,10 +1644,9 @@ void close_temporary_tables(THD *thd)
> bool was_quote_show= TRUE;
>
> if (!thd->temporary_tables)
> - return;
> + DBUG_VOID_RETURN;
>
> - if (!mysql_bin_log.is_open() ||
> - (thd->is_current_stmt_binlog_format_row() &&
> thd->variables.binlog_format == BINLOG_FORMAT_ROW))
> + if (!mysql_bin_log.is_open())
> {
> TABLE *tmp_next;
> for (table= thd->temporary_tables; table; table= tmp_next)
> @@ -1655,7 +1655,7 @@ void close_temporary_tables(THD *thd)
> close_temporary(table, 1, 1);
> }
> thd->temporary_tables= 0;
> - return;
> + DBUG_VOID_RETURN;
> }
>
> /* Better add "if exists", in case a RESET MASTER has been done */
> @@ -1771,6 +1771,7 @@ void close_temporary_tables(THD *thd)
> if (!was_quote_show)
> thd->variables.option_bits&= ~OPTION_QUOTE_SHOW_CREATE; /* restore option
> */
> thd->temporary_tables=0;
> + DBUG_VOID_RETURN;
> }
>
> /*
>
> text/bzr-bundle 类型 附件
> (bzr/luis.soares@stripped)
> # Bazaar merge directive format 2 (Bazaar 0.90)
> # revision_id: luis.soares@stripped
> # target_branch: file:///home/lsoares/Workspace/bzr/work/bugfixing\
> # /54842/mysql-trunk-bugfixing/
> # testament_sha1: 6e44d47f546762e2d9e4426195e205a664a42382
> # timestamp: 2010-06-29 11:55:02 +0100
> # source_branch: /home/lsoares/Workspace/bzr/clones/mysql-trunk-\
> # bugfixing
> # base_revision_id: alik@stripped
> #
> # Begin bundle
> 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
> SUUJ2FQGviTCBRvkVS/4u5IpwoSF269f4A==
>
>