List:Commits« Previous MessageNext Message »
From:Mats Kindahl Date:August 27 2009 9:33am
Subject:Re: bzr commit into mysql-5.1 branch (alfranio.correia:3083) Bug#46864
View as plain text  
Hi Alfranio,

Patch looks fine, patch approved.

Best wishes,
Mats Kindahl

Alfranio Correia wrote:
> #At
> file:///home/acorreia/workspace.sun/repository.mysql/bzrwork/bug-46864/mysql-5.1-bugteam/
> based on revid:alfranio.correia@stripped
> 
>  3083 Alfranio Correia	2009-08-27
>       BUG#46864 Incorrect update of InnoDB table on slave when using trigger with
> myisam table
>       
>       Slave does not correctly handle "expected errors" leading to inconsistencies
>       between the mater and slave. Specifically, when a statement changes both
>       transactional and non-transactional tables, the transactional changes are
>       automatically rolled back on the master but the slave ignores the error and
>       does not rollback them thus leading to inconsistencies.
>             
>       To fix the problem, we automatically rollback a statement that fails on
>       the slave but note that the transaction is not rolled back unless a "rollback"
>       command is in the relay log file.
>      @ mysql-test/extra/rpl_tests/rpl_mixing_engines.test
>         Enabled item 13.e which was disabled because of the bug fixed by the
>         current and removed item 14 which was introduced by mistake.
> 
>     modified:
>       mysql-test/extra/rpl_tests/rpl_mixing_engines.test
>       mysql-test/suite/rpl/r/rpl_stm_mixing_engines.result
>       sql/log_event.cc
> === modified file 'mysql-test/extra/rpl_tests/rpl_mixing_engines.test'
> --- a/mysql-test/extra/rpl_tests/rpl_mixing_engines.test	2009-08-26 23:13:03 +0000
> +++ b/mysql-test/extra/rpl_tests/rpl_mixing_engines.test	2009-08-27 00:09:31 +0000
> @@ -562,21 +562,21 @@ let $binlog_start= query_get_value("SHOW
>  --echo # There is a bug in the slave that needs to be fixed before enabling
>  --echo # this part of the test. A bug report will be filed referencing this
>  --echo # test case.
> -#
> -#BEGIN;
> -#INSERT INTO nt_3 VALUES ("new text -28", -28, '');
> -#--error ER_DUP_ENTRY
> -#INSERT INTO tt_3 VALUES ("new text -27", -27, ''), ("new text -28", -28, '');
> -#INSERT INTO tt_1 VALUES ("new text -27", -27, '');
> -#COMMIT;
> -#
> -#BEGIN;
> -#INSERT INTO tt_4 VALUES ("new text -28", -28, '');
> -#--error ER_DUP_ENTRY
> -#INSERT INTO nt_4 VALUES ("new text -27", -27, ''), ("new text -28", -28, '');
> -#INSERT INTO tt_1 VALUES ("new text -28", -28, '');
> -#COMMIT;
> -#
> +
> +BEGIN;
> +INSERT INTO nt_3 VALUES ("new text -28", -28, '');
> +--error ER_DUP_ENTRY
> +INSERT INTO tt_3 VALUES ("new text -27", -27, ''), ("new text -28", -28, '');
> +INSERT INTO tt_1 VALUES ("new text -27", -27, '');
> +COMMIT;
> +
> +BEGIN;
> +INSERT INTO tt_4 VALUES ("new text -28", -28, '');
> +--error ER_DUP_ENTRY
> +INSERT INTO nt_4 VALUES ("new text -27", -27, ''), ("new text -28", -28, '');
> +INSERT INTO tt_1 VALUES ("new text -28", -28, '');
> +COMMIT;
> +
>  --source include/show_binlog_events.inc
>  
>  --echo
> @@ -683,23 +683,6 @@ ROLLBACK;
>  
>  --source include/show_binlog_events.inc
>  
> ---echo
> ---echo
> ---echo
> ---echo
> -let $binlog_start= query_get_value("SHOW MASTER STATUS", Position, 1);
> ---echo #
> ---echo #14) "B M T R" with error in M generates in the binlog the "B M T R"
> entries.
> ---echo #
> -
> -BEGIN;
> -INSERT INTO tt_4 VALUES ("new text -32", -32, '');
> -TRUNCATE TABLE tt_4;
> -INSERT INTO tt_4 VALUES ("new text -33", -33, '');
> -ROLLBACK;
> -
> ---source include/show_binlog_events.inc
> -
>  connection master;
>  sync_slave_with_master;
>  
> 
> === modified file 'mysql-test/suite/rpl/r/rpl_stm_mixing_engines.result'
> --- a/mysql-test/suite/rpl/r/rpl_stm_mixing_engines.result	2009-08-26 23:13:03 +0000
> +++ b/mysql-test/suite/rpl/r/rpl_stm_mixing_engines.result	2009-08-27 00:09:31 +0000
> @@ -652,8 +652,30 @@ master-bin.000001	#	Xid	#	#	COMMIT /* XI
>  # There is a bug in the slave that needs to be fixed before enabling
>  # this part of the test. A bug report will be filed referencing this
>  # test case.
> +BEGIN;
> +INSERT INTO nt_3 VALUES ("new text -28", -28, '');
> +INSERT INTO tt_3 VALUES ("new text -27", -27, ''), ("new text -28", -28, '');
> +ERROR 23000: Duplicate entry '-28' for key 'PRIMARY'
> +INSERT INTO tt_1 VALUES ("new text -27", -27, '');
> +COMMIT;
> +BEGIN;
> +INSERT INTO tt_4 VALUES ("new text -28", -28, '');
> +INSERT INTO nt_4 VALUES ("new text -27", -27, ''), ("new text -28", -28, '');
> +ERROR 23000: Duplicate entry '-28' for key 'PRIMARY'
> +INSERT INTO tt_1 VALUES ("new text -28", -28, '');
> +COMMIT;
>  show binlog events from <binlog_start>;
>  Log_name	Pos	Event_type	Server_id	End_log_pos	Info
> +master-bin.000001	#	Query	#	#	use `test`; INSERT INTO nt_3 VALUES ("new text -28",
> -28, '')
> +master-bin.000001	#	Query	#	#	BEGIN
> +master-bin.000001	#	Query	#	#	use `test`; INSERT INTO tt_3 VALUES ("new text -27",
> -27, ''), ("new text -28", -28, '')
> +master-bin.000001	#	Query	#	#	use `test`; INSERT INTO tt_1 VALUES ("new text -27",
> -27, '')
> +master-bin.000001	#	Xid	#	#	COMMIT /* XID */
> +master-bin.000001	#	Query	#	#	BEGIN
> +master-bin.000001	#	Query	#	#	use `test`; INSERT INTO tt_4 VALUES ("new text -28",
> -28, '')
> +master-bin.000001	#	Query	#	#	use `test`; INSERT INTO nt_4 VALUES ("new text -27",
> -27, ''), ("new text -28", -28, '')
> +master-bin.000001	#	Query	#	#	use `test`; INSERT INTO tt_1 VALUES ("new text -28",
> -28, '')
> +master-bin.000001	#	Xid	#	#	COMMIT /* XID */
>  
>  
>  
> @@ -832,29 +854,6 @@ master-bin.000001	#	Query	#	#	use `test`
>  master-bin.000001	#	Query	#	#	use `test`; INSERT INTO nt_4 VALUES ("new text -29",
> -29, ''), ("new text -30", -30, '')
>  master-bin.000001	#	Query	#	#	use `test`; INSERT INTO tt_1 VALUES ("new text -31",
> -31, '')
>  master-bin.000001	#	Query	#	#	ROLLBACK
> -
> -
> -
> -
> -#
> -#14) "B M T R" with error in M generates in the binlog the "B M T R" entries.
> -#
> -BEGIN;
> -INSERT INTO tt_4 VALUES ("new text -32", -32, '');
> -TRUNCATE TABLE tt_4;
> -INSERT INTO tt_4 VALUES ("new text -33", -33, '');
> -ROLLBACK;
> -show binlog events from <binlog_start>;
> -Log_name	Pos	Event_type	Server_id	End_log_pos	Info
> -master-bin.000001	#	Query	#	#	BEGIN
> -master-bin.000001	#	Query	#	#	use `test`; INSERT INTO tt_4 VALUES ("new text -32",
> -32, '')
> -master-bin.000001	#	Xid	#	#	COMMIT /* XID */
> -master-bin.000001	#	Query	#	#	BEGIN
> -master-bin.000001	#	Query	#	#	use `test`; TRUNCATE TABLE tt_4
> -master-bin.000001	#	Xid	#	#	COMMIT /* XID */
> -master-bin.000001	#	Query	#	#	BEGIN
> -master-bin.000001	#	Query	#	#	use `test`; INSERT INTO tt_4 VALUES ("new text -33",
> -33, '')
> -master-bin.000001	#	Xid	#	#	COMMIT /* XID */
>  ###################################################################################
>  #                                        CLEAN
>  ###################################################################################
> 
> === modified file 'sql/log_event.cc'
> --- a/sql/log_event.cc	2009-08-24 09:24:52 +0000
> +++ b/sql/log_event.cc	2009-08-27 00:09:31 +0000
> @@ -3202,6 +3202,15 @@ Default database: '%s'. Query: '%s'",
>        DBUG_PRINT("info",("error ignored"));
>        clear_all_errors(thd, const_cast<Relay_log_info*>(rli));
>        thd->killed= THD::NOT_KILLED;
> +      /*
> +        When an error is expected and matches the actual error the
> +        slave does not report any error and by consequence changes
> +        on transactional tables are not rolled back in the function
> +        close_thread_tables(). For that reason, we explicitly roll
> +        them back here.
> +      */
> +      if (expected_error) 
> +        ha_autocommit_or_rollback(thd, TRUE);
>      }
>      /*
>        If we expected a non-zero error code and get nothing and, it is a concurrency
> 
> 
> 
> ------------------------------------------------------------------------
> 
> 

-- 
Mats Kindahl
Senior Software Engineer
Database Technology Group
Sun Microsystems
Thread
bzr commit into mysql-5.1 branch (alfranio.correia:3083) Bug#46864Alfranio Correia27 Aug
  • Re: bzr commit into mysql-5.1 branch (alfranio.correia:3083) Bug#46864He Zhenxing27 Aug
    • Re: bzr commit into mysql-5.1 branch (alfranio.correia:3083) Bug#46864Alfranio Correia27 Aug
      • Re: bzr commit into mysql-5.1 branch (alfranio.correia:3083) Bug#46864He Zhenxing27 Aug
  • Re: bzr commit into mysql-5.1 branch (alfranio.correia:3083) Bug#46864Mats Kindahl27 Aug