List:Commits« Previous MessageNext Message »
From:Sven Sandberg Date:July 24 2008 8:51am
Subject:bzr push into mysql-5.1 branch (sven:2706 to 2707) Bug#38068, Bug#37493
View as plain text  
 2707 Sven Sandberg	2008-07-23
      BUG#38068: binlog_stm_binlog fails sporadically in pushbuild
      Problem: binlog_stm_binlog runs INSERT DELAYED queries, and
      then prints the contents of the binlog. Before checking the
      contents of the binlog, the test waits until the rows have
      appeared in the table. However, this is not enough, since
      INSERT DELAYED does not write rows to the binlog at the same
      time as it writes them to the table. So there is a race.
      Fix: Add a FLUSH TABLES before SHOW BINLOG EVENTS. That
      waits until the insert_delayed thread is done.
modified:
  mysql-test/extra/binlog_tests/binlog_insert_delayed.test
  mysql-test/suite/binlog/r/binlog_stm_binlog.result

 2706 Sven Sandberg	2008-07-23
      BUG#37493: rpl_trunc_temp.test nondeterministic
      Problem: the test waits for a 'DROP TEMPORARY TABLE' event to
      appear in the master's binlog, then checks on the slave whether
      the number of temporary tables has decreased. The slave does
      not sync, causing a race.
      Fix: check for the 'DROP TEMPORARY TABLE' event on slave
      instead of on master.
modified:
  mysql-test/suite/rpl/t/rpl_trunc_temp.test

=== modified file 'mysql-test/extra/binlog_tests/binlog_insert_delayed.test'
--- a/mysql-test/extra/binlog_tests/binlog_insert_delayed.test	2007-03-29 19:38:03 +0000
+++ b/mysql-test/extra/binlog_tests/binlog_insert_delayed.test	2008-07-23 16:56:39 +0000
@@ -1,17 +1,43 @@
-# Test of binlogging of INSERT_ID with INSERT DELAYED
+# ==== Purpose ====
+#
+# Verify that INSERT DELAYED in mixed or row mode writes events to the
+# binlog, and that AUTO_INCREMENT works correctly.
+#
+# ==== Method ====
+#
+# Insert both single and multiple rows into an autoincrement column,
+# both with specified value and with NULL.
+#
+# With INSERT DELAYED, the rows do not show up in the table
+# immediately, so we must do source include/wait_until_rows_count.inc
+# between any two INSERT DELAYED statements.  Moreover, if mixed or
+# row-based logging is used, there is also a delay between when rows
+# show up in the table and when they show up in the binlog.  To ensure
+# that the rows show up in the binlog, we call FLUSH TABLES, which
+# waits until the delayed_insert thread has finished.
+#
+# We cannot read the binlog after executing INSERT DELAYED statements
+# that insert multiple rows, because that is nondeterministic. More
+# precisely, rows may be written in batches to the binlog, where each
+# batch has one Table_map_log_event and one or more
+# Write_rows_log_event. The number of rows included in each batch is
+# nondeterministic.
+#
+# ==== Related bugs ====
+#
+# BUG#20627: INSERT DELAYED does not honour auto_increment_* variables
+# Bug in this test: BUG#38068: binlog_stm_binlog fails sporadically in pushbuild
+
+
 create table t1 (a int not null auto_increment, primary key (a)) engine=myisam;
-# First, avoid BUG#20627:
-set @@session.auto_increment_increment=1, @@session.auto_increment_offset=1;
-# Verify that only one INSERT_ID event is binlogged.
-# Note, that because of WL#3368 mixed mode binlog records RBR events for the delayed
-let $table=t1;
-let $rows_inserted=11; # total number of inserted rows in this test
-insert delayed into t1 values (207);
-let $count=1;
 
-# use this macro instead of sleeps.
+let $table=t1;
+let $count=0;
 
+insert delayed into t1 values (207);
+inc $count;
 --source include/wait_until_rows_count.inc
+
 insert delayed into t1 values (null);
 inc $count;
 --source include/wait_until_rows_count.inc
@@ -20,9 +46,10 @@ insert delayed into t1 values (300);
 inc $count;
 --source include/wait_until_rows_count.inc
 
-# moving binlog check affront of multi-rows queries which work is indeterministic (extra table_maps)
-# todo: better check is to substitute SHOW BINLOG with reading from binlog, probably bug#19459 is in
-# the way
+# It is not enough to wait until all rows have been inserted into the
+# table. FLUSH TABLES ensures that they are in the binlog too.  See
+# comment above.
+FLUSH TABLES;
 source include/show_binlog_events.inc;
 
 insert delayed into t1 values (null),(null),(null),(null);
@@ -33,8 +60,5 @@ insert delayed into t1 values (null),(nu
 inc $count; inc $count; inc $count; inc $count;
 --source include/wait_until_rows_count.inc
 
-#check this assertion about $count calculation
---echo $count == $rows_inserted
-
 select * from t1;
 drop table t1;

=== modified file 'mysql-test/suite/binlog/r/binlog_stm_binlog.result'
--- a/mysql-test/suite/binlog/r/binlog_stm_binlog.result	2008-03-28 12:16:41 +0000
+++ b/mysql-test/suite/binlog/r/binlog_stm_binlog.result	2008-07-23 16:56:39 +0000
@@ -629,10 +629,10 @@ master-bin.000001	#	Query	#	#	use `mysql
 master-bin.000001	#	Query	#	#	use `mysql`; DELETE FROM user WHERE host='localhost' AND user='@#@'
 drop table t1,t2,t3,tt1;
 create table t1 (a int not null auto_increment, primary key (a)) engine=myisam;
-set @@session.auto_increment_increment=1, @@session.auto_increment_offset=1;
 insert delayed into t1 values (207);
 insert delayed into t1 values (null);
 insert delayed into t1 values (300);
+FLUSH TABLES;
 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 (id tinyint auto_increment primary key)
@@ -660,9 +660,9 @@ master-bin.000001	#	Query	#	#	use `test`
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Query	#	#	use `test`; COMMIT
+master-bin.000001	#	Query	#	#	use `test`; FLUSH TABLES
 insert delayed into t1 values (null),(null),(null),(null);
 insert delayed into t1 values (null),(null),(400),(null);
-11 == 11
 select * from t1;
 a
 207

Thread
bzr push into mysql-5.1 branch (sven:2706 to 2707) Bug#38068, Bug#37493Sven Sandberg24 Jul