List:Commits« Previous MessageNext Message »
From:Sven Sandberg Date:June 24 2008 9:28pm
Subject:bzr commit into mysql-5.1 branch (sven:2618) Bug#37373
View as plain text  
#At file:///home/sven/bzr/b37373-rpl_ndb_transaction/5.1-rpl/

 2618 Sven Sandberg	2008-06-24
      BUG#37373: rpl_ndb_transaction fails sporadically in pb on sol10-amd64-a and
sol10-sparc-a
      Problem: rpl_ndb_transaction fails because it assumes nothing
      is written to the binlog at a certain point. However, ndb may
      write updates to ndb system tables to the binlog at a
      nondeterministic time point after an ndb table update has
      been committed.
      Fix: break the test into two. rpl_ndb_transaction still does
      the ndb updates needed by the first half of the test. The new
      test case rpl_bug26395 includes the part that assumes nothing
      more will be written to the binlog.
      Also improved test cases a bit.
added:
  mysql-test/suite/rpl/r/rpl_bug26395.result
  mysql-test/suite/rpl/t/rpl_bug26395-master.opt
  mysql-test/suite/rpl/t/rpl_bug26395-slave.opt
  mysql-test/suite/rpl/t/rpl_bug26395.test
modified:
  mysql-test/suite/rpl_ndb/r/rpl_ndb_transaction.result
  mysql-test/suite/rpl_ndb/t/rpl_ndb_transaction-master.opt
  mysql-test/suite/rpl_ndb/t/rpl_ndb_transaction.test

per-file messages:
  mysql-test/suite/rpl/r/rpl_bug26395.result
    New result file.
  mysql-test/suite/rpl/t/rpl_bug26395-master.opt
    New opt file.
  mysql-test/suite/rpl/t/rpl_bug26395-slave.opt
    New opt file.
  mysql-test/suite/rpl/t/rpl_bug26395.test
    Moved second half of rpl_ndb_transaction here.
  mysql-test/suite/rpl_ndb/r/rpl_ndb_transaction.result
    Updated result file.
  mysql-test/suite/rpl_ndb/t/rpl_ndb_transaction-master.opt
    No need for the special debug flag any more, it was used by
    the second part of the test which is now in rpl_bug26395.
  mysql-test/suite/rpl_ndb/t/rpl_ndb_transaction.test
    1. Moved second half of the test to another test (rpl_bug26395)
    2. Improved comments.
    3. Extended the mixed transaction test to include also innodb.
    4. Used 'source include/diff_tables.inc' instead of listing
    several identical tables in the result file.
=== added file 'mysql-test/suite/rpl/r/rpl_bug26395.result'
--- a/mysql-test/suite/rpl/r/rpl_bug26395.result	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/rpl/r/rpl_bug26395.result	2008-06-24 19:28:43 +0000
@@ -0,0 +1,37 @@
+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;
+==== Initialize ====
+[on master]
+CREATE TABLE tinnodb (a INT) ENGINE = INNODB;
+SHOW CREATE TABLE tinnodb;
+Table	Create Table
+tinnodb	CREATE TABLE `tinnodb` (
+  `a` int(11) DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+==== Test ====
+INSERT INTO tinnodb VALUES (1);
+SELECT * FROM tinnodb ORDER BY a;
+a
+1
+[on slave]
+==== Verify results on slave ====
+STOP SLAVE;
+SELECT "" AS Slave_IO_State;
+Slave_IO_State
+
+SELECT "" AS Last_SQL_Error;
+Last_SQL_Error
+
+SELECT "" AS Last_IO_Error;
+Last_IO_Error
+
+SELECT * FROM tinnodb ORDER BY a;
+a
+==== Clean up ====
+[on master]
+DROP TABLE tinnodb;
+DROP TABLE tinnodb;

=== added file 'mysql-test/suite/rpl/t/rpl_bug26395-master.opt'
--- a/mysql-test/suite/rpl/t/rpl_bug26395-master.opt	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/rpl/t/rpl_bug26395-master.opt	2008-06-24 19:28:43 +0000
@@ -0,0 +1 @@
+--innodb --debug=d,do_not_write_xid

=== added file 'mysql-test/suite/rpl/t/rpl_bug26395-slave.opt'
--- a/mysql-test/suite/rpl/t/rpl_bug26395-slave.opt	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/rpl/t/rpl_bug26395-slave.opt	2008-06-24 19:28:43 +0000
@@ -0,0 +1 @@
+--innodb

=== added file 'mysql-test/suite/rpl/t/rpl_bug26395.test'
--- a/mysql-test/suite/rpl/t/rpl_bug26395.test	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/rpl/t/rpl_bug26395.test	2008-06-24 19:28:43 +0000
@@ -0,0 +1,84 @@
+# ==== Purpose ====
+#
+# Tests that an autocommitted XA transaction where the master crashes
+# just before writing the XID log event is executed correctly.  The
+# master rolls back, so the slave should not execute statement.
+#
+#
+# ==== Method ====
+#
+# We want master to be alive so that it can replicate the statement to
+# the slave. So in the test case, we must therefore not crash the
+# master. Instead, we fake the crash by just not writing the XID event
+# to the binlog. This is done by the --debug=d,do_not_write_xid flag
+# in the .opt file. This, in turn, requires us to do 'source
+# include/have_debug.inc'
+#
+# So, unlike if the master had crashed, the master *will* execute the
+# statement. But the slave should not execute it. Hence, after the
+# first test is executed, the expected result on master is a table
+# with one row, and on slave a table with no rows.
+#
+# To simulate the slave correctly, we wait until everything up to the
+# XID is replicated. We cannot sync_slave_with_master, because that
+# would wait for the transaction to end. Instead, we wait for
+# "sufficiently long time". Then we stop the slave.  (While this does
+# introduce nondeterminism in the test, the nondeterminism in this
+# case is harmless, since the slave should not execute the event in
+# either case.)
+#
+#
+# ==== Related bugs ====
+#
+# BUG#26395: if crash during autocommit update to transactional table on master, slave
fails
+
+source include/have_innodb.inc;
+# have_debug is needed since we pass a debug flag to the master server
+source include/have_debug.inc;
+source include/master-slave.inc;
+
+
+--echo ==== Initialize ====
+
+--echo [on master]
+--connection master
+
+CREATE TABLE tinnodb (a INT) ENGINE = INNODB;
+SHOW CREATE TABLE tinnodb;
+
+
+--echo ==== Test ====
+
+INSERT INTO tinnodb VALUES (1);
+SELECT * FROM tinnodb ORDER BY a;
+
+--echo [on slave]
+--connection slave
+
+sleep 5;
+
+
+--echo ==== Verify results on slave ====
+
+STOP SLAVE;
+source include/wait_for_slave_to_stop.inc;
+let $tmp= query_get_value("SHOW SLAVE STATUS", Slave_IO_State, 1);
+eval SELECT "$tmp" AS Slave_IO_State;
+let $tmp= query_get_value("SHOW SLAVE STATUS", Last_SQL_Error, 1);
+eval SELECT "$tmp" AS Last_SQL_Error;
+let $tmp= query_get_value("SHOW SLAVE STATUS", Last_IO_Error, 1);
+eval SELECT "$tmp" AS Last_IO_Error;
+SELECT * FROM tinnodb ORDER BY a;
+
+
+--echo ==== Clean up ====
+
+# Easiest to clean up master and slave separately, without
+# replication, since master and slave are out of sync.
+
+--echo [on master]
+connection master;
+DROP TABLE tinnodb;
+
+connection slave;
+DROP TABLE tinnodb;

=== modified file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_transaction.result'
--- a/mysql-test/suite/rpl_ndb/r/rpl_ndb_transaction.result	2008-01-13 21:13:17 +0000
+++ b/mysql-test/suite/rpl_ndb/r/rpl_ndb_transaction.result	2008-06-24 19:28:43 +0000
@@ -22,89 +22,244 @@ Table	Create Table
 tndb	CREATE TABLE `tndb` (
   `a` int(11) DEFAULT NULL
 ) ENGINE=ndbcluster DEFAULT CHARSET=latin1
-==== Test 1: Non-XA Engines ====
---- on master ---
+[on master]
 SET AUTOCOMMIT = 1;
-INSERT INTO tndb VALUES (1);
+==== Single-engine transactions ====
+---- autocommitted ----
 INSERT INTO tmyisam VALUES (1);
-BEGIN;
-INSERT INTO tndb VALUES (2);
+INSERT INTO tinnodb VALUES (2);
 INSERT INTO tndb VALUES (3);
+---- committed ----
+BEGIN;
+INSERT INTO tmyisam VALUES (4);
+INSERT INTO tmyisam VALUES (5);
 COMMIT;
 BEGIN;
-INSERT INTO tmyisam VALUES (2);
-INSERT INTO tmyisam VALUES (3);
+INSERT INTO tinnodb VALUES (6);
+INSERT INTO tinnodb VALUES (7);
 COMMIT;
 BEGIN;
-INSERT INTO tndb VALUES (4);
-INSERT INTO tmyisam VALUES (4);
+INSERT INTO tndb VALUES (8);
+INSERT INTO tndb VALUES (9);
 COMMIT;
+---- rolled back ----
 BEGIN;
-INSERT INTO tndb VALUES (5);
-INSERT INTO tndb VALUES (6);
+INSERT INTO tmyisam VALUES (10);
+INSERT INTO tmyisam VALUES (11);
 ROLLBACK;
+Warnings:
+Warning	1196	Some non-transactional changed tables couldn't be rolled back
 BEGIN;
-INSERT INTO tmyisam VALUES (5);
-INSERT INTO tmyisam VALUES (6);
+INSERT INTO tinnodb VALUES (12);
+INSERT INTO tinnodb VALUES (13);
+ROLLBACK;
+BEGIN;
+INSERT INTO tndb VALUES (14);
+INSERT INTO tndb VALUES (15);
+ROLLBACK;
+==== MyISAM + InnoDB ====
+---- committed ----
+BEGIN;
+INSERT INTO tmyisam VALUES (16);
+INSERT INTO tinnodb VALUES (17);
+COMMIT;
+BEGIN;
+INSERT INTO tinnodb VALUES (18);
+INSERT INTO tmyisam VALUES (19);
+COMMIT;
+---- rolled back ----
+BEGIN;
+INSERT INTO tmyisam VALUES (20);
+INSERT INTO tinnodb VALUES (21);
 ROLLBACK;
 Warnings:
 Warning	1196	Some non-transactional changed tables couldn't be rolled back
 BEGIN;
-INSERT INTO tndb VALUES (7);
-INSERT INTO tmyisam VALUES (7);
+INSERT INTO tinnodb VALUES (22);
+INSERT INTO tmyisam VALUES (23);
 ROLLBACK;
 Warnings:
 Warning	1196	Some non-transactional changed tables couldn't be rolled back
-SELECT * FROM tndb ORDER BY a;
-a
-1
-2
-3
-4
+==== MyISAM + NDB ====
+---- committed ----
+BEGIN;
+INSERT INTO tmyisam VALUES (24);
+INSERT INTO tndb VALUES (25);
+COMMIT;
+BEGIN;
+INSERT INTO tndb VALUES (26);
+INSERT INTO tmyisam VALUES (27);
+COMMIT;
+---- rolled back ----
+BEGIN;
+INSERT INTO tmyisam VALUES (28);
+INSERT INTO tndb VALUES (29);
+ROLLBACK;
+Warnings:
+Warning	1196	Some non-transactional changed tables couldn't be rolled back
+BEGIN;
+INSERT INTO tndb VALUES (30);
+INSERT INTO tmyisam VALUES (31);
+ROLLBACK;
+Warnings:
+Warning	1196	Some non-transactional changed tables couldn't be rolled back
+==== InnoDB + NDB ====
+---- committed ----
+BEGIN;
+INSERT INTO tinnodb VALUES (32);
+INSERT INTO tndb VALUES (33);
+COMMIT;
+BEGIN;
+INSERT INTO tndb VALUES (34);
+INSERT INTO tinnodb VALUES (35);
+COMMIT;
+---- rolled back ----
+BEGIN;
+INSERT INTO tinnodb VALUES (36);
+INSERT INTO tndb VALUES (37);
+ROLLBACK;
+BEGIN;
+INSERT INTO tndb VALUES (38);
+INSERT INTO tinnodb VALUES (39);
+ROLLBACK;
+==== MyISAM + InnoDB + NDB ====
+---- committed ----
+BEGIN;
+INSERT INTO tmyisam VALUES (40);
+INSERT INTO tinnodb VALUES (41);
+INSERT INTO tndb VALUES (42);
+COMMIT;
+BEGIN;
+INSERT INTO tmyisam VALUES (43);
+INSERT INTO tndb VALUES (44);
+INSERT INTO tinnodb VALUES (45);
+COMMIT;
+BEGIN;
+INSERT INTO tinnodb VALUES (46);
+INSERT INTO tmyisam VALUES (47);
+INSERT INTO tndb VALUES (48);
+COMMIT;
+BEGIN;
+INSERT INTO tinnodb VALUES (49);
+INSERT INTO tndb VALUES (50);
+INSERT INTO tmyisam VALUES (51);
+COMMIT;
+BEGIN;
+INSERT INTO tndb VALUES (52);
+INSERT INTO tmyisam VALUES (53);
+INSERT INTO tinnodb VALUES (54);
+COMMIT;
+BEGIN;
+INSERT INTO tndb VALUES (55);
+INSERT INTO tinnodb VALUES (56);
+INSERT INTO tmyisam VALUES (57);
+COMMIT;
+---- rolled back ----
+BEGIN;
+INSERT INTO tmyisam VALUES (58);
+INSERT INTO tinnodb VALUES (59);
+INSERT INTO tndb VALUES (60);
+ROLLBACK;
+Warnings:
+Warning	1196	Some non-transactional changed tables couldn't be rolled back
+BEGIN;
+INSERT INTO tmyisam VALUES (61);
+INSERT INTO tndb VALUES (62);
+INSERT INTO tinnodb VALUES (63);
+ROLLBACK;
+Warnings:
+Warning	1196	Some non-transactional changed tables couldn't be rolled back
+BEGIN;
+INSERT INTO tinnodb VALUES (64);
+INSERT INTO tmyisam VALUES (65);
+INSERT INTO tndb VALUES (66);
+ROLLBACK;
+Warnings:
+Warning	1196	Some non-transactional changed tables couldn't be rolled back
+BEGIN;
+INSERT INTO tinnodb VALUES (67);
+INSERT INTO tndb VALUES (68);
+INSERT INTO tmyisam VALUES (69);
+ROLLBACK;
+Warnings:
+Warning	1196	Some non-transactional changed tables couldn't be rolled back
+BEGIN;
+INSERT INTO tndb VALUES (70);
+INSERT INTO tmyisam VALUES (71);
+INSERT INTO tinnodb VALUES (72);
+ROLLBACK;
+Warnings:
+Warning	1196	Some non-transactional changed tables couldn't be rolled back
+BEGIN;
+INSERT INTO tndb VALUES (73);
+INSERT INTO tinnodb VALUES (74);
+INSERT INTO tmyisam VALUES (75);
+ROLLBACK;
+Warnings:
+Warning	1196	Some non-transactional changed tables couldn't be rolled back
+==== Verify the result ====
 SELECT * FROM tmyisam ORDER BY a;
 a
 1
-2
-3
 4
 5
-6
-7
---- on slave ---
-SELECT * FROM tndb ORDER BY a;
-a
-1
-2
-3
-4
-SELECT * FROM tmyisam ORDER BY a;
+10
+11
+16
+19
+20
+23
+24
+27
+28
+31
+40
+43
+47
+51
+53
+57
+58
+61
+65
+69
+71
+75
+SELECT * FROM tinnodb ORDER BY a;
 a
-1
 2
-3
-4
-5
 6
 7
-==== Test 2: Master crash before writing XID event on XA engine ====
---- on master ---
-INSERT INTO tinnodb VALUES (1);
-SELECT * FROM tinnodb ORDER BY a;
-a
-1
---- on slave ---
-STOP SLAVE;
-SELECT "" AS Slave_IO_State;
-Slave_IO_State
-
-SELECT "" AS Last_SQL_Error;
-Last_SQL_Error
-
-SELECT "" AS Last_IO_Error;
-Last_IO_Error
-
-SELECT * FROM tinnodb ORDER BY a;
+17
+18
+32
+35
+41
+45
+46
+49
+54
+56
+SELECT * FROM tndb ORDER BY a;
 a
---- on master ---
-DROP TABLE tmyisam, tinnodb, tndb;
+3
+8
+9
+25
+26
+33
+34
+42
+44
+48
+50
+52
+55
+[on slave]
+Comparing tables master:test.tmyisam and master:test.tmyisam
+Comparing tables master:test.tinnodb and master:test.tinnodb
+Comparing tables master:test.tndb and master:test.tndb
+==== Clean up ====
+[on master]
 DROP TABLE tmyisam, tinnodb, tndb;
+[on slave]

=== modified file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_transaction-master.opt'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_transaction-master.opt	2007-12-14 13:40:45 +0000
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_transaction-master.opt	2008-06-24 19:28:43 +0000
@@ -1 +1 @@
---innodb --debug=d,do_not_write_xid
+--innodb

=== modified file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_transaction.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_transaction.test	2008-04-03 09:50:43 +0000
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_transaction.test	2008-06-24 19:28:43 +0000
@@ -1,13 +1,23 @@
-# Tests that transactions are replicated correctly, with various
-# combinations of non-transactional and transactional non-XA tables.
-# Also tests that an XA transaction where the master crashes just
-# before writing the XID log event is executed correctly.  See below
-# for implementation details.
+# ==== Purpose ====
+#
+# Tests that transactions containing multiple table types are
+# replicated correctly to the slave.
+#
+#
+# ==== Method ====
+#
+# Try all combinations of committed/rollback transactions involving
+# myisam, innodb, ndb, or combinations of them.
+#
+#
+# ==== Related bugs ====
+#
+# BUG#26395: if crash during autocommit update to transactional table on master, slave
fails
+
 
 source include/ndb_master-slave.inc;
-source include/have_ndb.inc;
 source include/have_innodb.inc;
-source include/have_debug.inc;
+source include/have_ndb.inc;
 
 CREATE TABLE tmyisam (a int) ENGINE = MYISAM;
 CREATE TABLE tinnodb (a int) ENGINE = INNODB;
@@ -18,115 +28,243 @@ SHOW CREATE TABLE tinnodb;
 SHOW CREATE TABLE tndb;
 
 
---echo ==== Test 1: Non-XA Engines ====
-# Test that everything works fine with non-XA engines.  We just try
-# all ways to do transactions involving ndb and/or myisam, with
-# rollback or commit.
-
---echo --- on master ---
+--echo [on master]
 
 SET AUTOCOMMIT = 1;
 
-INSERT INTO tndb VALUES (1);
+
+--echo ==== Single-engine transactions ====
+
+--echo ---- autocommitted ----
+
 INSERT INTO tmyisam VALUES (1);
+INSERT INTO tinnodb VALUES (2);
+INSERT INTO tndb VALUES (3);
+
+--echo ---- committed ----
 
 BEGIN;
-INSERT INTO tndb VALUES (2);
-INSERT INTO tndb VALUES (3);
+INSERT INTO tmyisam VALUES (4);
+INSERT INTO tmyisam VALUES (5);
 COMMIT;
 
 BEGIN;
-INSERT INTO tmyisam VALUES (2);
-INSERT INTO tmyisam VALUES (3);
+INSERT INTO tinnodb VALUES (6);
+INSERT INTO tinnodb VALUES (7);
 COMMIT;
 
 BEGIN;
-INSERT INTO tndb VALUES (4);
-INSERT INTO tmyisam VALUES (4);
+INSERT INTO tndb VALUES (8);
+INSERT INTO tndb VALUES (9);
 COMMIT;
 
+--echo ---- rolled back ----
+
 BEGIN;
-INSERT INTO tndb VALUES (5);
-INSERT INTO tndb VALUES (6);
+INSERT INTO tmyisam VALUES (10);
+INSERT INTO tmyisam VALUES (11);
 ROLLBACK;
 
 BEGIN;
-INSERT INTO tmyisam VALUES (5);
-INSERT INTO tmyisam VALUES (6);
-#--warning 1196
+INSERT INTO tinnodb VALUES (12);
+INSERT INTO tinnodb VALUES (13);
 ROLLBACK;
 
 BEGIN;
-INSERT INTO tndb VALUES (7);
-INSERT INTO tmyisam VALUES (7);
-#--warning 1196
+INSERT INTO tndb VALUES (14);
+INSERT INTO tndb VALUES (15);
 ROLLBACK;
 
-SELECT * FROM tndb ORDER BY a;
-SELECT * FROM tmyisam ORDER BY a;
 
---echo --- on slave ---
---sync_slave_with_master
-SELECT * FROM tndb ORDER BY a;
-SELECT * FROM tmyisam ORDER BY a;
+--echo ==== MyISAM + InnoDB ====
+
+--echo ---- committed ----
 
+BEGIN;
+INSERT INTO tmyisam VALUES (16);
+INSERT INTO tinnodb VALUES (17);
+COMMIT;
 
---echo ==== Test 2: Master crash before writing XID event on XA engine ====
-# We now want to test the following scenario, to verify that BUG#26395
-# has been fixed:
-
-#   "master and slave have a transactional table that uses XA. Master
-#    has AUTOCOMMIT on and executes a statement (in this case an
-#    INSERT). Master crashes just before writing the XID event."
-
-# In this scenario, master will roll back, so slave should not execute
-# the statement, and slave should roll back later when master is
-# restarted.
-
-# However, we want the master to be alive so that we are sure it
-# replicates the statement to the slave. So in the test case, we must
-# therefore not crash the master. Instead, we fake the crash by just
-# not writing the XID event to the binlog. This is done by the
-# --debug=d,do_not_write_xid flag in the .opt file.
-
-# So, unlike if the master had crashed, the master *will* execute the
-# statement. But the slave should not execute it. Hence, after the
-# first test is executed, the expected result on master is a table
-# with one row, and on slave a table with no rows.
-
-# To simulate the slave correctly, we wait until everything up to the
-# XID is replicated. We cannot sync_slave_with_master, because that
-# would wait for the transaction to end. Instead, we wait for
-# "sufficiently long time". Then we stop the slave.
+BEGIN;
+INSERT INTO tinnodb VALUES (18);
+INSERT INTO tmyisam VALUES (19);
+COMMIT;
 
-# Note: since this puts the master binlog in an inconsistent state,
-# this should be the last test of the file.
+--echo ---- rolled back ----
 
---echo --- on master ---
---connection master
+BEGIN;
+INSERT INTO tmyisam VALUES (20);
+INSERT INTO tinnodb VALUES (21);
+ROLLBACK;
 
-INSERT INTO tinnodb VALUES (1);
-SELECT * FROM tinnodb ORDER BY a;
+BEGIN;
+INSERT INTO tinnodb VALUES (22);
+INSERT INTO tmyisam VALUES (23);
+ROLLBACK;
+
+
+--echo ==== MyISAM + NDB ====
+
+--echo ---- committed ----
 
---echo --- on slave ---
---connection slave
---sleep 3
-STOP SLAVE;
-source include/wait_for_slave_to_stop.inc;
-let $tmp= query_get_value("SHOW SLAVE STATUS", Slave_IO_State, 1);
-eval SELECT "$tmp" AS Slave_IO_State;
-let $tmp= query_get_value("SHOW SLAVE STATUS", Last_SQL_Error, 1);
-eval SELECT "$tmp" AS Last_SQL_Error;
-let $tmp= query_get_value("SHOW SLAVE STATUS", Last_IO_Error, 1);
-eval SELECT "$tmp" AS Last_IO_Error;
+BEGIN;
+INSERT INTO tmyisam VALUES (24);
+INSERT INTO tndb VALUES (25);
+COMMIT;
+
+BEGIN;
+INSERT INTO tndb VALUES (26);
+INSERT INTO tmyisam VALUES (27);
+COMMIT;
+
+--echo ---- rolled back ----
+
+BEGIN;
+INSERT INTO tmyisam VALUES (28);
+INSERT INTO tndb VALUES (29);
+ROLLBACK;
+
+BEGIN;
+INSERT INTO tndb VALUES (30);
+INSERT INTO tmyisam VALUES (31);
+ROLLBACK;
+
+
+--echo ==== InnoDB + NDB ====
+
+--echo ---- committed ----
+
+BEGIN;
+INSERT INTO tinnodb VALUES (32);
+INSERT INTO tndb VALUES (33);
+COMMIT;
+
+BEGIN;
+INSERT INTO tndb VALUES (34);
+INSERT INTO tinnodb VALUES (35);
+COMMIT;
+
+--echo ---- rolled back ----
+
+BEGIN;
+INSERT INTO tinnodb VALUES (36);
+INSERT INTO tndb VALUES (37);
+ROLLBACK;
+
+BEGIN;
+INSERT INTO tndb VALUES (38);
+INSERT INTO tinnodb VALUES (39);
+ROLLBACK;
+
+
+--echo ==== MyISAM + InnoDB + NDB ====
+
+--echo ---- committed ----
+
+BEGIN;
+INSERT INTO tmyisam VALUES (40);
+INSERT INTO tinnodb VALUES (41);
+INSERT INTO tndb VALUES (42);
+COMMIT;
+
+BEGIN;
+INSERT INTO tmyisam VALUES (43);
+INSERT INTO tndb VALUES (44);
+INSERT INTO tinnodb VALUES (45);
+COMMIT;
+
+BEGIN;
+INSERT INTO tinnodb VALUES (46);
+INSERT INTO tmyisam VALUES (47);
+INSERT INTO tndb VALUES (48);
+COMMIT;
+
+BEGIN;
+INSERT INTO tinnodb VALUES (49);
+INSERT INTO tndb VALUES (50);
+INSERT INTO tmyisam VALUES (51);
+COMMIT;
+
+BEGIN;
+INSERT INTO tndb VALUES (52);
+INSERT INTO tmyisam VALUES (53);
+INSERT INTO tinnodb VALUES (54);
+COMMIT;
+
+BEGIN;
+INSERT INTO tndb VALUES (55);
+INSERT INTO tinnodb VALUES (56);
+INSERT INTO tmyisam VALUES (57);
+COMMIT;
+
+--echo ---- rolled back ----
+
+BEGIN;
+INSERT INTO tmyisam VALUES (58);
+INSERT INTO tinnodb VALUES (59);
+INSERT INTO tndb VALUES (60);
+ROLLBACK;
+
+BEGIN;
+INSERT INTO tmyisam VALUES (61);
+INSERT INTO tndb VALUES (62);
+INSERT INTO tinnodb VALUES (63);
+ROLLBACK;
+
+BEGIN;
+INSERT INTO tinnodb VALUES (64);
+INSERT INTO tmyisam VALUES (65);
+INSERT INTO tndb VALUES (66);
+ROLLBACK;
+
+BEGIN;
+INSERT INTO tinnodb VALUES (67);
+INSERT INTO tndb VALUES (68);
+INSERT INTO tmyisam VALUES (69);
+ROLLBACK;
+
+BEGIN;
+INSERT INTO tndb VALUES (70);
+INSERT INTO tmyisam VALUES (71);
+INSERT INTO tinnodb VALUES (72);
+ROLLBACK;
+
+BEGIN;
+INSERT INTO tndb VALUES (73);
+INSERT INTO tinnodb VALUES (74);
+INSERT INTO tmyisam VALUES (75);
+ROLLBACK;
+
+
+--echo ==== Verify the result ====
+
+SELECT * FROM tmyisam ORDER BY a;
 SELECT * FROM tinnodb ORDER BY a;
+SELECT * FROM tndb ORDER BY a;
+
+--echo [on slave]
+--sync_slave_with_master
 
-# Clean up. We cannot do it on master and replicate over, because
-# master binlog is in a bad state after last test. So we do it both on
-# master and on slave.
---echo --- on master ---
+let $diff_table_1=master:test.tmyisam;
+let $diff_table_2=master:test.tmyisam;
+source include/diff_tables.inc;
+
+let $diff_table_1=master:test.tinnodb;
+let $diff_table_2=master:test.tinnodb;
+source include/diff_tables.inc;
+
+let $diff_table_1=master:test.tndb;
+let $diff_table_2=master:test.tndb;
+source include/diff_tables.inc;
+
+
+--echo ==== Clean up ====
+
+--echo [on master]
 connection master;
 DROP TABLE tmyisam, tinnodb, tndb;
 
-connection slave;
-DROP TABLE tmyisam, tinnodb, tndb;
+--echo [on slave]
+sync_slave_with_master;
+
+source include/master-slave-end.inc;

Thread
bzr commit into mysql-5.1 branch (sven:2618) Bug#37373Sven Sandberg27 Jun