List:Commits« Previous MessageNext Message »
From:Luis Soares Date:September 27 2009 9:20pm
Subject:bzr commit into mysql-pe branch (luis.soares:3620) Bug#47312
View as plain text  
#At file:///home/lsoares/Workspace/bzr/work/bugfixing/47312/mysql-pe/ based on revid:dao-gang.qu@stripped

 3620 Luis Soares	2009-09-27 [merge]
      BUG#47312: RBR: Disabling key on slave breaks replication: 
      HA_ERR_WRONG_INDEX
      
      Automerge: mysql-5.1-bugteam --> mysql-pe

    added:
      mysql-test/suite/rpl/r/rpl_row_disabled_slave_key.result
      mysql-test/suite/rpl/t/rpl_row_disabled_slave_key.test
    modified:
      sql/log_event.cc
=== added file 'mysql-test/suite/rpl/r/rpl_row_disabled_slave_key.result'
--- a/mysql-test/suite/rpl/r/rpl_row_disabled_slave_key.result	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/rpl/r/rpl_row_disabled_slave_key.result	2009-09-27 21:02:47 +0000
@@ -0,0 +1,26 @@
+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;
+SET SQL_LOG_BIN=0;
+CREATE TABLE t (a int, b int, c int, key(b));
+SET SQL_LOG_BIN=1;
+CREATE TABLE t (a int, b int, c int);
+INSERT INTO t VALUES (1,2,4);
+INSERT INTO t VALUES (4,3,4);
+DELETE FROM t;
+DROP TABLE t;
+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 t (a int, b int, c int, key(b));
+ALTER TABLE t DISABLE KEYS;
+INSERT INTO t VALUES (1,2,4);
+INSERT INTO t VALUES (4,3,4);
+DELETE FROM t;
+DROP TABLE t;

=== added file 'mysql-test/suite/rpl/t/rpl_row_disabled_slave_key.test'
--- a/mysql-test/suite/rpl/t/rpl_row_disabled_slave_key.test	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/rpl/t/rpl_row_disabled_slave_key.test	2009-09-27 21:02:47 +0000
@@ -0,0 +1,73 @@
+# BUG#47312: RBR: Disabling key on slave breaks replication:
+# HA_ERR_WRONG_INDEX
+#
+# Description
+# ===========
+#   
+#   This test case checks whether disabling a key on a slave breaks
+#   replication or not.
+#   
+#   Case #1, shows that while not using ALTER TABLE... DISABLE KEYS and
+#   the slave has no key defined while the master has one, replication
+#   won't break.
+#
+#   Case #2, shows that before patch for BUG#47312, if defining key on
+#   slave table, and later disable it, replication would break. This
+#   has been fixed.
+# 
+
+-- source include/master-slave.inc
+-- source include/have_binlog_format_row.inc
+
+#
+# Case #1: master has key, but slave has not. 
+#          Replication does not break.
+# 
+
+SET SQL_LOG_BIN=0;
+CREATE TABLE t (a int, b int, c int, key(b));
+SET SQL_LOG_BIN=1;
+
+-- connection slave
+
+CREATE TABLE t (a int, b int, c int);
+
+-- connection master
+
+INSERT INTO t VALUES (1,2,4);
+INSERT INTO t VALUES (4,3,4);
+DELETE FROM t;
+
+-- sync_slave_with_master
+
+-- connection master
+DROP TABLE t;
+
+-- sync_slave_with_master
+
+#
+# Case #2: master has key, slave also has one, 
+#          but it gets disabled sometime.
+#          Replication does not break anymore.
+# 
+-- source include/master-slave-reset.inc
+-- connection master
+
+CREATE TABLE t (a int, b int, c int, key(b));
+
+-- sync_slave_with_master
+
+ALTER TABLE t DISABLE KEYS;
+
+-- connection master
+
+INSERT INTO t VALUES (1,2,4);
+INSERT INTO t VALUES (4,3,4);
+DELETE FROM t;
+
+-- sync_slave_with_master
+
+-- connection master
+DROP TABLE t;
+
+-- sync_slave_with_master

=== modified file 'sql/log_event.cc'
--- a/sql/log_event.cc	2009-09-27 10:24:46 +0000
+++ b/sql/log_event.cc	2009-09-27 21:18:57 +0000
@@ -8930,11 +8930,11 @@ int Rows_log_event::find_row(const Relay
    */ 
   store_record(table,record[1]);    
 
-  if (table->s->keys > 0)
+  if (table->s->keys > 0 && table->s->keys_in_use.is_set(0))
   {
     DBUG_PRINT("info",("locating record using primary key (index_read)"));
 
-    /* We have a key: search the table using the index */
+    /* The 0th key is active: search the table using the index */
     if (!table->file->inited && (error= table->file->ha_index_init(0, FALSE)))
     {
       DBUG_PRINT("info",("ha_index_init returns error %d",error));


Attachment: [text/bzr-bundle] bzr/luis.soares@sun.com-20090927211857-2rb98gz1bbkp3r78.bundle
Thread
bzr commit into mysql-pe branch (luis.soares:3620) Bug#47312Luis Soares27 Sep