List:Commits« Previous MessageNext Message »
From:Andrei Elkin Date:September 3 2008 12:01pm
Subject:bzr commit into mysql-5.1 branch (aelkin:2677) Bug#36099
View as plain text  
#At file:///home/andrei/MySQL/BZR/mysql-5.1-5.1.29-rc/

 2677 Andrei Elkin	2008-09-03
      Bug#36099 replicate-do-db affects replaying RBR events with mysqlbinlog
            
      The replication filtering rules were inappropiately applied when
      executing BINLOG pseudo-query.  The rules are supposed to be active
      only at times when the slave's sql thread executes an event.
                  
      Fixed with correcting a condition to call replication rules only if
      the slave sql thread executes the event.
added:
  mysql-test/suite/rpl/r/rpl_binlog_query_filter_rules.result
  mysql-test/suite/rpl/t/rpl_binlog_query_filter_rules-master.opt
  mysql-test/suite/rpl/t/rpl_binlog_query_filter_rules.test
modified:
  sql/log_event.cc

per-file messages:
  mysql-test/suite/rpl/r/rpl_binlog_query_filter_rules.result
    new result file
  mysql-test/suite/rpl/t/rpl_binlog_query_filter_rules-master.opt
    a filtering option that would refuse to replicate a row event of the main test on
    slave
  mysql-test/suite/rpl/t/rpl_binlog_query_filter_rules.test
    a regression test for the bug
  sql/log_event.cc
    avoiding to call the filtering rules if the execution thread is not a slave.
=== added file 'mysql-test/suite/rpl/r/rpl_binlog_query_filter_rules.result'
--- a/mysql-test/suite/rpl/r/rpl_binlog_query_filter_rules.result	1970-01-01 00:00:00
+0000
+++ b/mysql-test/suite/rpl/r/rpl_binlog_query_filter_rules.result	2008-09-03 10:01:18
+0000
@@ -0,0 +1,11 @@
+drop table if exists t1;
+reset master;
+create table t1 (a int);
+insert into t1 values (1);
+flush logs;
+drop table t1;
+*** must be 1 ***
+select * from t1;
+a
+1
+drop table t1;

=== added file 'mysql-test/suite/rpl/t/rpl_binlog_query_filter_rules-master.opt'
--- a/mysql-test/suite/rpl/t/rpl_binlog_query_filter_rules-master.opt	1970-01-01 00:00:00
+0000
+++ b/mysql-test/suite/rpl/t/rpl_binlog_query_filter_rules-master.opt	2008-09-03 10:01:18
+0000
@@ -0,0 +1 @@
+--replicate-do-db='impossible_database'

=== added file 'mysql-test/suite/rpl/t/rpl_binlog_query_filter_rules.test'
--- a/mysql-test/suite/rpl/t/rpl_binlog_query_filter_rules.test	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/rpl/t/rpl_binlog_query_filter_rules.test	2008-09-03 10:01:18 +0000
@@ -0,0 +1,31 @@
+# regression test for
+# Bug#36099 replicate-do-db affects replaying RBR events with mysqlbinlog
+# The test verifies that the slave side filtering rule does not affect
+# applying of row-events on master via mysqlbinlog
+
+-- source include/have_log_bin.inc
+-- source include/not_embedded.inc
+-- source include/have_binlog_format_row.inc
+
+--disable_warnings
+drop table if exists t1;
+--enable_warnings
+
+reset master;
+
+create table t1 (a int);
+insert into t1 values (1);
+
+flush logs;
+--exec $MYSQL_BINLOG  $MYSQLTEST_VARDIR/log/master-bin.000001 >
$MYSQLTEST_VARDIR/tmp/bug36099.sql
+
+drop table t1;
+--exec $MYSQL -e "source $MYSQLTEST_VARDIR/tmp/bug36099.sql"
+
+--echo *** must be 1 ***
+select * from t1;
+
+# cleanup
+
+drop table t1;
+remove_file $MYSQLTEST_VARDIR/tmp/bug36099.sql;

=== modified file 'sql/log_event.cc'
--- a/sql/log_event.cc	2008-08-27 18:52:44 +0000
+++ b/sql/log_event.cc	2008-09-03 10:01:18 +0000
@@ -7843,8 +7843,9 @@ int Table_map_log_event::do_apply_event(
 
   int error= 0;
 
-  if (!rpl_filter->db_ok(table_list->db) ||
-      (rpl_filter->is_on() && !rpl_filter->tables_ok("", table_list)))
+  if (rli->sql_thd->slave_thread /* filtering is for slave only */ &&
+      (!rpl_filter->db_ok(table_list->db) ||
+       (rpl_filter->is_on() && !rpl_filter->tables_ok("", table_list))))
   {
     my_free(memory, MYF(MY_WME));
   }

Thread
bzr commit into mysql-5.1 branch (aelkin:2677) Bug#36099Andrei Elkin3 Sep