On Fri, 2010-10-15 at 15:58 +0100, Alfranio Correia wrote:
> Hi Libing,
>
> Please, work with Jasonh and Luis to decide where you should push this patch to.
> IMHO, I think you should do what follows:
>
> 1 - Write a comment in BUG#55709 that the patch for BUG#55478
> will fix what we have agreed on. See "[28 Sep 12:40] Alfranio Correia".
> 2 - Ask for re-triage so you can push BUG#55478 to 5.5
> 3 - Write a comment in BUG#55709 saying that will handle the
> cases not fixed by BUG#55478 in BUG#55709 and for this reason
> the bug will not be closed. Explain the cases in detail.
> 4 - Ask for re-triage because the other cases are related
> to the statement format and the patch is risky to go to 5.5.
> So the patch should go to next-mr.
Done.
>
> Cheers.
>
> On 10/15/2010 09:20 AM, Li-Bing.Song@stripped wrote:
> > #At file:///home/anders/work/bzrwork1/wt2/mysql-next-mr-bugfixing/ based on
> revid:dao-gang.qu@stripped
> >
> > 3324 Li-Bing.Song@stripped 2010-10-15
> > Bug#55478 Row events wrongly apply on the temporary table of the same
> name
> >
> > Rows events were applied wrongly on the temporary table with the same
> name.
> > But rows events are generated only for base tables. As temporary
> > table's data never be binlogged on row mode. Normally, base table of the
> > same name cannot be updated if a temporary table has the same name.
> > But there are some cases which can generate rows events on
> > the base table of same name.
> >
> > After this patch, slave opens only base table when applying a rows
> event.
> >
> > modified:
> > mysql-test/suite/rpl/r/rpl_temp_table_mix_row.result
> > mysql-test/suite/rpl/t/rpl_temp_table_mix_row.test
> > sql/log_event.cc
> > === modified file 'mysql-test/suite/rpl/r/rpl_temp_table_mix_row.result'
> > --- a/mysql-test/suite/rpl/r/rpl_temp_table_mix_row.result 2010-08-20 02:59:58
> +0000
> > +++ b/mysql-test/suite/rpl/r/rpl_temp_table_mix_row.result 2010-10-15 08:20:12
> +0000
> > @@ -71,3 +71,30 @@ slave-bin.000001 # Query # # BEGIN
> > slave-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (2)
> > slave-bin.000001 # Query # # COMMIT
> > slave-bin.000001 # Query # # use `test`; DROP TABLE `t3`,`t1` /* generated by
> server */
> > +
> > +# Bug#55478 Row events wrongly apply on the temporary table of the same name
> > +# ==========================================================================
> > +# The statement should be binlogged
> > +CREATE TEMPORARY TABLE t1(c1 INT);
> > +show binlog events in 'master-bin.000001' from<binlog_start>;
> > +Log_name Pos Event_type Server_id End_log_pos Info
> > +master-bin.000001 # Query # # use `test`; CREATE TEMPORARY TABLE t1(c1 INT)
> > +
> > +# The statement generates row events on t1. And the rows events should
> > +# be inserted into the base table on slave.
> > +CREATE TABLE t1 SELECT rand();
> > +show binlog events in 'master-bin.000001' 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`; CREATE TABLE `t1` (
> > + `rand()` double NOT NULL DEFAULT '0'
> > +)
> > +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
> > +
> > +DROP TEMPORARY TABLE t1;
> > +# Compare the base table.
> > +Comparing tables master:test.t1 and slave:test.t1
> > +
> > +DROP TABLE t1;
> >
> > === modified file 'mysql-test/suite/rpl/t/rpl_temp_table_mix_row.test'
> > --- a/mysql-test/suite/rpl/t/rpl_temp_table_mix_row.test 2009-07-26 21:48:24
> +0000
> > +++ b/mysql-test/suite/rpl/t/rpl_temp_table_mix_row.test 2010-10-15 08:20:12
> +0000
> > @@ -146,3 +146,37 @@ DROP TABLE t3, t1;
> > -- sync_slave_with_master
> >
> > -- source include/show_binlog_events.inc
> > +
> > +--echo
> > +--echo # Bug#55478 Row events wrongly apply on the temporary table of the same
> name
> > +--echo #
> ==========================================================================
> > +connection master;
> > +
> > +let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1);
> > +let $binlog_start= query_get_value(SHOW MASTER STATUS, Position, 1);
> > +
> > +--echo # The statement should be binlogged
> > +CREATE TEMPORARY TABLE t1(c1 INT);
> > +
> > +source include/show_binlog_events.inc;
> > +let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1);
> > +let $binlog_start= query_get_value(SHOW MASTER STATUS, Position, 1);
> > +
> > +--echo
> > +--echo # The statement generates row events on t1. And the rows events should
> > +--echo # be inserted into the base table on slave.
> > +CREATE TABLE t1 SELECT rand();
> > +
> > +source include/show_binlog_events.inc;
> > +
> > +--echo
> > +DROP TEMPORARY TABLE t1;
> > +
> > +--echo # Compare the base table.
> > +let diff_table= test.t1;
> > +source include/rpl_diff_tables.inc;
> > +
> > +--echo
> > +connection master;
> > +DROP TABLE t1;
> > +source include/master-slave-end.inc;
> >
> > === modified file 'sql/log_event.cc'
> > --- a/sql/log_event.cc 2010-09-24 15:24:54 +0000
> > +++ b/sql/log_event.cc 2010-10-15 08:20:12 +0000
> > @@ -8439,6 +8439,7 @@ int Table_map_log_event::do_apply_event(
> > m_field_metadata, m_field_metadata_size,
> > m_null_bits, m_flags);
> > table_list->m_tabledef_valid= TRUE;
> > + table_list->open_type= OT_BASE_ONLY;
> >
> > /*
> > We record in the slave's information that the table should be
> >
> >
> >
> >
> >
>
>
--
Your Sincerely,
Libing Song
==================================
MySQL Replication Team
Software Engineer
Email : Li-Bing.Song@stripped
Skype : libing.song
MSN : slb_database@stripped
Phone : +86 010-6505-4020 ext. 319
Mobile: +86 138-1144-2038
==================================