List:Commits« Previous MessageNext Message »
From:He Zhenxing Date:May 18 2010 6:27am
Subject:Re: bzr commit into mysql-5.1-bugteam branch (luis.soares:3356)
Bug#52868
View as plain text  
Hi Luis,

Nice work, patch approved!

Luis Soares wrote:
> #At file:///home/lsoares/Workspace/bzr/work/bugfixing/52868/mysql-5.1-bugteam/ based
> on revid:kristofer.pettersson@stripped
> 
>  3356 Luis Soares	2010-04-21
>       BUG#52868: Wrong handling of NULL value during update, replication out
>                  of sync
>       
>       In RBR, sometimes the table->s->last_null_bit_pos can be zero. This
>       has impact at the slave when it compares records fetched from the
>       storage engine against records in the binary log event. If
>       last_null_bit_pos is zero the slave, while comparing in
>       log_event.cc:record_compare function, would set all bits in the last
>       null_byte to 1 (assumed all 8 were unused) . Thence it would loose the
>       ability to distinguish records that were similar in contents except
>       for the fact that some field was null in one record, but not in the
>       other. Ultimately this would cause wrong matches, and in the specific
>       case depicted in the bug report the same record would be updated
>       twice, resulting in a lost update.
>       
>       Additionally, in the record_compare function the slave was setting the
>       X bit unconditionally. There are cases that the X bit does not exist
>       in the record header. This could also lead to wrong matches between
>       records.
>       
>       We fix both by conditionally resetting the bits: (i) unused null_bits
>       are set if last_null_bit_pos > 0; (ii) X bit is set if
>       HA_OPTION_PACK_RECORD is in use.
>      @ mysql-test/extra/rpl_tests/rpl_record_compare.test
>         Shared part of the test case for MyISAM and InnoDB.
>      @ mysql-test/suite/rpl/t/rpl_row_rec_comp_innodb.test
>         InnoDB test case.
>      @ mysql-test/suite/rpl/t/rpl_row_rec_comp_myisam.test
>         MyISAM test case. Added also coverage for Field_bits case.
>      @ sql/log_event.cc
>         Deployed conditional setting of unused bits at record_compare.
>      @ sql/log_event_old.cc
>         Same change as in log_event.cc.
> 
>     added:
>       mysql-test/extra/rpl_tests/rpl_record_compare.test
>       mysql-test/suite/rpl/r/rpl_row_rec_comp_innodb.result
>       mysql-test/suite/rpl/r/rpl_row_rec_comp_myisam.result
>       mysql-test/suite/rpl/t/rpl_row_rec_comp_innodb.test
>       mysql-test/suite/rpl/t/rpl_row_rec_comp_myisam.test
>     modified:
>       sql/log_event.cc
>       sql/log_event_old.cc
> === added file 'mysql-test/extra/rpl_tests/rpl_record_compare.test'
> --- a/mysql-test/extra/rpl_tests/rpl_record_compare.test	1970-01-01 00:00:00 +0000
> +++ b/mysql-test/extra/rpl_tests/rpl_record_compare.test	2010-04-21 12:47:55 +0000
> @@ -0,0 +1,68 @@
> +
> +#
> +# BUG#52868: Wrong handling of NULL value during update, replication out of sync
> +#
> +-- echo ## case #1 - last_null_bit_pos==0 in record_compare without X bit
> +
> +-- source include/master-slave-reset.inc
> +-- connection master
> +
> +-- eval CREATE TABLE t1 (c1 bigint(20) DEFAULT 0, c2 bigint(20) DEFAULT 0, c3
> bigint(20) DEFAULT 0, c4 varchar(1) DEFAULT '', c5 bigint(20) DEFAULT 0, c6 bigint(20)
> DEFAULT 0, c7 bigint(20) DEFAULT 0, c8 bigint(20) DEFAULT 0) ENGINE=$engine DEFAULT
> CHARSET=latin1
> +
> +INSERT INTO t1 ( c5, c6 ) VALUES ( 1   , 35 );
> +INSERT INTO t1 ( c5, c6 ) VALUES ( NULL, 35 );
> +-- disable_warnings
> +UPDATE t1 SET c5 = 'a';
> +-- enable_warnings
> +-- sync_slave_with_master
> +
> +-- let $diff_table_1= master:test.t1
> +-- let $diff_table_2= slave:test.t1
> +-- source include/diff_tables.inc
> +
> +--connection master
> +DROP TABLE t1;
> +-- sync_slave_with_master
> +
> +-- echo ## case #1.1 - last_null_bit_pos==0 in record_compare with X bit
> +-- echo ##             (1 column less and no varchar)
> +-- source include/master-slave-reset.inc
> +-- connection master
> +
> +-- eval CREATE TABLE t1 (c1 bigint(20) DEFAULT 0, c2 bigint(20) DEFAULT 0, c3
> bigint(20) DEFAULT 0, c4 bigint(20) DEFAULT 0, c5 bigint(20) DEFAULT 0, c6 bigint(20)
> DEFAULT 0, c7 bigint(20) DEFAULT 0) ENGINE=$engine DEFAULT CHARSET=latin1
> +
> +INSERT INTO t1 ( c5, c6 ) VALUES ( 1   , 35 );
> +INSERT INTO t1 ( c5, c6 ) VALUES ( NULL, 35 );
> +-- disable_warnings
> +UPDATE t1 SET c5 = 'a';
> +-- enable_warnings
> +-- sync_slave_with_master
> +
> +-- let $diff_table_1= master:test.t1
> +-- let $diff_table_2= slave:test.t1
> +-- source include/diff_tables.inc
> +
> +--connection master
> +DROP TABLE t1;
> +-- sync_slave_with_master
> +
> +-- echo ## case #2 - X bit is wrongly set.
> +
> +-- source include/master-slave-reset.inc
> +-- connection master
> +
> +-- eval CREATE TABLE t1 (c1 int, c2 varchar(1) default '') ENGINE=$engine DEFAULT
> CHARSET= latin1
> +INSERT INTO t1(c1) VALUES (10);
> +INSERT INTO t1(c1) VALUES (NULL);
> +UPDATE t1 SET c1= 0;
> +-- sync_slave_with_master
> +
> +-- let $diff_table_1= master:test.t1
> +-- let $diff_table_2= slave:test.t1
> +-- source include/diff_tables.inc
> +
> +-- connection master
> +DROP TABLE t1; 
> +-- sync_slave_with_master
> +
> +
> 
> === added file 'mysql-test/suite/rpl/r/rpl_row_rec_comp_innodb.result'
> --- a/mysql-test/suite/rpl/r/rpl_row_rec_comp_innodb.result	1970-01-01 00:00:00
> +0000
> +++ b/mysql-test/suite/rpl/r/rpl_row_rec_comp_innodb.result	2010-04-21 12:47:55
> +0000
> @@ -0,0 +1,46 @@
> +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;
> +## case #1 - last_null_bit_pos==0 in record_compare without X bit
> +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 (c1 bigint(20) DEFAULT 0, c2 bigint(20) DEFAULT 0, c3 bigint(20)
> DEFAULT 0, c4 varchar(1) DEFAULT '', c5 bigint(20) DEFAULT 0, c6 bigint(20) DEFAULT 0, c7
> bigint(20) DEFAULT 0, c8 bigint(20) DEFAULT 0) ENGINE=InnoDB DEFAULT CHARSET=latin1;
> +INSERT INTO t1 ( c5, c6 ) VALUES ( 1   , 35 );
> +INSERT INTO t1 ( c5, c6 ) VALUES ( NULL, 35 );
> +UPDATE t1 SET c5 = 'a';
> +Comparing tables master:test.t1 and slave:test.t1
> +DROP TABLE t1;
> +## case #1.1 - last_null_bit_pos==0 in record_compare with X bit
> +##             (1 column less and no varchar)
> +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 (c1 bigint(20) DEFAULT 0, c2 bigint(20) DEFAULT 0, c3 bigint(20)
> DEFAULT 0, c4 bigint(20) DEFAULT 0, c5 bigint(20) DEFAULT 0, c6 bigint(20) DEFAULT 0, c7
> bigint(20) DEFAULT 0) ENGINE=InnoDB DEFAULT CHARSET=latin1;
> +INSERT INTO t1 ( c5, c6 ) VALUES ( 1   , 35 );
> +INSERT INTO t1 ( c5, c6 ) VALUES ( NULL, 35 );
> +UPDATE t1 SET c5 = 'a';
> +Comparing tables master:test.t1 and slave:test.t1
> +DROP TABLE t1;
> +## case #2 - X bit is wrongly set.
> +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 (c1 int, c2 varchar(1) default '') ENGINE=InnoDB DEFAULT CHARSET=
> latin1;
> +INSERT INTO t1(c1) VALUES (10);
> +INSERT INTO t1(c1) VALUES (NULL);
> +UPDATE t1 SET c1= 0;
> +Comparing tables master:test.t1 and slave:test.t1
> +DROP TABLE t1;
> 
> === added file 'mysql-test/suite/rpl/r/rpl_row_rec_comp_myisam.result'
> --- a/mysql-test/suite/rpl/r/rpl_row_rec_comp_myisam.result	1970-01-01 00:00:00
> +0000
> +++ b/mysql-test/suite/rpl/r/rpl_row_rec_comp_myisam.result	2010-04-21 12:47:55
> +0000
> @@ -0,0 +1,60 @@
> +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;
> +## case #1 - last_null_bit_pos==0 in record_compare without X bit
> +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 (c1 bigint(20) DEFAULT 0, c2 bigint(20) DEFAULT 0, c3 bigint(20)
> DEFAULT 0, c4 varchar(1) DEFAULT '', c5 bigint(20) DEFAULT 0, c6 bigint(20) DEFAULT 0, c7
> bigint(20) DEFAULT 0, c8 bigint(20) DEFAULT 0) ENGINE=MyISAM DEFAULT CHARSET=latin1;
> +INSERT INTO t1 ( c5, c6 ) VALUES ( 1   , 35 );
> +INSERT INTO t1 ( c5, c6 ) VALUES ( NULL, 35 );
> +UPDATE t1 SET c5 = 'a';
> +Comparing tables master:test.t1 and slave:test.t1
> +DROP TABLE t1;
> +## case #1.1 - last_null_bit_pos==0 in record_compare with X bit
> +##             (1 column less and no varchar)
> +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 (c1 bigint(20) DEFAULT 0, c2 bigint(20) DEFAULT 0, c3 bigint(20)
> DEFAULT 0, c4 bigint(20) DEFAULT 0, c5 bigint(20) DEFAULT 0, c6 bigint(20) DEFAULT 0, c7
> bigint(20) DEFAULT 0) ENGINE=MyISAM DEFAULT CHARSET=latin1;
> +INSERT INTO t1 ( c5, c6 ) VALUES ( 1   , 35 );
> +INSERT INTO t1 ( c5, c6 ) VALUES ( NULL, 35 );
> +UPDATE t1 SET c5 = 'a';
> +Comparing tables master:test.t1 and slave:test.t1
> +DROP TABLE t1;
> +## case #2 - X bit is wrongly set.
> +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 (c1 int, c2 varchar(1) default '') ENGINE=MyISAM DEFAULT CHARSET=
> latin1;
> +INSERT INTO t1(c1) VALUES (10);
> +INSERT INTO t1(c1) VALUES (NULL);
> +UPDATE t1 SET c1= 0;
> +Comparing tables master:test.t1 and slave:test.t1
> +DROP TABLE t1;
> +## coverage purposes - Field_bits 
> +##                     1 X bit + 2 Null bits + 5 bits => last_null_bit_pos==0
> +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 (c1 bigint(20) DEFAULT 0, c2 bit(5)) ENGINE=MyISAM DEFAULT
> CHARSET=latin1;
> +INSERT INTO t1(c1,c2) VALUES (10, b'1');
> +INSERT INTO t1(c1,c2) VALUES (NULL, b'1');
> +UPDATE t1 SET c1= 0;
> +Comparing tables master:test.t1 and slave:test.t1
> +DROP TABLE t1;
> 
> === added file 'mysql-test/suite/rpl/t/rpl_row_rec_comp_innodb.test'
> --- a/mysql-test/suite/rpl/t/rpl_row_rec_comp_innodb.test	1970-01-01 00:00:00 +0000
> +++ b/mysql-test/suite/rpl/t/rpl_row_rec_comp_innodb.test	2010-04-21 12:47:55 +0000
> @@ -0,0 +1,10 @@
> +-- source include/have_binlog_format_row.inc
> +-- source include/master-slave.inc
> +-- source include/have_innodb.inc
> +
> +#
> +# BUG#52868 Wrong handling of NULL value during update, replication out of sync
> +#
> +
> +-- let $engine= InnoDB
> +-- source extra/rpl_tests/rpl_record_compare.test
> 
> === added file 'mysql-test/suite/rpl/t/rpl_row_rec_comp_myisam.test'
> --- a/mysql-test/suite/rpl/t/rpl_row_rec_comp_myisam.test	1970-01-01 00:00:00 +0000
> +++ b/mysql-test/suite/rpl/t/rpl_row_rec_comp_myisam.test	2010-04-21 12:47:55 +0000
> @@ -0,0 +1,31 @@
> +-- source include/have_binlog_format_row.inc
> +-- source include/master-slave.inc
> +
> +#
> +# BUG#52868 Wrong handling of NULL value during update, replication out of sync
> +#
> +
> +-- let $engine= MyISAM
> +-- source extra/rpl_tests/rpl_record_compare.test
> +
> +-- echo ## coverage purposes - Field_bits 
> +-- echo ##                     1 X bit + 2 Null bits + 5 bits =>
> last_null_bit_pos==0
> +## Added here because AFAIK it's only MyISAM and NDB that use Field_bits
> +
> +-- source include/master-slave-reset.inc
> +-- connection master
> +
> +-- eval CREATE TABLE t1 (c1 bigint(20) DEFAULT 0, c2 bit(5)) ENGINE=$engine DEFAULT
> CHARSET=latin1
> +
> +INSERT INTO t1(c1,c2) VALUES (10, b'1');
> +INSERT INTO t1(c1,c2) VALUES (NULL, b'1');
> +UPDATE t1 SET c1= 0;
> +-- sync_slave_with_master
> +
> +-- let $diff_table_1= master:test.t1
> +-- let $diff_table_2= slave:test.t1
> +-- source include/diff_tables.inc
> +
> +-- connection master
> +DROP TABLE t1; 
> +-- sync_slave_with_master
> 
> === modified file 'sql/log_event.cc'
> --- a/sql/log_event.cc	2010-03-28 11:57:33 +0000
> +++ b/sql/log_event.cc	2010-04-21 12:47:55 +0000
> @@ -8758,11 +8758,28 @@ static bool record_compare(TABLE *table)
>    {
>      for (int i = 0 ; i < 2 ; ++i)
>      {
> -      saved_x[i]= table->record[i][0];
> -      saved_filler[i]= table->record[i][table->s->null_bytes - 1];
> -      table->record[i][0]|= 1U;
> -      table->record[i][table->s->null_bytes - 1]|=
> -        256U - (1U << table->s->last_null_bit_pos);
> +      /* 
> +        If we have an X bit then we need to take care of it.
> +      */
> +      if (!(table->s->db_options_in_use & HA_OPTION_PACK_RECORD))
> +      {
> +        saved_x[i]= table->record[i][0];
> +        table->record[i][0]|= 1U;
> +      }
> +
> +      /*
> +         If (last_null_bit_pos == 0 && null_bytes > 1), then:
> +
> +         X bit (if any) + N nullable fields + M Field_bit fields = 8 bits 
> +
> +         Ie, the entire byte is used.
> +      */
> +      if (table->s->last_null_bit_pos > 0)
> +      {
> +        saved_filler[i]= table->record[i][table->s->null_bytes - 1];
> +        table->record[i][table->s->null_bytes - 1]|=
> +          256U - (1U << table->s->last_null_bit_pos);
> +      }
>      }
>    }
>  
> @@ -8802,8 +8819,11 @@ record_compare_exit:
>    {
>      for (int i = 0 ; i < 2 ; ++i)
>      {
> -      table->record[i][0]= saved_x[i];
> -      table->record[i][table->s->null_bytes - 1]= saved_filler[i];
> +      if (!(table->s->db_options_in_use & HA_OPTION_PACK_RECORD))
> +        table->record[i][0]= saved_x[i];
> +
> +      if (table->s->last_null_bit_pos)
> +        table->record[i][table->s->null_bytes - 1]= saved_filler[i];
>      }
>    }
>  
> 
> === modified file 'sql/log_event_old.cc'
> --- a/sql/log_event_old.cc	2010-03-14 16:01:45 +0000
> +++ b/sql/log_event_old.cc	2010-04-21 12:47:55 +0000
> @@ -342,12 +342,29 @@ static bool record_compare(TABLE *table)
>    if (table->s->null_bytes > 0)
>    {
>      for (int i = 0 ; i < 2 ; ++i)
> -    {
> -      saved_x[i]= table->record[i][0];
> -      saved_filler[i]= table->record[i][table->s->null_bytes - 1];
> -      table->record[i][0]|= 1U;
> -      table->record[i][table->s->null_bytes - 1]|=
> -        256U - (1U << table->s->last_null_bit_pos);
> +    { 
> +      /* 
> +        If we have an X bit then we need to take care of it.
> +      */
> +      if (!(table->s->db_options_in_use & HA_OPTION_PACK_RECORD))
> +      {
> +        saved_x[i]= table->record[i][0];
> +        table->record[i][0]|= 1U;
> +      }
> +      
> +      /*
> +         If (last_null_bit_pos == 0 && null_bytes > 1), then:
> +
> +         X bit (if any) + N nullable fields + M Field_bit fields = 8 bits 
> +
> +         Ie, the entire byte is used.
> +      */
> +      if (table->s->last_null_bit_pos > 0)
> +      {
> +        saved_filler[i]= table->record[i][table->s->null_bytes - 1];
> +        table->record[i][table->s->null_bytes - 1]|=
> +          256U - (1U << table->s->last_null_bit_pos);
> +      }
>      }
>    }
>  
> @@ -387,8 +404,11 @@ record_compare_exit:
>    {
>      for (int i = 0 ; i < 2 ; ++i)
>      {
> -      table->record[i][0]= saved_x[i];
> -      table->record[i][table->s->null_bytes - 1]= saved_filler[i];
> +      if (!(table->s->db_options_in_use & HA_OPTION_PACK_RECORD))
> +        table->record[i][0]= saved_x[i];
> +
> +      if (table->s->last_null_bit_pos > 0)
> +        table->record[i][table->s->null_bytes - 1]= saved_filler[i];
>      }
>    }
>  
> 
> 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\
> #   /52868/mysql-5.1-bugteam/
> # testament_sha1: acb28d8cc549c73e7fd6d60ad98057d2a146f878
> # timestamp: 2010-04-21 13:48:03 +0100
> # base_revision_id: kristofer.pettersson@stripped\
> #   24ar0rrqdbytwte8
> # 
> # Begin bundle
> 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
> 
> 


Thread
bzr commit into mysql-5.1-bugteam branch (luis.soares:3356) Bug#52868Luis Soares21 Apr
  • Re: bzr commit into mysql-5.1-bugteam branch (luis.soares:3356)Bug#52868He Zhenxing18 May