List:Commits« Previous MessageNext Message »
From:cbell Date:August 30 2007 4:04pm
Subject:bk commit into 5.1 tree (cbell:1.2569) BUG#26395
View as plain text  
Below is the list of changes that have just been committed into a local
5.1 repository of cbell. When cbell does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@stripped, 2007-08-30 12:03:41-04:00, cbell@mysql_cab_desk. +11 -0
  BUG#26395 : if crash during autocommit update to transactional table on master, slave fails
  
  This patch includes updates to the rpl tests affected by adding code to
  the mysql-5.0 tree to prevent crash during autocommit if transaction is
  aborted before COMMIT is issued (or read). This is accomplished by
  adding a BEGIN when a transaction engine is used in MYSQL_BIN_LOG::write().

  mysql-test/extra/rpl_tests/rpl_extraSlave_Col.test@stripped, 2007-08-30 12:03:32-04:00, cbell@mysql_cab_desk. +1 -1
    BUG#26395 if crash during autocommit update to transactional table on master, slave fails
    
    This patch updates the test to take into account the extra BEGIN 
    statements in the binlog.

  mysql-test/include/wait_until_connected_again.inc@stripped, 2007-08-30 12:03:32-04:00, cbell@mysql_cab_desk. +1 -1
    BUG#26395 if crash during autocommit update to transactional table on master, slave fails
    
    This patch updates the wait loop to take into account the error message
    generated by the new test (rpl_half_binlog_trans).

  mysql-test/suite/rpl/r/rpl_extraCol_innodb.result@stripped, 2007-08-30 12:03:33-04:00, cbell@mysql_cab_desk. +1 -1
    BUG#26395 if crash during autocommit update to transactional table on master, slave fails
    
    New result file due to the extra BEGIN statements in the binlog.

  mysql-test/suite/rpl/r/rpl_extraCol_myisam.result@stripped, 2007-08-30 12:03:33-04:00, cbell@mysql_cab_desk. +1 -1
    BUG#26395 if crash during autocommit update to transactional table on master, slave fails
    
    New result file due to the extra BEGIN statements in the binlog.

  mysql-test/suite/rpl/r/rpl_half_binlog_trans.result@stripped, 2007-08-30 12:03:36-04:00, cbell@mysql_cab_desk. +23 -0
    BUG#26395 if crash during autocommit update to transactional table on master, slave fails
    
    New result file.

  mysql-test/suite/rpl/r/rpl_half_binlog_trans.result@stripped, 2007-08-30 12:03:36-04:00, cbell@mysql_cab_desk. +0 -0

  mysql-test/suite/rpl/r/rpl_innodb_mixed_dml.result@stripped, 2007-08-30 12:03:33-04:00, cbell@mysql_cab_desk. +71 -0
    BUG#26395 if crash during autocommit update to transactional table on master, slave fails
    
    New result file due to the extra BEGIN statements in the binlog.

  mysql-test/suite/rpl/r/rpl_row_create_table.result@stripped, 2007-08-30 12:03:34-04:00, cbell@mysql_cab_desk. +9 -8
    BUG#26395 if crash during autocommit update to transactional table on master, slave fails
    
    New result file due to the extra BEGIN statements in the binlog.

  mysql-test/suite/rpl/r/rpl_row_log_innodb.result@stripped, 2007-08-30 12:03:34-04:00, cbell@mysql_cab_desk. +16 -8
    BUG#26395 if crash during autocommit update to transactional table on master, slave fails
    
    New result file due to the extra BEGIN statements in the binlog.

  mysql-test/suite/rpl/r/rpl_truncate_3innodb.result@stripped, 2007-08-30 12:03:35-04:00, cbell@mysql_cab_desk. +12 -0
    BUG#26395 if crash during autocommit update to transactional table on master, slave fails
    
    New result file due to the extra BEGIN statements in the binlog.

  mysql-test/suite/rpl/t/rpl_half_binlog_trans.test@stripped, 2007-08-30 12:03:36-04:00, cbell@mysql_cab_desk. +38 -0
    BUG#26395 if crash during autocommit update to transactional table on master, slave fails
    
    New test to test for the bug.

  mysql-test/suite/rpl/t/rpl_half_binlog_trans.test@stripped, 2007-08-30 12:03:36-04:00, cbell@mysql_cab_desk. +0 -0

  sql/log.cc@stripped, 2007-08-30 12:03:35-04:00, cbell@mysql_cab_desk. +4 -0
    BUG#26395 : if crash during autocommit update to transactional table on master, slave fails
    
    This patch adds the code to enable detection of the bug via debug. It is
    used in the new test (repl_half_binlog_trans).

diff -Nrup a/mysql-test/extra/rpl_tests/rpl_extraSlave_Col.test b/mysql-test/extra/rpl_tests/rpl_extraSlave_Col.test
--- a/mysql-test/extra/rpl_tests/rpl_extraSlave_Col.test	2007-08-10 12:46:35 -04:00
+++ b/mysql-test/extra/rpl_tests/rpl_extraSlave_Col.test	2007-08-30 12:03:32 -04:00
@@ -736,7 +736,7 @@ connection slave;
 --replace_result $MASTER_MYPORT MASTER_PORT
 --replace_column 1 # 4 # 7 # 8 # 9 # 16 # 22 # 23 # 33 # 35 # 36 #
 --query_vertical SHOW SLAVE STATUS
-SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
+SET GLOBAL SQL_SLAVE_SKIP_COUNTER=3;
 START SLAVE;
 
 --echo *** Try to insert in master ****
diff -Nrup a/mysql-test/include/wait_until_connected_again.inc b/mysql-test/include/wait_until_connected_again.inc
--- a/mysql-test/include/wait_until_connected_again.inc	2006-09-28 05:53:40 -04:00
+++ b/mysql-test/include/wait_until_connected_again.inc	2007-08-30 12:03:32 -04:00
@@ -6,7 +6,7 @@
 let $counter= 500;
 while ($mysql_errno)
 {
-  --error 0,2002,2006
+  --error 0,2002,2006,2003
   show status;
 
   dec $counter;
diff -Nrup a/mysql-test/suite/rpl/r/rpl_extraCol_innodb.result b/mysql-test/suite/rpl/r/rpl_extraCol_innodb.result
--- a/mysql-test/suite/rpl/r/rpl_extraCol_innodb.result	2007-08-16 11:26:29 -04:00
+++ b/mysql-test/suite/rpl/r/rpl_extraCol_innodb.result	2007-08-30 12:03:33 -04:00
@@ -707,7 +707,7 @@ Last_IO_Errno	#
 Last_IO_Error	#
 Last_SQL_Errno	1060
 Last_SQL_Error	Error 'Duplicate column name 'c6'' on query. Default database: 'test'. Query: 'ALTER TABLE t15 ADD COLUMN c6 INT AFTER c5'
-SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
+SET GLOBAL SQL_SLAVE_SKIP_COUNTER=3;
 START SLAVE;
 *** Try to insert in master ****
 INSERT INTO t15 () VALUES(5,2.00,'Replication Testing',@b1,'Buda',2);
diff -Nrup a/mysql-test/suite/rpl/r/rpl_extraCol_myisam.result b/mysql-test/suite/rpl/r/rpl_extraCol_myisam.result
--- a/mysql-test/suite/rpl/r/rpl_extraCol_myisam.result	2007-08-16 11:26:29 -04:00
+++ b/mysql-test/suite/rpl/r/rpl_extraCol_myisam.result	2007-08-30 12:03:33 -04:00
@@ -707,7 +707,7 @@ Last_IO_Errno	#
 Last_IO_Error	#
 Last_SQL_Errno	1060
 Last_SQL_Error	Error 'Duplicate column name 'c6'' on query. Default database: 'test'. Query: 'ALTER TABLE t15 ADD COLUMN c6 INT AFTER c5'
-SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
+SET GLOBAL SQL_SLAVE_SKIP_COUNTER=3;
 START SLAVE;
 *** Try to insert in master ****
 INSERT INTO t15 () VALUES(5,2.00,'Replication Testing',@b1,'Buda',2);
diff -Nrup a/mysql-test/suite/rpl/r/rpl_half_binlog_trans.result b/mysql-test/suite/rpl/r/rpl_half_binlog_trans.result
--- /dev/null	Wed Dec 31 16:00:00 196900
+++ b/mysql-test/suite/rpl/r/rpl_half_binlog_trans.result	2007-08-30 12:03:36 -04:00
@@ -0,0 +1,23 @@
+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 SESSION debug="d,half_binlogged_transaction";
+CREATE TABLE t(a int) ENGINE=INNODB;
+SHOW CREATE TABLE t;
+Table	Create Table
+t	CREATE TABLE `t` (
+  `a` int(11) DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+INSERT INTO t VALUES(1);
+ERROR HY000: Lost connection to MySQL server during query
+SELECT * FROM t;
+a
+STOP SLAVE;
+RESET SLAVE;
+START SLAVE;
+SELECT * FROM t;
+a
+DROP TABLE t;
diff -Nrup a/mysql-test/suite/rpl/r/rpl_innodb_mixed_dml.result b/mysql-test/suite/rpl/r/rpl_innodb_mixed_dml.result
--- a/mysql-test/suite/rpl/r/rpl_innodb_mixed_dml.result	2007-08-20 05:24:21 -04:00
+++ b/mysql-test/suite/rpl/r/rpl_innodb_mixed_dml.result	2007-08-30 12:03:33 -04:00
@@ -835,108 +835,158 @@ master-bin.000001	#	Format_desc	1	#	Serv
 master-bin.000001	#	Query	1	#	CREATE DATABASE test_rpl
 master-bin.000001	#	Query	1	#	use `test_rpl`; CREATE TABLE t1 (a int auto_increment not null, b char(254), PRIMARY KEY(a)) ENGINE=innodb
 master-bin.000001	#	Query	1	#	use `test_rpl`; CREATE TABLE t2 (a int auto_increment not null, b char(254), PRIMARY KEY(a)) ENGINE=innodb
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; INSERT INTO t1 VALUES(1, 't1, text 1')
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; INSERT INTO t1 VALUES(2, 't1, text 2')
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; INSERT INTO t2 VALUES(1, 't2, text 1')
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; DELETE FROM t1 WHERE a = 1
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Table_map	1	#	table_id: # (test_rpl.t2)
 master-bin.000001	#	Delete_rows	1	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; DELETE FROM t1
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; DELETE FROM t2
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; INSERT INTO t1 VALUES(1, 't1, text 1')
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Table_map	1	#	table_id: # (test_rpl.t1)
 master-bin.000001	#	Write_rows	1	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; INSERT INTO t2 SELECT * FROM t1
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; INSERT INTO t2 VALUES (1, 't1, text 1') ON DUPLICATE KEY UPDATE b = 't2, text 1'
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; DELETE FROM t1 WHERE a = 2
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; DELETE FROM t2 WHERE a = 2
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; DELETE FROM t1
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; DELETE FROM t2
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Begin_load_query	1	#	;file_id=#;block_len=#
 master-bin.000001	#	Execute_load_query	1	#	use `test_rpl`; LOAD DATA INFILE '../tmp/rpl_mixed.dat' INTO TABLE t1 FIELDS TERMINATED BY '|' ;file_id=#
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; DELETE FROM t1
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; DELETE FROM t2
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; INSERT INTO t1 VALUES(1, 't1, text 1')
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; INSERT INTO t1 VALUES(2, 't1, text 2')
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; INSERT INTO t1 VALUES(3, 't1, text 3')
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; REPLACE INTO t1 VALUES(1, 't1, text 11')
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Table_map	1	#	table_id: # (test_rpl.t1)
 master-bin.000001	#	Update_rows	1	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; REPLACE INTO t1 SET a=3, b='t1, text 33'
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; DELETE FROM t1 WHERE a = 2
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; DELETE FROM t1
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; DELETE FROM t2
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; INSERT INTO t1 VALUES(1, 't1, text 1')
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; DELETE FROM t1
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; DELETE FROM t2
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; INSERT INTO t1 VALUES(1, 'CCC')
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; INSERT INTO t1 VALUES(2, 'DDD')
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; INSERT INTO t2 VALUES(1, 'DDD')
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; INSERT INTO t2 VALUES(2, 'CCC')
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; DELETE FROM t1
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; DELETE FROM t2
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; INSERT INTO t1 VALUES(1, 't1, text 1')
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; INSERT INTO t2 VALUES(1, 't2, text 1')
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; DELETE FROM t1
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; DELETE FROM t2
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; INSERT INTO t1 VALUES(1, 't1, text 1')
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; TRUNCATE t1
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; DELETE FROM t1
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; DELETE FROM t2
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; INSERT INTO t1 VALUES(1, 't1, text 1')
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; INSERT INTO t2 VALUES(1, 't2, text 1')
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; UPDATE t1 SET b = 't1, text 1 updated' WHERE a = 1
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; UPDATE t1, t2 SET t1.b = 'test', t2.b = 'test'
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; DELETE FROM t1
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; DELETE FROM t2
 master-bin.000001	#	Xid	1	#	#
 master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
@@ -952,10 +1002,13 @@ master-bin.000001	#	Query	1	#	use `test_
 master-bin.000001	#	Table_map	1	#	table_id: # (test_rpl.t1)
 master-bin.000001	#	Write_rows	1	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; DELETE FROM t1 WHERE a = 7
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; DELETE FROM t1
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; DELETE FROM t2
 master-bin.000001	#	Xid	1	#	#
 master-bin.000001	#	Query	1	#	use `test_rpl`; CREATE USER 'user_test_rpl'@'localhost' IDENTIFIED BY PASSWORD '*1111111111111111111111111111111111111111'
@@ -964,6 +1017,7 @@ master-bin.000001	#	Query	1	#	use `test_
 master-bin.000001	#	Query	1	#	use `test_rpl`; SET PASSWORD FOR 'user_test_rpl'@'localhost'='*0000000000000000000000000000000000000000'
 master-bin.000001	#	Query	1	#	use `test_rpl`; RENAME USER 'user_test_rpl'@'localhost' TO 'user_test_rpl_2'@'localhost'
 master-bin.000001	#	Query	1	#	use `test_rpl`; DROP USER 'user_test_rpl_2'@'localhost'
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; INSERT INTO t1 VALUES(100, 'test')
 master-bin.000001	#	Xid	1	#	#
 master-bin.000001	#	Query	1	#	use `test_rpl`; ANALYZE TABLE t1
@@ -977,50 +1031,65 @@ master-bin.000001	#	Query	1	#	use `test_
 BEGIN
 UPDATE t1 SET b = UUID() WHERE a = 202;
 END
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; INSERT  INTO t1 VALUES(201, 'test 201')
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; UPDATE t1 SET b = 'test' WHERE a = 201
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; INSERT  INTO t1 VALUES(202, 'test 202')
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Table_map	1	#	table_id: # (test_rpl.t1)
 master-bin.000001	#	Update_rows	1	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; DELETE FROM t1 WHERE a = 202
 master-bin.000001	#	Xid	1	#	#
 master-bin.000001	#	Query	1	#	use `test_rpl`; ALTER PROCEDURE p1 COMMENT 'p1'
 master-bin.000001	#	Query	1	#	use `test_rpl`; DROP PROCEDURE p1
 master-bin.000001	#	Query	1	#	use `test_rpl`; DROP PROCEDURE p2
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; DELETE FROM t1
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; DELETE FROM t2
 master-bin.000001	#	Xid	1	#	#
 master-bin.000001	#	Query	1	#	use `test_rpl`; CREATE DEFINER=`root`@`localhost` TRIGGER tr1 BEFORE INSERT ON t1
 FOR EACH ROW BEGIN
 INSERT INTO t2 SET a = NEW.a, b = NEW.b;
 END
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Table_map	1	#	table_id: # (test_rpl.t1)
 master-bin.000001	#	Table_map	1	#	table_id: # (test_rpl.t2)
 master-bin.000001	#	Write_rows	1	#	table_id: #
 master-bin.000001	#	Write_rows	1	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; DELETE FROM t1
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; DELETE FROM t2
 master-bin.000001	#	Xid	1	#	#
 master-bin.000001	#	Query	1	#	use `test_rpl`; DROP TRIGGER tr1
 master-bin.000001	#	Query	1	#	use `test_rpl`; GRANT EVENT ON *.* TO 'root'@'localhost'
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; INSERT INTO t1 VALUES(1, 'test1')
 master-bin.000001	#	Xid	1	#	#
 master-bin.000001	#	Query	1	#	use `test_rpl`; CREATE EVENT e1 ON SCHEDULE EVERY '1' SECOND COMMENT 'e_second_comment' DO DELETE FROM t1
 master-bin.000001	#	Query	1	#	use `test_rpl`; ALTER EVENT e1 RENAME TO e2
 master-bin.000001	#	Query	1	#	use `test_rpl`; DROP EVENT e2
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; DELETE FROM t1
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; DELETE FROM t2
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; INSERT INTO t1 VALUES(1, 'test1')
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; INSERT INTO t1 VALUES(2, 'test2')
 master-bin.000001	#	Xid	1	#	#
 master-bin.000001	#	Query	1	#	use `test_rpl`; CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS SELECT * FROM t1 WHERE a = 1
@@ -1028,8 +1097,10 @@ master-bin.000001	#	Query	1	#	use `test_
 master-bin.000001	#	Query	1	#	use `test_rpl`; ALTER ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS SELECT * FROM t1 WHERE a = 2
 master-bin.000001	#	Query	1	#	use `test_rpl`; DROP VIEW v1
 master-bin.000001	#	Query	1	#	use `test_rpl`; DROP VIEW v2
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; DELETE FROM t1
 master-bin.000001	#	Xid	1	#	#
+master-bin.000001	#	Query	1	#	use `test_rpl`; BEGIN
 master-bin.000001	#	Query	1	#	use `test_rpl`; DELETE FROM t2
 master-bin.000001	#	Xid	1	#	#
 drop database test_rpl;
diff -Nrup a/mysql-test/suite/rpl/r/rpl_row_create_table.result b/mysql-test/suite/rpl/r/rpl_row_create_table.result
--- a/mysql-test/suite/rpl/r/rpl_row_create_table.result	2007-08-02 16:15:03 -04:00
+++ b/mysql-test/suite/rpl/r/rpl_row_create_table.result	2007-08-30 12:03:34 -04:00
@@ -398,14 +398,15 @@ SELECT * FROM t2 ORDER BY a;
 a
 SHOW BINLOG EVENTS FROM 637;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-#	637	Query	#	717	use `test`; TRUNCATE TABLE t2
-#	717	Xid	#	744	COMMIT /* XID */
-#	744	Query	#	812	use `test`; BEGIN
-#	812	Table_map	#	853	table_id: # (test.t2)
-#	853	Write_rows	#	897	table_id: # flags: STMT_END_F
-#	897	Table_map	#	938	table_id: # (test.t2)
-#	938	Write_rows	#	977	table_id: # flags: STMT_END_F
-#	977	Query	#	1048	use `test`; ROLLBACK
+#	637	Query	#	705	use `test`; BEGIN
+#	705	Query	#	785	use `test`; TRUNCATE TABLE t2
+#	785	Xid	#	812	COMMIT /* XID */
+#	812	Query	#	880	use `test`; BEGIN
+#	880	Table_map	#	921	table_id: # (test.t2)
+#	921	Write_rows	#	965	table_id: # flags: STMT_END_F
+#	965	Table_map	#	1006	table_id: # (test.t2)
+#	1006	Write_rows	#	1045	table_id: # flags: STMT_END_F
+#	1045	Query	#	1116	use `test`; ROLLBACK
 SELECT * FROM t2 ORDER BY a;
 a
 DROP TABLE t1,t2;
diff -Nrup a/mysql-test/suite/rpl/r/rpl_row_log_innodb.result b/mysql-test/suite/rpl/r/rpl_row_log_innodb.result
--- a/mysql-test/suite/rpl/r/rpl_row_log_innodb.result	2007-07-29 18:10:17 -04:00
+++ b/mysql-test/suite/rpl/r/rpl_row_log_innodb.result	2007-08-30 12:03:34 -04:00
@@ -20,11 +20,13 @@ show binlog events;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
 master-bin.000001	#	Format_desc	1	#	Server ver: VERSION, Binlog ver: 4
 master-bin.000001	#	Query	1	#	use `test`; create table t1(n int not null auto_increment primary key)ENGINE=InnoDB
+master-bin.000001	#	Query	1	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	1	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	1	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Xid	1	#	COMMIT /* XID */
 master-bin.000001	#	Query	1	#	use `test`; drop table t1
 master-bin.000001	#	Query	1	#	use `test`; create table t1 (word char(20) not null)ENGINE=InnoDB
+master-bin.000001	#	Query	1	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	1	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	1	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Xid	1	#	COMMIT /* XID */
@@ -34,10 +36,10 @@ master-bin.000001	#	Query	1	#	use `test`
 show binlog events from 106 limit 2;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
 master-bin.000001	#	Query	1	#	use `test`; create table t1(n int not null auto_increment primary key)ENGINE=InnoDB
-master-bin.000001	#	Table_map	1	#	table_id: # (test.t1)
+master-bin.000001	#	Query	1	#	use `test`; BEGIN
 show binlog events from 106 limit 2,1;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	#	Write_rows	1	#	table_id: # flags: STMT_END_F
+master-bin.000001	#	Table_map	1	#	table_id: # (test.t1)
 flush logs;
 create table t3 (a int)ENGINE=InnoDB;
 select * from t1 order by 1 asc;
@@ -194,11 +196,13 @@ insert into t2 values (1);
 show binlog events from <binlog_start>;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
 master-bin.000001	#	Query	#	#	use `test`; create table t1(n int not null auto_increment primary key)ENGINE=InnoDB
+master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Xid	#	#	COMMIT /* XID */
 master-bin.000001	#	Query	#	#	use `test`; drop table t1
 master-bin.000001	#	Query	#	#	use `test`; create table t1 (word char(20) not null)ENGINE=InnoDB
+master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Xid	#	#	COMMIT /* XID */
@@ -208,27 +212,30 @@ Log_name	Pos	Event_type	Server_id	End_lo
 master-bin.000002	#	Format_desc	1	#	Server ver: VERSION, Binlog ver: 4
 master-bin.000002	#	Query	1	#	use `test`; create table t3 (a int)ENGINE=InnoDB
 master-bin.000002	#	Query	1	#	use `test`; create table t2 (n int)ENGINE=InnoDB
+master-bin.000002	#	Query	1	#	use `test`; BEGIN
 master-bin.000002	#	Table_map	1	#	table_id: # (test.t2)
 master-bin.000002	#	Write_rows	1	#	table_id: # flags: STMT_END_F
 master-bin.000002	#	Xid	1	#	COMMIT /* XID */
 show binary logs;
 Log_name	File_size
-master-bin.000001	1320
-master-bin.000002	406
+master-bin.000001	1456
+master-bin.000002	474
 start slave;
 show binary logs;
 Log_name	File_size
-slave-bin.000001	1418
-slave-bin.000002	307
+slave-bin.000001	1536
+slave-bin.000002	366
 show binlog events in 'slave-bin.000001' from 4;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
 slave-bin.000001	#	Format_desc	2	#	Server ver: VERSION, Binlog ver: 4
 slave-bin.000001	#	Query	1	#	use `test`; create table t1(n int not null auto_increment primary key)ENGINE=InnoDB
+slave-bin.000001	#	Query	1	#	BEGIN
 slave-bin.000001	#	Table_map	1	#	table_id: # (test.t1)
 slave-bin.000001	#	Write_rows	1	#	table_id: # flags: STMT_END_F
 slave-bin.000001	#	Xid	1	#	COMMIT /* XID */
 slave-bin.000001	#	Query	1	#	use `test`; drop table t1
 slave-bin.000001	#	Query	1	#	use `test`; create table t1 (word char(20) not null)ENGINE=InnoDB
+slave-bin.000001	#	Query	1	#	BEGIN
 slave-bin.000001	#	Table_map	1	#	table_id: # (test.t1)
 slave-bin.000001	#	Write_rows	1	#	table_id: # flags: STMT_END_F
 slave-bin.000001	#	Xid	1	#	COMMIT /* XID */
@@ -238,6 +245,7 @@ show binlog events in 'slave-bin.000002'
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
 slave-bin.000002	#	Format_desc	2	#	Server ver: VERSION, Binlog ver: 4
 slave-bin.000002	#	Query	1	#	use `test`; create table t2 (n int)ENGINE=InnoDB
+slave-bin.000002	#	Query	1	#	BEGIN
 slave-bin.000002	#	Table_map	1	#	table_id: # (test.t2)
 slave-bin.000002	#	Write_rows	1	#	table_id: # flags: STMT_END_F
 slave-bin.000002	#	Xid	1	#	COMMIT /* XID */
@@ -248,7 +256,7 @@ Master_User	root
 Master_Port	MASTER_PORT
 Connect_Retry	1
 Master_Log_File	master-bin.000002
-Read_Master_Log_Pos	406
+Read_Master_Log_Pos	474
 Relay_Log_File	#
 Relay_Log_Pos	#
 Relay_Master_Log_File	master-bin.000002
@@ -263,7 +271,7 @@ Replicate_Wild_Ignore_Table	
 Last_Errno	0
 Last_Error	
 Skip_Counter	0
-Exec_Master_Log_Pos	406
+Exec_Master_Log_Pos	474
 Relay_Log_Space	#
 Until_Condition	None
 Until_Log_File	
diff -Nrup a/mysql-test/suite/rpl/r/rpl_truncate_3innodb.result b/mysql-test/suite/rpl/r/rpl_truncate_3innodb.result
--- a/mysql-test/suite/rpl/r/rpl_truncate_3innodb.result	2007-06-27 08:27:24 -04:00
+++ b/mysql-test/suite/rpl/r/rpl_truncate_3innodb.result	2007-08-30 12:03:35 -04:00
@@ -32,8 +32,10 @@ DROP TABLE t1;
 show binlog events from <binlog_start>;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
 master-bin.000001	#	Query	#	#	use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=InnoDB
+master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Query	#	#	use `test`; INSERT INTO t1 VALUES (1,1), (2,2)
 master-bin.000001	#	Xid	#	#	COMMIT /* XID */
+master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Query	#	#	use `test`; TRUNCATE TABLE t1
 master-bin.000001	#	Xid	#	#	COMMIT /* XID */
 master-bin.000001	#	Query	#	#	use `test`; DROP TABLE t1
@@ -65,8 +67,10 @@ DROP TABLE t1;
 show binlog events from <binlog_start>;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
 master-bin.000001	#	Query	#	#	use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=InnoDB
+master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Query	#	#	use `test`; INSERT INTO t1 VALUES (1,1), (2,2)
 master-bin.000001	#	Xid	#	#	COMMIT /* XID */
+master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Query	#	#	use `test`; TRUNCATE TABLE t1
 master-bin.000001	#	Xid	#	#	COMMIT /* XID */
 master-bin.000001	#	Query	#	#	use `test`; DROP TABLE t1
@@ -98,9 +102,11 @@ DROP TABLE t1;
 show binlog events from <binlog_start>;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
 master-bin.000001	#	Query	#	#	use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=InnoDB
+master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Xid	#	#	COMMIT /* XID */
+master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Query	#	#	use `test`; TRUNCATE TABLE t1
 master-bin.000001	#	Xid	#	#	COMMIT /* XID */
 master-bin.000001	#	Query	#	#	use `test`; DROP TABLE t1
@@ -132,8 +138,10 @@ DROP TABLE t1;
 show binlog events from <binlog_start>;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
 master-bin.000001	#	Query	#	#	use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=InnoDB
+master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Query	#	#	use `test`; INSERT INTO t1 VALUES (1,1), (2,2)
 master-bin.000001	#	Xid	#	#	COMMIT /* XID */
+master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Query	#	#	use `test`; DELETE FROM t1
 master-bin.000001	#	Xid	#	#	COMMIT /* XID */
 master-bin.000001	#	Query	#	#	use `test`; DROP TABLE t1
@@ -165,8 +173,10 @@ DROP TABLE t1;
 show binlog events from <binlog_start>;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
 master-bin.000001	#	Query	#	#	use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=InnoDB
+master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Query	#	#	use `test`; INSERT INTO t1 VALUES (1,1), (2,2)
 master-bin.000001	#	Xid	#	#	COMMIT /* XID */
+master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Query	#	#	use `test`; DELETE FROM t1
 master-bin.000001	#	Xid	#	#	COMMIT /* XID */
 master-bin.000001	#	Query	#	#	use `test`; DROP TABLE t1
@@ -199,9 +209,11 @@ DROP TABLE t1;
 show binlog events from <binlog_start>;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
 master-bin.000001	#	Query	#	#	use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=InnoDB
+master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Xid	#	#	COMMIT /* XID */
+master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Delete_rows	#	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Xid	#	#	COMMIT /* XID */
diff -Nrup a/mysql-test/suite/rpl/t/rpl_half_binlog_trans.test b/mysql-test/suite/rpl/t/rpl_half_binlog_trans.test
--- /dev/null	Wed Dec 31 16:00:00 196900
+++ b/mysql-test/suite/rpl/t/rpl_half_binlog_trans.test	2007-08-30 12:03:36 -04:00
@@ -0,0 +1,38 @@
+-- source include/not_embedded.inc
+
+# Binary must be compiled with debug for crash to occur
+--source include/have_debug.inc
+
+--source include/have_innodb.inc
+--source include/master-slave.inc
+
+# BUG 26935 Test for half binlogged transaction
+
+# Setup the mysqld to crash at certain point
+SET SESSION debug="d,half_binlogged_transaction";
+
+# Write file to make mysql-test-run.pl expect crash and restart
+--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/master0.expect
+
+connection master;
+CREATE TABLE t(a int) ENGINE=INNODB;
+SHOW CREATE TABLE t;
+--error 2013
+INSERT INTO t VALUES(1);
+
+# Turn on reconnect
+--enable_reconnect
+
+# Call script that will poll the server waiting for it to be back online again
+--source include/wait_until_connected_again.inc
+
+connection master;
+SELECT * FROM t;
+
+connection slave;
+STOP SLAVE;
+RESET SLAVE;
+START SLAVE;
+SELECT * FROM t;
+
+DROP TABLE t;
diff -Nrup a/sql/log.cc b/sql/log.cc
--- a/sql/log.cc	2007-08-27 07:43:57 -04:00
+++ b/sql/log.cc	2007-08-30 12:03:35 -04:00
@@ -3987,8 +3987,12 @@ bool MYSQL_BIN_LOG::write(THD *thd, IO_C
       if ((write_error= write_cache(cache, false, false)))
         goto err;
 
+      DBUG_EXECUTE_IF("half_binlogged_transaction", goto DBUG_skip_commit;);
       if (commit_event && commit_event->write(&log_file))
         goto err;
+#ifndef DBUG_OFF
+DBUG_skip_commit:
+#endif
       if (flush_and_sync())
         goto err;
       DBUG_EXECUTE_IF("half_binlogged_transaction", abort(););

Thread
bk commit into 5.1 tree (cbell:1.2569) BUG#26395cbell30 Aug