List:Commits« Previous MessageNext Message »
From:Luis Soares Date:January 7 2010 5:45pm
Subject:bzr commit into mysql-5.1-bugteam branch (luis.soares:3304) Bug#50018
View as plain text  
#At file:///home/lsoares/Workspace/bzr/work/bugfixing/50018/mysql-5.1-bugteam/ based on revid:luis.soares@stripped

 3304 Luis Soares	2010-01-07
      BUG#50018: binlog corruption when table has many columns
      
      Some improvements on the test case as suggested during review.

    modified:
      mysql-test/suite/rpl/r/rpl_row_tbl_metadata.result
      mysql-test/suite/rpl/t/rpl_row_tbl_metadata.test
=== modified file 'mysql-test/suite/rpl/r/rpl_row_tbl_metadata.result'
--- a/mysql-test/suite/rpl/r/rpl_row_tbl_metadata.result	2010-01-06 00:44:31 +0000
+++ b/mysql-test/suite/rpl/r/rpl_row_tbl_metadata.result	2010-01-07 17:45:54 +0000
@@ -4,7 +4,6 @@ reset master;
 reset slave;
 drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
 start slave;
-RESET MASTER;
 DROP TABLE IF EXISTS `t1`;
 ### TABLE with field_metadata_size == 290
 CREATE TABLE `t1` (
@@ -157,9 +156,11 @@ CREATE TABLE `t1` (
 PRIMARY KEY (`c1`)
 ) ENGINE=InnoDB;
 LOCK TABLES `t1` WRITE;
-INSERT INTO `t1` VALUES ('1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1');
-DROP TABLE `t1`;
+INSERT INTO `t1`(c2) VALUES ('1');
 FLUSH LOGS;
+### assertion: the slave replicated event successfully and tables match
+Comparing tables master:test.t1 and slave:test.t1
+DROP TABLE `t1`;
 === Using mysqlbinlog to detect failure. Before the patch mysqlbinlog would find a corrupted event, thence would fail.
 stop slave;
 drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
@@ -167,271 +168,39 @@ reset master;
 reset slave;
 drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
 start slave;
-### TABLE with field_metadata_size == 250
-CREATE TABLE `t1` (
-`c1` int(11) NOT NULL AUTO_INCREMENT,
-`c2` varchar(30) NOT NULL,
-`c3` varchar(30) DEFAULT NULL,
-`c4` varchar(30) DEFAULT NULL,
-`c5` varchar(30) DEFAULT NULL,
-`c6` varchar(30) DEFAULT NULL,
-`c7` varchar(30) DEFAULT NULL,
-`c8` varchar(30) DEFAULT NULL,
-`c9` varchar(30) DEFAULT NULL,
-`c10` varchar(30) DEFAULT NULL,
-`c11` varchar(30) DEFAULT NULL,
-`c12` varchar(30) DEFAULT NULL,
-`c13` varchar(30) DEFAULT NULL,
-`c14` varchar(30) DEFAULT NULL,
-`c15` varchar(30) DEFAULT NULL,
-`c16` varchar(30) DEFAULT NULL,
-`c17` varchar(30) DEFAULT NULL,
-`c18` varchar(30) DEFAULT NULL,
-`c19` varchar(30) DEFAULT NULL,
-`c20` varchar(30) DEFAULT NULL,
-`c21` varchar(30) DEFAULT NULL,
-`c22` varchar(30) DEFAULT NULL,
-`c23` varchar(30) DEFAULT NULL,
-`c24` varchar(30) DEFAULT NULL,
-`c25` varchar(30) DEFAULT NULL,
-`c26` varchar(30) DEFAULT NULL,
-`c27` varchar(30) DEFAULT NULL,
-`c28` varchar(30) DEFAULT NULL,
-`c29` varchar(30) DEFAULT NULL,
-`c30` varchar(30) DEFAULT NULL,
-`c31` varchar(30) DEFAULT NULL,
-`c32` varchar(30) DEFAULT NULL,
-`c33` varchar(30) DEFAULT NULL,
-`c34` varchar(30) DEFAULT NULL,
-`c35` varchar(30) DEFAULT NULL,
-`c36` varchar(30) DEFAULT NULL,
-`c37` varchar(30) DEFAULT NULL,
-`c38` varchar(30) DEFAULT NULL,
-`c39` varchar(30) DEFAULT NULL,
-`c40` varchar(30) DEFAULT NULL,
-`c41` varchar(30) DEFAULT NULL,
-`c42` varchar(30) DEFAULT NULL,
-`c43` varchar(30) DEFAULT NULL,
-`c44` varchar(30) DEFAULT NULL,
-`c45` varchar(30) DEFAULT NULL,
-`c46` varchar(30) DEFAULT NULL,
-`c47` varchar(30) DEFAULT NULL,
-`c48` varchar(30) DEFAULT NULL,
-`c49` varchar(30) DEFAULT NULL,
-`c50` varchar(30) DEFAULT NULL,
-`c51` varchar(30) DEFAULT NULL,
-`c52` varchar(30) DEFAULT NULL,
-`c53` varchar(30) DEFAULT NULL,
-`c54` varchar(30) DEFAULT NULL,
-`c55` varchar(30) DEFAULT NULL,
-`c56` varchar(30) DEFAULT NULL,
-`c57` varchar(30) DEFAULT NULL,
-`c58` varchar(30) DEFAULT NULL,
-`c59` varchar(30) DEFAULT NULL,
-`c60` varchar(30) DEFAULT NULL,
-`c61` varchar(30) DEFAULT NULL,
-`c62` varchar(30) DEFAULT NULL,
-`c63` varchar(30) DEFAULT NULL,
-`c64` varchar(30) DEFAULT NULL,
-`c65` varchar(30) DEFAULT NULL,
-`c66` varchar(30) DEFAULT NULL,
-`c67` varchar(30) DEFAULT NULL,
-`c68` varchar(30) DEFAULT NULL,
-`c69` varchar(30) DEFAULT NULL,
-`c70` varchar(30) DEFAULT NULL,
-`c71` varchar(30) DEFAULT NULL,
-`c72` varchar(30) DEFAULT NULL,
-`c73` varchar(30) DEFAULT NULL,
-`c74` varchar(30) DEFAULT NULL,
-`c75` varchar(30) DEFAULT NULL,
-`c76` varchar(30) DEFAULT NULL,
-`c77` varchar(30) DEFAULT NULL,
-`c78` varchar(30) DEFAULT NULL,
-`c79` varchar(30) DEFAULT NULL,
-`c80` varchar(30) DEFAULT NULL,
-`c81` varchar(30) DEFAULT NULL,
-`c82` varchar(30) DEFAULT NULL,
-`c83` varchar(30) DEFAULT NULL,
-`c84` varchar(30) DEFAULT NULL,
-`c85` varchar(30) DEFAULT NULL,
-`c86` varchar(30) DEFAULT NULL,
-`c87` varchar(30) DEFAULT NULL,
-`c88` varchar(30) DEFAULT NULL,
-`c89` varchar(30) DEFAULT NULL,
-`c90` varchar(30) DEFAULT NULL,
-`c91` varchar(30) DEFAULT NULL,
-`c92` varchar(30) DEFAULT NULL,
-`c93` varchar(30) DEFAULT NULL,
-`c94` varchar(30) DEFAULT NULL,
-`c95` varchar(30) DEFAULT NULL,
-`c96` varchar(30) DEFAULT NULL,
-`c97` varchar(30) DEFAULT NULL,
-`c98` varchar(30) DEFAULT NULL,
-`c99` varchar(30) DEFAULT NULL,
-`c100` varchar(30) DEFAULT NULL,
-`c101` varchar(30) DEFAULT NULL,
-`c102` varchar(30) DEFAULT NULL,
-`c103` varchar(30) DEFAULT NULL,
-`c104` varchar(30) DEFAULT NULL,
-`c105` varchar(30) DEFAULT NULL,
-`c106` varchar(30) DEFAULT NULL,
-`c107` varchar(30) DEFAULT NULL,
-`c108` varchar(30) DEFAULT NULL,
-`c109` varchar(30) DEFAULT NULL,
-`c110` varchar(30) DEFAULT NULL,
-`c111` varchar(30) DEFAULT NULL,
-`c112` varchar(30) DEFAULT NULL,
-`c113` varchar(30) DEFAULT NULL,
-`c114` varchar(30) DEFAULT NULL,
-`c115` varchar(30) DEFAULT NULL,
-`c116` varchar(30) DEFAULT NULL,
-`c117` varchar(30) DEFAULT NULL,
-`c118` varchar(30) DEFAULT NULL,
-`c119` varchar(30) DEFAULT NULL,
-`c120` varchar(30) DEFAULT NULL,
-`c121` varchar(30) DEFAULT NULL,
-`c122` varchar(30) DEFAULT NULL,
-`c123` varchar(30) DEFAULT NULL,
-`c124` varchar(30) DEFAULT NULL,
-`c125` varchar(30) DEFAULT NULL,
-`c126` varchar(30) DEFAULT NULL,
-PRIMARY KEY (`c1`)
-) ENGINE=InnoDB;
-### TABLE with field_metadata_size == 251
-CREATE TABLE `t2` (
-`c1` float,
-`c2` varchar(30) NOT NULL,
-`c3` varchar(30) DEFAULT NULL,
-`c4` varchar(30) DEFAULT NULL,
-`c5` varchar(30) DEFAULT NULL,
-`c6` varchar(30) DEFAULT NULL,
-`c7` varchar(30) DEFAULT NULL,
-`c8` varchar(30) DEFAULT NULL,
-`c9` varchar(30) DEFAULT NULL,
-`c10` varchar(30) DEFAULT NULL,
-`c11` varchar(30) DEFAULT NULL,
-`c12` varchar(30) DEFAULT NULL,
-`c13` varchar(30) DEFAULT NULL,
-`c14` varchar(30) DEFAULT NULL,
-`c15` varchar(30) DEFAULT NULL,
-`c16` varchar(30) DEFAULT NULL,
-`c17` varchar(30) DEFAULT NULL,
-`c18` varchar(30) DEFAULT NULL,
-`c19` varchar(30) DEFAULT NULL,
-`c20` varchar(30) DEFAULT NULL,
-`c21` varchar(30) DEFAULT NULL,
-`c22` varchar(30) DEFAULT NULL,
-`c23` varchar(30) DEFAULT NULL,
-`c24` varchar(30) DEFAULT NULL,
-`c25` varchar(30) DEFAULT NULL,
-`c26` varchar(30) DEFAULT NULL,
-`c27` varchar(30) DEFAULT NULL,
-`c28` varchar(30) DEFAULT NULL,
-`c29` varchar(30) DEFAULT NULL,
-`c30` varchar(30) DEFAULT NULL,
-`c31` varchar(30) DEFAULT NULL,
-`c32` varchar(30) DEFAULT NULL,
-`c33` varchar(30) DEFAULT NULL,
-`c34` varchar(30) DEFAULT NULL,
-`c35` varchar(30) DEFAULT NULL,
-`c36` varchar(30) DEFAULT NULL,
-`c37` varchar(30) DEFAULT NULL,
-`c38` varchar(30) DEFAULT NULL,
-`c39` varchar(30) DEFAULT NULL,
-`c40` varchar(30) DEFAULT NULL,
-`c41` varchar(30) DEFAULT NULL,
-`c42` varchar(30) DEFAULT NULL,
-`c43` varchar(30) DEFAULT NULL,
-`c44` varchar(30) DEFAULT NULL,
-`c45` varchar(30) DEFAULT NULL,
-`c46` varchar(30) DEFAULT NULL,
-`c47` varchar(30) DEFAULT NULL,
-`c48` varchar(30) DEFAULT NULL,
-`c49` varchar(30) DEFAULT NULL,
-`c50` varchar(30) DEFAULT NULL,
-`c51` varchar(30) DEFAULT NULL,
-`c52` varchar(30) DEFAULT NULL,
-`c53` varchar(30) DEFAULT NULL,
-`c54` varchar(30) DEFAULT NULL,
-`c55` varchar(30) DEFAULT NULL,
-`c56` varchar(30) DEFAULT NULL,
-`c57` varchar(30) DEFAULT NULL,
-`c58` varchar(30) DEFAULT NULL,
-`c59` varchar(30) DEFAULT NULL,
-`c60` varchar(30) DEFAULT NULL,
-`c61` varchar(30) DEFAULT NULL,
-`c62` varchar(30) DEFAULT NULL,
-`c63` varchar(30) DEFAULT NULL,
-`c64` varchar(30) DEFAULT NULL,
-`c65` varchar(30) DEFAULT NULL,
-`c66` varchar(30) DEFAULT NULL,
-`c67` varchar(30) DEFAULT NULL,
-`c68` varchar(30) DEFAULT NULL,
-`c69` varchar(30) DEFAULT NULL,
-`c70` varchar(30) DEFAULT NULL,
-`c71` varchar(30) DEFAULT NULL,
-`c72` varchar(30) DEFAULT NULL,
-`c73` varchar(30) DEFAULT NULL,
-`c74` varchar(30) DEFAULT NULL,
-`c75` varchar(30) DEFAULT NULL,
-`c76` varchar(30) DEFAULT NULL,
-`c77` varchar(30) DEFAULT NULL,
-`c78` varchar(30) DEFAULT NULL,
-`c79` varchar(30) DEFAULT NULL,
-`c80` varchar(30) DEFAULT NULL,
-`c81` varchar(30) DEFAULT NULL,
-`c82` varchar(30) DEFAULT NULL,
-`c83` varchar(30) DEFAULT NULL,
-`c84` varchar(30) DEFAULT NULL,
-`c85` varchar(30) DEFAULT NULL,
-`c86` varchar(30) DEFAULT NULL,
-`c87` varchar(30) DEFAULT NULL,
-`c88` varchar(30) DEFAULT NULL,
-`c89` varchar(30) DEFAULT NULL,
-`c90` varchar(30) DEFAULT NULL,
-`c91` varchar(30) DEFAULT NULL,
-`c92` varchar(30) DEFAULT NULL,
-`c93` varchar(30) DEFAULT NULL,
-`c94` varchar(30) DEFAULT NULL,
-`c95` varchar(30) DEFAULT NULL,
-`c96` varchar(30) DEFAULT NULL,
-`c97` varchar(30) DEFAULT NULL,
-`c98` varchar(30) DEFAULT NULL,
-`c99` varchar(30) DEFAULT NULL,
-`c100` varchar(30) DEFAULT NULL,
-`c101` varchar(30) DEFAULT NULL,
-`c102` varchar(30) DEFAULT NULL,
-`c103` varchar(30) DEFAULT NULL,
-`c104` varchar(30) DEFAULT NULL,
-`c105` varchar(30) DEFAULT NULL,
-`c106` varchar(30) DEFAULT NULL,
-`c107` varchar(30) DEFAULT NULL,
-`c108` varchar(30) DEFAULT NULL,
-`c109` varchar(30) DEFAULT NULL,
-`c110` varchar(30) DEFAULT NULL,
-`c111` varchar(30) DEFAULT NULL,
-`c112` varchar(30) DEFAULT NULL,
-`c113` varchar(30) DEFAULT NULL,
-`c114` varchar(30) DEFAULT NULL,
-`c115` varchar(30) DEFAULT NULL,
-`c116` varchar(30) DEFAULT NULL,
-`c117` varchar(30) DEFAULT NULL,
-`c118` varchar(30) DEFAULT NULL,
-`c119` varchar(30) DEFAULT NULL,
-`c120` varchar(30) DEFAULT NULL,
-`c121` varchar(30) DEFAULT NULL,
-`c122` varchar(30) DEFAULT NULL,
-`c123` varchar(30) DEFAULT NULL,
-`c124` varchar(30) DEFAULT NULL,
-`c125` varchar(30) DEFAULT NULL,
-`c126` varchar(30) DEFAULT NULL,
-PRIMARY KEY (`c1`)
-) ENGINE=InnoDB;
-LOCK TABLES `t1` WRITE;
-INSERT INTO `t1` VALUES ('1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1');
-LOCK TABLES `t2` WRITE;
-INSERT INTO `t2` VALUES ('1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1');
-DROP TABLE `t1`;
-DROP TABLE `t2`;
+### action: generating several tables with different metadata 
+###         sizes (resorting to perl)
+### testing table with 249 field metadata size.
+### testing table with 250 field metadata size.
+### testing table with 251 field metadata size.
+### testing table with 252 field metadata size.
+### testing table with 253 field metadata size.
+### testing table with 254 field metadata size.
+### testing table with 255 field metadata size.
+### testing table with 256 field metadata size.
+### testing table with 257 field metadata size.
+### testing table with 258 field metadata size.
 FLUSH LOGS;
-=== Using mysqlbinlog to detect failure. Before the patch mysqlbinlog would find a corrupted event, thence would fail.
+### assertion: the slave replicated event successfully and tables match for t10
+Comparing tables master:test.t10 and slave:test.t10
+### assertion: the slave replicated event successfully and tables match for t9
+Comparing tables master:test.t9 and slave:test.t9
+### assertion: the slave replicated event successfully and tables match for t8
+Comparing tables master:test.t8 and slave:test.t8
+### assertion: the slave replicated event successfully and tables match for t7
+Comparing tables master:test.t7 and slave:test.t7
+### assertion: the slave replicated event successfully and tables match for t6
+Comparing tables master:test.t6 and slave:test.t6
+### assertion: the slave replicated event successfully and tables match for t5
+Comparing tables master:test.t5 and slave:test.t5
+### assertion: the slave replicated event successfully and tables match for t4
+Comparing tables master:test.t4 and slave:test.t4
+### assertion: the slave replicated event successfully and tables match for t3
+Comparing tables master:test.t3 and slave:test.t3
+### assertion: the slave replicated event successfully and tables match for t2
+Comparing tables master:test.t2 and slave:test.t2
+### assertion: the slave replicated event successfully and tables match for t1
+Comparing tables master:test.t1 and slave:test.t1
+### assertion: check that binlog is not corrupt. Using mysqlbinlog to 
+###            detect failure. Before the patch mysqlbinlog would find 
+###            a corrupted event, thence would fail.

=== modified file 'mysql-test/suite/rpl/t/rpl_row_tbl_metadata.test'
--- a/mysql-test/suite/rpl/t/rpl_row_tbl_metadata.test	2010-01-06 00:44:31 +0000
+++ b/mysql-test/suite/rpl/t/rpl_row_tbl_metadata.test	2010-01-07 17:45:54 +0000
@@ -2,7 +2,6 @@
 # BUG#42749: infinite loop writing to row based binlog - processlist shows
 # "freeing items"
 #
-# BUG#50018: binlog corruption when table has many columns
 #
 # WHY
 # ===
@@ -18,8 +17,7 @@
 #
 #   Checking that the patch fixes the problem is done as follows:
 #
-#     i) tables with several fields is created (above and below a 251
-#        metadata size threshold)
+#     i) one table with m_field_metadata sized at 290
 #    ii) an insert is performed;
 #   iii) the logs are flushed;
 #    iv) mysqlbinlog is used to check if it succeeds.
@@ -29,12 +27,8 @@
 #   reading the event.
 
 -- source include/master-slave.inc
--- source include/have_log_bin.inc
 -- source include/have_innodb.inc
 -- source include/have_binlog_format_row.inc
--- connection default
-
-RESET MASTER;
 
 -- disable_warnings
 DROP TABLE IF EXISTS `t1`;
@@ -192,13 +186,20 @@ CREATE TABLE `t1` (
 ) ENGINE=InnoDB;
 
 LOCK TABLES `t1` WRITE;
+INSERT INTO `t1`(c2) VALUES ('1');
+FLUSH LOGS;
 
-INSERT INTO `t1` VALUES ('1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1');
+-- sync_slave_with_master
+-- connection master
 
-DROP TABLE `t1`;
+-- echo ### assertion: the slave replicated event successfully and tables match
+-- let $diff_table_1=master:test.t1
+-- let $diff_table_2=slave:test.t1
+-- source include/diff_tables.inc
 
-FLUSH LOGS;
+DROP TABLE `t1`;
 
+-- connection master
 -- sync_slave_with_master
 -- connection master
 
@@ -208,313 +209,132 @@ FLUSH LOGS;
 -- exec $MYSQL_BINLOG $MYSQLD_DATADIR/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug42749.binlog
 -- remove_file $MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug42749.binlog
 
+#############################################################
+# BUG#50018: binlog corruption when table has many columns
+#
+# Same test from BUG#42749, but now we generate some SQL which
+# creates and inserts into tables with metadata size from 249
+# to 258.
+# 
+# The test works as follows:
+#  1. SQL for several CREATE TABLE and INSERTS are generated 
+#     into a file.
+#  2. This file is then "sourced"
+#  3. The slave is synchronized with the master
+#  4. FLUSH LOGS on master
+#  5. Compare tables on master and slave.
+#  6. run mysqlbinlog on  master's binary log
+#
+# Steps #5 and #6 assert that binary log is not corrupted 
+# in both cases: when slave is replaying events and when
+# mysqlbinlog is used to read the binary log
+
 -- source include/master-slave-reset.inc
 -- connection master
 
-# Create two tables one with field_metadata_size == 250
-# and another one with field_metadata_size == 252
+# Create several tables with field_metadata_size ranging
+# from 249 to 258 (so that we cover 251 and 255 range).
+# This should exercise the switch between using 1 or 3
+# bytes to pack m_field_metadata_size.
 # 
 # Each varchar field takes up to 2 metadata bytes, see:
 #
 #  Field_varstring::do_save_field_metadata (field.cc)
 #
-# The integer field takes 0 bytes, see:
-#  
-#  Field::do_save_field_metadata  (field.h)
-#
 # The float field takes 1 byte, see:
 #
 #  Field_float::do_save_field_metadata (field.cc)
 #
-# We choose 250 and 252 which are the ones below and above
-# the threshold for switching to use 1 or 3 bytes for the
-# m_data_size increment.
-#
-
--- echo ### TABLE with field_metadata_size == 250
-
-CREATE TABLE `t1` (
-  `c1` int(11) NOT NULL AUTO_INCREMENT,
-  `c2` varchar(30) NOT NULL,
-  `c3` varchar(30) DEFAULT NULL,
-  `c4` varchar(30) DEFAULT NULL,
-  `c5` varchar(30) DEFAULT NULL,
-  `c6` varchar(30) DEFAULT NULL,
-  `c7` varchar(30) DEFAULT NULL,
-  `c8` varchar(30) DEFAULT NULL,
-  `c9` varchar(30) DEFAULT NULL,
-  `c10` varchar(30) DEFAULT NULL,
-  `c11` varchar(30) DEFAULT NULL,
-  `c12` varchar(30) DEFAULT NULL,
-  `c13` varchar(30) DEFAULT NULL,
-  `c14` varchar(30) DEFAULT NULL,
-  `c15` varchar(30) DEFAULT NULL,
-  `c16` varchar(30) DEFAULT NULL,
-  `c17` varchar(30) DEFAULT NULL,
-  `c18` varchar(30) DEFAULT NULL,
-  `c19` varchar(30) DEFAULT NULL,
-  `c20` varchar(30) DEFAULT NULL,
-  `c21` varchar(30) DEFAULT NULL,
-  `c22` varchar(30) DEFAULT NULL,
-  `c23` varchar(30) DEFAULT NULL,
-  `c24` varchar(30) DEFAULT NULL,
-  `c25` varchar(30) DEFAULT NULL,
-  `c26` varchar(30) DEFAULT NULL,
-  `c27` varchar(30) DEFAULT NULL,
-  `c28` varchar(30) DEFAULT NULL,
-  `c29` varchar(30) DEFAULT NULL,
-  `c30` varchar(30) DEFAULT NULL,
-  `c31` varchar(30) DEFAULT NULL,
-  `c32` varchar(30) DEFAULT NULL,
-  `c33` varchar(30) DEFAULT NULL,
-  `c34` varchar(30) DEFAULT NULL,
-  `c35` varchar(30) DEFAULT NULL,
-  `c36` varchar(30) DEFAULT NULL,
-  `c37` varchar(30) DEFAULT NULL,
-  `c38` varchar(30) DEFAULT NULL,
-  `c39` varchar(30) DEFAULT NULL,
-  `c40` varchar(30) DEFAULT NULL,
-  `c41` varchar(30) DEFAULT NULL,
-  `c42` varchar(30) DEFAULT NULL,
-  `c43` varchar(30) DEFAULT NULL,
-  `c44` varchar(30) DEFAULT NULL,
-  `c45` varchar(30) DEFAULT NULL,
-  `c46` varchar(30) DEFAULT NULL,
-  `c47` varchar(30) DEFAULT NULL,
-  `c48` varchar(30) DEFAULT NULL,
-  `c49` varchar(30) DEFAULT NULL,
-  `c50` varchar(30) DEFAULT NULL,
-  `c51` varchar(30) DEFAULT NULL,
-  `c52` varchar(30) DEFAULT NULL,
-  `c53` varchar(30) DEFAULT NULL,
-  `c54` varchar(30) DEFAULT NULL,
-  `c55` varchar(30) DEFAULT NULL,
-  `c56` varchar(30) DEFAULT NULL,
-  `c57` varchar(30) DEFAULT NULL,
-  `c58` varchar(30) DEFAULT NULL,
-  `c59` varchar(30) DEFAULT NULL,
-  `c60` varchar(30) DEFAULT NULL,
-  `c61` varchar(30) DEFAULT NULL,
-  `c62` varchar(30) DEFAULT NULL,
-  `c63` varchar(30) DEFAULT NULL,
-  `c64` varchar(30) DEFAULT NULL,
-  `c65` varchar(30) DEFAULT NULL,
-  `c66` varchar(30) DEFAULT NULL,
-  `c67` varchar(30) DEFAULT NULL,
-  `c68` varchar(30) DEFAULT NULL,
-  `c69` varchar(30) DEFAULT NULL,
-  `c70` varchar(30) DEFAULT NULL,
-  `c71` varchar(30) DEFAULT NULL,
-  `c72` varchar(30) DEFAULT NULL,
-  `c73` varchar(30) DEFAULT NULL,
-  `c74` varchar(30) DEFAULT NULL,
-  `c75` varchar(30) DEFAULT NULL,
-  `c76` varchar(30) DEFAULT NULL,
-  `c77` varchar(30) DEFAULT NULL,
-  `c78` varchar(30) DEFAULT NULL,
-  `c79` varchar(30) DEFAULT NULL,
-  `c80` varchar(30) DEFAULT NULL,
-  `c81` varchar(30) DEFAULT NULL,
-  `c82` varchar(30) DEFAULT NULL,
-  `c83` varchar(30) DEFAULT NULL,
-  `c84` varchar(30) DEFAULT NULL,
-  `c85` varchar(30) DEFAULT NULL,
-  `c86` varchar(30) DEFAULT NULL,
-  `c87` varchar(30) DEFAULT NULL,
-  `c88` varchar(30) DEFAULT NULL,
-  `c89` varchar(30) DEFAULT NULL,
-  `c90` varchar(30) DEFAULT NULL,
-  `c91` varchar(30) DEFAULT NULL,
-  `c92` varchar(30) DEFAULT NULL,
-  `c93` varchar(30) DEFAULT NULL,
-  `c94` varchar(30) DEFAULT NULL,
-  `c95` varchar(30) DEFAULT NULL,
-  `c96` varchar(30) DEFAULT NULL,
-  `c97` varchar(30) DEFAULT NULL,
-  `c98` varchar(30) DEFAULT NULL,
-  `c99` varchar(30) DEFAULT NULL,
-  `c100` varchar(30) DEFAULT NULL,
-  `c101` varchar(30) DEFAULT NULL,
-  `c102` varchar(30) DEFAULT NULL,
-  `c103` varchar(30) DEFAULT NULL,
-  `c104` varchar(30) DEFAULT NULL,
-  `c105` varchar(30) DEFAULT NULL,
-  `c106` varchar(30) DEFAULT NULL,
-  `c107` varchar(30) DEFAULT NULL,
-  `c108` varchar(30) DEFAULT NULL,
-  `c109` varchar(30) DEFAULT NULL,
-  `c110` varchar(30) DEFAULT NULL,
-  `c111` varchar(30) DEFAULT NULL,
-  `c112` varchar(30) DEFAULT NULL,
-  `c113` varchar(30) DEFAULT NULL,
-  `c114` varchar(30) DEFAULT NULL,
-  `c115` varchar(30) DEFAULT NULL,
-  `c116` varchar(30) DEFAULT NULL,
-  `c117` varchar(30) DEFAULT NULL,
-  `c118` varchar(30) DEFAULT NULL,
-  `c119` varchar(30) DEFAULT NULL,
-  `c120` varchar(30) DEFAULT NULL,
-  `c121` varchar(30) DEFAULT NULL,
-  `c122` varchar(30) DEFAULT NULL,
-  `c123` varchar(30) DEFAULT NULL,
-  `c124` varchar(30) DEFAULT NULL,
-  `c125` varchar(30) DEFAULT NULL,
-  `c126` varchar(30) DEFAULT NULL,
-  PRIMARY KEY (`c1`)
-) ENGINE=InnoDB;
 
--- echo ### TABLE with field_metadata_size == 251
+-- let $generated_sql= $MYSQLTEST_VARDIR/tmp/b50018.sql
+-- let B50018_FILE= $generated_sql
 
-CREATE TABLE `t2` (
-  `c1` float,
-  `c2` varchar(30) NOT NULL,
-  `c3` varchar(30) DEFAULT NULL,
-  `c4` varchar(30) DEFAULT NULL,
-  `c5` varchar(30) DEFAULT NULL,
-  `c6` varchar(30) DEFAULT NULL,
-  `c7` varchar(30) DEFAULT NULL,
-  `c8` varchar(30) DEFAULT NULL,
-  `c9` varchar(30) DEFAULT NULL,
-  `c10` varchar(30) DEFAULT NULL,
-  `c11` varchar(30) DEFAULT NULL,
-  `c12` varchar(30) DEFAULT NULL,
-  `c13` varchar(30) DEFAULT NULL,
-  `c14` varchar(30) DEFAULT NULL,
-  `c15` varchar(30) DEFAULT NULL,
-  `c16` varchar(30) DEFAULT NULL,
-  `c17` varchar(30) DEFAULT NULL,
-  `c18` varchar(30) DEFAULT NULL,
-  `c19` varchar(30) DEFAULT NULL,
-  `c20` varchar(30) DEFAULT NULL,
-  `c21` varchar(30) DEFAULT NULL,
-  `c22` varchar(30) DEFAULT NULL,
-  `c23` varchar(30) DEFAULT NULL,
-  `c24` varchar(30) DEFAULT NULL,
-  `c25` varchar(30) DEFAULT NULL,
-  `c26` varchar(30) DEFAULT NULL,
-  `c27` varchar(30) DEFAULT NULL,
-  `c28` varchar(30) DEFAULT NULL,
-  `c29` varchar(30) DEFAULT NULL,
-  `c30` varchar(30) DEFAULT NULL,
-  `c31` varchar(30) DEFAULT NULL,
-  `c32` varchar(30) DEFAULT NULL,
-  `c33` varchar(30) DEFAULT NULL,
-  `c34` varchar(30) DEFAULT NULL,
-  `c35` varchar(30) DEFAULT NULL,
-  `c36` varchar(30) DEFAULT NULL,
-  `c37` varchar(30) DEFAULT NULL,
-  `c38` varchar(30) DEFAULT NULL,
-  `c39` varchar(30) DEFAULT NULL,
-  `c40` varchar(30) DEFAULT NULL,
-  `c41` varchar(30) DEFAULT NULL,
-  `c42` varchar(30) DEFAULT NULL,
-  `c43` varchar(30) DEFAULT NULL,
-  `c44` varchar(30) DEFAULT NULL,
-  `c45` varchar(30) DEFAULT NULL,
-  `c46` varchar(30) DEFAULT NULL,
-  `c47` varchar(30) DEFAULT NULL,
-  `c48` varchar(30) DEFAULT NULL,
-  `c49` varchar(30) DEFAULT NULL,
-  `c50` varchar(30) DEFAULT NULL,
-  `c51` varchar(30) DEFAULT NULL,
-  `c52` varchar(30) DEFAULT NULL,
-  `c53` varchar(30) DEFAULT NULL,
-  `c54` varchar(30) DEFAULT NULL,
-  `c55` varchar(30) DEFAULT NULL,
-  `c56` varchar(30) DEFAULT NULL,
-  `c57` varchar(30) DEFAULT NULL,
-  `c58` varchar(30) DEFAULT NULL,
-  `c59` varchar(30) DEFAULT NULL,
-  `c60` varchar(30) DEFAULT NULL,
-  `c61` varchar(30) DEFAULT NULL,
-  `c62` varchar(30) DEFAULT NULL,
-  `c63` varchar(30) DEFAULT NULL,
-  `c64` varchar(30) DEFAULT NULL,
-  `c65` varchar(30) DEFAULT NULL,
-  `c66` varchar(30) DEFAULT NULL,
-  `c67` varchar(30) DEFAULT NULL,
-  `c68` varchar(30) DEFAULT NULL,
-  `c69` varchar(30) DEFAULT NULL,
-  `c70` varchar(30) DEFAULT NULL,
-  `c71` varchar(30) DEFAULT NULL,
-  `c72` varchar(30) DEFAULT NULL,
-  `c73` varchar(30) DEFAULT NULL,
-  `c74` varchar(30) DEFAULT NULL,
-  `c75` varchar(30) DEFAULT NULL,
-  `c76` varchar(30) DEFAULT NULL,
-  `c77` varchar(30) DEFAULT NULL,
-  `c78` varchar(30) DEFAULT NULL,
-  `c79` varchar(30) DEFAULT NULL,
-  `c80` varchar(30) DEFAULT NULL,
-  `c81` varchar(30) DEFAULT NULL,
-  `c82` varchar(30) DEFAULT NULL,
-  `c83` varchar(30) DEFAULT NULL,
-  `c84` varchar(30) DEFAULT NULL,
-  `c85` varchar(30) DEFAULT NULL,
-  `c86` varchar(30) DEFAULT NULL,
-  `c87` varchar(30) DEFAULT NULL,
-  `c88` varchar(30) DEFAULT NULL,
-  `c89` varchar(30) DEFAULT NULL,
-  `c90` varchar(30) DEFAULT NULL,
-  `c91` varchar(30) DEFAULT NULL,
-  `c92` varchar(30) DEFAULT NULL,
-  `c93` varchar(30) DEFAULT NULL,
-  `c94` varchar(30) DEFAULT NULL,
-  `c95` varchar(30) DEFAULT NULL,
-  `c96` varchar(30) DEFAULT NULL,
-  `c97` varchar(30) DEFAULT NULL,
-  `c98` varchar(30) DEFAULT NULL,
-  `c99` varchar(30) DEFAULT NULL,
-  `c100` varchar(30) DEFAULT NULL,
-  `c101` varchar(30) DEFAULT NULL,
-  `c102` varchar(30) DEFAULT NULL,
-  `c103` varchar(30) DEFAULT NULL,
-  `c104` varchar(30) DEFAULT NULL,
-  `c105` varchar(30) DEFAULT NULL,
-  `c106` varchar(30) DEFAULT NULL,
-  `c107` varchar(30) DEFAULT NULL,
-  `c108` varchar(30) DEFAULT NULL,
-  `c109` varchar(30) DEFAULT NULL,
-  `c110` varchar(30) DEFAULT NULL,
-  `c111` varchar(30) DEFAULT NULL,
-  `c112` varchar(30) DEFAULT NULL,
-  `c113` varchar(30) DEFAULT NULL,
-  `c114` varchar(30) DEFAULT NULL,
-  `c115` varchar(30) DEFAULT NULL,
-  `c116` varchar(30) DEFAULT NULL,
-  `c117` varchar(30) DEFAULT NULL,
-  `c118` varchar(30) DEFAULT NULL,
-  `c119` varchar(30) DEFAULT NULL,
-  `c120` varchar(30) DEFAULT NULL,
-  `c121` varchar(30) DEFAULT NULL,
-  `c122` varchar(30) DEFAULT NULL,
-  `c123` varchar(30) DEFAULT NULL,
-  `c124` varchar(30) DEFAULT NULL,
-  `c125` varchar(30) DEFAULT NULL,
-  `c126` varchar(30) DEFAULT NULL,
-  PRIMARY KEY (`c1`)
-) ENGINE=InnoDB;
-
-LOCK TABLES `t1` WRITE;
-INSERT INTO `t1` VALUES ('1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1');
-
-
-LOCK TABLES `t2` WRITE;
-INSERT INTO `t2` VALUES ('1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1');
-
-DROP TABLE `t1`;
-DROP TABLE `t2`;
-
-FLUSH LOGS;
+-- echo ### action: generating several tables with different metadata 
+-- echo ###         sizes (resorting to perl)
+-- perl
+my $file= $ENV{'B50018_FILE'};
+open(FILE, ">", "$file") or die "Unable to open bug 50018 generated SQL file: $!" ;
+
+my $tables= "";
+my $ntables= 10;
+my $base_ncols= 124;
+
+for my $i (1..$ntables)
+{
+  my $ncols= $base_ncols + $i;
+  my $metadata_size= $ncols_variable * 2 + 1; 
+
+  print FILE "-- echo ### testing table with " . ($base_ncols*2 + $i) . " field metadata size.\n";
+  print FILE "CREATE TABLE t$i (\n";
+  for my $n (1..$base_ncols)
+  {
+    print FILE "c$n VARCHAR(30) NOT NULL DEFAULT 'BUG#50018',\n";
+  }
+
+  for my $n (1..$i)
+  {
+    print FILE "c" . ($base_ncols+$n) . " FLOAT NOT NULL DEFAULT 0";
+    if ($n < $i)
+    {
+      print FILE ",\n";
+    }
+  }
+
+  print FILE ") Engine=InnoDB;\n";
+
+  $tables.= " t$i WRITE";
+  if ($i < $ntables)
+  {
+    $tables .=",";
+  }
+    
+  print FILE "LOCK TABLES t$i WRITE;\n";
+  print FILE "INSERT INTO t$i(c". ($base_ncols+1) . ") VALUES (50018);\n";
+}
+
+close(FILE);
+
+EOF
+
+## we don't need this in the result file
+## however, for debugging purposes you 
+## may want to reactivate query logging
+-- disable_query_log 
+-- source $generated_sql
+UNLOCK TABLES;
+-- enable_query_log
 
 -- sync_slave_with_master
-
 -- connection master
 
--- echo === Using mysqlbinlog to detect failure. Before the patch mysqlbinlog would find a corrupted event, thence would fail.
+FLUSH LOGS;
 
+-- let $ntables=10
+while($ntables)
+{
+  -- echo ### assertion: the slave replicated event successfully and tables match for t$ntables
+  -- let $diff_table_1=master:test.t$ntables
+  -- let $diff_table_2=slave:test.t$ntables
+  -- source include/diff_tables.inc
+
+  -- connection master
+  -- disable_query_log
+  -- eval DROP TABLE t$ntables
+  -- enable_query_log
+  -- sync_slave_with_master
+  -- connection master
+
+  -- dec $ntables
+}
+
+-- echo ### assertion: check that binlog is not corrupt. Using mysqlbinlog to 
+-- echo ###            detect failure. Before the patch mysqlbinlog would find 
+-- echo ###            a corrupted event, thence would fail.
 -- let $MYSQLD_DATADIR= `SELECT @@datadir`;
--- exec $MYSQL_BINLOG $MYSQLD_DATADIR/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug50018.binlog
--- remove_file $MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug50018.binlog
+-- exec $MYSQL_BINLOG -v --hex $MYSQLD_DATADIR/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug50018.binlog
 
+## clean up
+## For debugging purposes you might want not to remove these
+-- remove_file $MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug50018.binlog
+-- remove_file $generated_sql
 -- source include/master-slave-end.inc


Attachment: [text/bzr-bundle] bzr/luis.soares@sun.com-20100107174554-z2eopm57mdemok3p.bundle
Thread
bzr commit into mysql-5.1-bugteam branch (luis.soares:3304) Bug#50018Luis Soares7 Jan
  • Re: bzr commit into mysql-5.1-bugteam branch (luis.soares:3304)Bug#50018He Zhenxing8 Jan
    • Re: bzr commit into mysql-5.1-bugteam branch (luis.soares:3304)Bug#50018Luís Soares8 Jan
  • Re: bzr commit into mysql-5.1-bugteam branch (luis.soares:3304)Bug#50018Daogang Qu8 Jan
    • Re: bzr commit into mysql-5.1-bugteam branch (luis.soares:3304)Bug#50018Luís Soares8 Jan
      • Re: bzr commit into mysql-5.1-bugteam branch (luis.soares:3304)Bug#50018Daogang Qu8 Jan