From: Alfranio Correia Date: September 23 2009 2:31am Subject: bzr commit into mysql-5.1-bugteam branch (alfranio.correia:3117) Bug#47287 List-Archive: http://lists.mysql.com/commits/84230 X-Bug: 47287 Message-Id: <0KQE00J0TKDEBQ20@fe-emea-10.sun.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="Boundary_(ID_oaleXduyd8jf40Od4cV4jQ)" --Boundary_(ID_oaleXduyd8jf40Od4cV4jQ) MIME-version: 1.0 Content-type: text/plain; CHARSET=US-ASCII Content-transfer-encoding: 7BIT Content-disposition: inline #At file:///home/acorreia/workspace.sun/repository.mysql/bzrwork/bug-47287/mysql-5.1-bugteam/ based on revid:joro@stripped 3117 Alfranio Correia 2009-09-23 BUG#47287 RBR: replication diff on basic case with txn- and non-txn tables in a statement Let - T be a transactional table and N non-transactional table. - B be begin, C commit and R rollback. - M be a mixed statement, i.e. a statement that updates both T and N. - M* be a mixed statement that fails while updating either T or N. This patch restore the behavior presented in 5.1.37 for rows either produced in the RBR or MIXED modes, when a M* statement that happened early in a transaction had their changes written to the binary log outside the boundaries of the transaction and wrapped in a BEGIN/ROLLBACK. This was done to keep the slave consistent with with the master as the rollback would keep the changes on N and undo them on T. In particular, we do what follows: . B M* T C would log - B M* R B T C. Note that, we are not preserving history from the master as we are introducing a rollback that never happened. However, this seems to be more acceptable than making the slave diverge. We do not fix the following case: . B T M* C would log B T M* C. The slave will diverge as the changes on T tables that originated from the M statement are rolled back on the master but not on the slave. Unfortunately, we cannot simply rollback the transaction as this would undo any uncommitted changes on T tables. SBR is not considered in this patch because a failing statement is written to the binary along with the error code and a slave executes and then rolls back the statement when it has an associated error code, thus undoing the effects on T. In RBR and MBR, a full-fledged fix will be pushed after the WL 2687. added: mysql-test/extra/binlog_tests/binlog_failure_mixing_engines.test mysql-test/suite/binlog/r/binlog_mixed_failure_mixing_engines.result mysql-test/suite/binlog/r/binlog_row_failure_mixing_engines.result mysql-test/suite/binlog/t/binlog_mixed_failure_mixing_engines.test mysql-test/suite/binlog/t/binlog_row_failure_mixing_engines.test modified: sql/log.cc === added file 'mysql-test/extra/binlog_tests/binlog_failure_mixing_engines.test' --- a/mysql-test/extra/binlog_tests/binlog_failure_mixing_engines.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/extra/binlog_tests/binlog_failure_mixing_engines.test 2009-09-23 02:31:54 +0000 @@ -0,0 +1,105 @@ +################################################################################ +# Let +# - T be a transactional table and N non-transactional table. +# - B be begin, C commit and R rollback. +# - M be a mixed statement, i.e. a statement that updates both T and N. +# - M* be a mixed statement that fails while updating either T or N. +# +# In this test case, when changes are logged as rows either in the RBR or MIXED +# modes, we check if a M* statement that happens early in a transaction is +# written to the binary log outside the boundaries of the transaction and +# wrapped in a BEGIN/ROLLBACK. This is done to keep the slave consistent with +# with the master as the rollback will keep the changes on N and undo them on +# T. In particular, we expect the following behavior: +# +# 1. B M* T C would log - B M* R B T C. +# 2. B T M* C would log B T M* C. +# +# SBR is not considered in this test because a failing statement is written to +# the binary along with the error code and a slave executes and then rolls back +# the statement when it has an associated error code, thus undoing the effects +# on T. +# +# Note that, in the first case, we are not preserving history from the master as +# we are introducing a rollback that never happened. However, this seems to be +# more acceptable than making the slave diverge. In the second case, the slave +# will diverge as the changes on T tables that originated from the M statement +# are rolled back on the master but not on the slave. Unfortunately, we cannot +# simply rollback the transaction as this would undo any uncommitted changes +# on T tables. +# +# Such issues do not happen in SBR. In RBR and MBR, a fix will be pushed after +# the WL 2687. +################################################################################ + + +--echo ################################################################################### +--echo # CONFIGURATION +--echo ################################################################################### +CREATE TABLE nt_1 (a text, b int PRIMARY KEY) ENGINE = MyISAM; +CREATE TABLE nt_2 (a text, b int PRIMARY KEY) ENGINE = MyISAM; +CREATE TABLE tt_1 (a text, b int PRIMARY KEY) ENGINE = Innodb; +CREATE TABLE tt_2 (a text, b int PRIMARY KEY) ENGINE = Innodb; + +DELIMITER |; + +CREATE TRIGGER tr_i_tt_1_to_nt_1 BEFORE INSERT ON tt_1 FOR EACH ROW +BEGIN + INSERT INTO nt_1 VALUES (NEW.a, NEW.b); +END| + +CREATE TRIGGER tr_i_nt_2_to_tt_2 BEFORE INSERT ON nt_2 FOR EACH ROW +BEGIN + INSERT INTO tt_2 VALUES (NEW.a, NEW.b); +END| + +DELIMITER ;| + +--echo ################################################################################### +--echo # CHECK HISTORY IN BINLOG +--echo ################################################################################### +let $binlog_start= query_get_value("SHOW MASTER STATUS", Position, 1); + + +--echo *** "B M* T C" with error in M* generates in the binlog the "B M* R B T C" entries +INSERT INTO nt_1 VALUES ("new text 1", 1); +BEGIN; +--error ER_DUP_ENTRY +INSERT INTO tt_1 VALUES (USER(), 2), (USER(), 1); +INSERT INTO tt_1 VALUES ("new text 3", 3), ("new text 4", 4); +COMMIT; + +INSERT INTO tt_2 VALUES ("new text 5", 5); +BEGIN; +--error ER_DUP_ENTRY +INSERT INTO nt_2 VALUES (USER(), 6), (USER(), 5); +INSERT INTO tt_2 VALUES ("new text 7", 7); +COMMIT; + +--echo *** "B M M* T C" with error in M* generates in the binlog the "B M M* T C" entries +INSERT INTO nt_1 VALUES ("new text 11", 11); +BEGIN; +INSERT INTO tt_1 VALUES ("new text 8", 8), ("new text 9", 9); +--error ER_DUP_ENTRY +INSERT INTO tt_1 VALUES (USER(), 10), (USER(), 11); +INSERT INTO tt_2 VALUES ("new text 12", 12); +COMMIT; + +INSERT INTO tt_2 VALUES ("new text 16", 16); +BEGIN; +INSERT INTO nt_2 VALUES ("new text 13", 13), ("new text 14", 14); +--error ER_DUP_ENTRY +INSERT INTO nt_2 VALUES (USER(), 15), (USER(), 16); +INSERT INTO tt_2 VALUES ("new text 17", 17); +COMMIT; + +--source include/show_binlog_events.inc + +--echo ################################################################################### +--echo # CLEAN +--echo ################################################################################### + +DROP TABLE tt_1; +DROP TABLE tt_2; +DROP TABLE nt_1; +DROP TABLE nt_2; === added file 'mysql-test/suite/binlog/r/binlog_mixed_failure_mixing_engines.result' --- a/mysql-test/suite/binlog/r/binlog_mixed_failure_mixing_engines.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/binlog/r/binlog_mixed_failure_mixing_engines.result 2009-09-23 02:31:54 +0000 @@ -0,0 +1,97 @@ +################################################################################### +# CONFIGURATION +################################################################################### +CREATE TABLE nt_1 (a text, b int PRIMARY KEY) ENGINE = MyISAM; +CREATE TABLE nt_2 (a text, b int PRIMARY KEY) ENGINE = MyISAM; +CREATE TABLE tt_1 (a text, b int PRIMARY KEY) ENGINE = Innodb; +CREATE TABLE tt_2 (a text, b int PRIMARY KEY) ENGINE = Innodb; +CREATE TRIGGER tr_i_tt_1_to_nt_1 BEFORE INSERT ON tt_1 FOR EACH ROW +BEGIN +INSERT INTO nt_1 VALUES (NEW.a, NEW.b); +END| +CREATE TRIGGER tr_i_nt_2_to_tt_2 BEFORE INSERT ON nt_2 FOR EACH ROW +BEGIN +INSERT INTO tt_2 VALUES (NEW.a, NEW.b); +END| +################################################################################### +# CHECK HISTORY IN BINLOG +################################################################################### +*** "B M* T C" with error in M* generates in the binlog the "B M* R B T C" entries +INSERT INTO nt_1 VALUES ("new text 1", 1); +BEGIN; +INSERT INTO tt_1 VALUES (USER(), 2), (USER(), 1); +ERROR 23000: Duplicate entry '1' for key 'PRIMARY' +INSERT INTO tt_1 VALUES ("new text 3", 3), ("new text 4", 4); +COMMIT; +INSERT INTO tt_2 VALUES ("new text 5", 5); +BEGIN; +INSERT INTO nt_2 VALUES (USER(), 6), (USER(), 5); +ERROR 23000: Duplicate entry '5' for key 'PRIMARY' +INSERT INTO tt_2 VALUES ("new text 7", 7); +COMMIT; +*** "B M M* T C" with error in M* generates in the binlog the "B M M* T C" entries +INSERT INTO nt_1 VALUES ("new text 11", 11); +BEGIN; +INSERT INTO tt_1 VALUES ("new text 8", 8), ("new text 9", 9); +INSERT INTO tt_1 VALUES (USER(), 10), (USER(), 11); +ERROR 23000: Duplicate entry '11' for key 'PRIMARY' +INSERT INTO tt_2 VALUES ("new text 12", 12); +COMMIT; +INSERT INTO tt_2 VALUES ("new text 16", 16); +BEGIN; +INSERT INTO nt_2 VALUES ("new text 13", 13), ("new text 14", 14); +INSERT INTO nt_2 VALUES (USER(), 15), (USER(), 16); +ERROR 23000: Duplicate entry '16' for key 'PRIMARY' +INSERT INTO tt_2 VALUES ("new text 17", 17); +COMMIT; +show binlog events from ; +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Query # # use `test`; INSERT INTO nt_1 VALUES ("new text 1", 1) +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Table_map # # table_id: # (test.tt_1) +master-bin.000001 # Table_map # # table_id: # (test.nt_1) +master-bin.000001 # Write_rows # # table_id: # +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # ROLLBACK +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 VALUES ("new text 3", 3), ("new text 4", 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test`; INSERT INTO tt_2 VALUES ("new text 5", 5) +master-bin.000001 # Xid # # COMMIT /* XID */ +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Table_map # # table_id: # (test.nt_2) +master-bin.000001 # Table_map # # table_id: # (test.tt_2) +master-bin.000001 # Write_rows # # table_id: # +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # ROLLBACK +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test`; INSERT INTO tt_2 VALUES ("new text 7", 7) +master-bin.000001 # Xid # # COMMIT /* XID */ +master-bin.000001 # Query # # use `test`; INSERT INTO nt_1 VALUES ("new text 11", 11) +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 VALUES ("new text 8", 8), ("new text 9", 9) +master-bin.000001 # Table_map # # table_id: # (test.tt_1) +master-bin.000001 # Table_map # # table_id: # (test.nt_1) +master-bin.000001 # Write_rows # # table_id: # +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # use `test`; INSERT INTO tt_2 VALUES ("new text 12", 12) +master-bin.000001 # Xid # # COMMIT /* XID */ +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test`; INSERT INTO tt_2 VALUES ("new text 16", 16) +master-bin.000001 # Xid # # COMMIT /* XID */ +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test`; INSERT INTO nt_2 VALUES ("new text 13", 13), ("new text 14", 14) +master-bin.000001 # Table_map # # table_id: # (test.nt_2) +master-bin.000001 # Table_map # # table_id: # (test.tt_2) +master-bin.000001 # Write_rows # # table_id: # +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # use `test`; INSERT INTO tt_2 VALUES ("new text 17", 17) +master-bin.000001 # Xid # # COMMIT /* XID */ +################################################################################### +# CLEAN +################################################################################### +DROP TABLE tt_1; +DROP TABLE tt_2; +DROP TABLE nt_1; +DROP TABLE nt_2; === added file 'mysql-test/suite/binlog/r/binlog_row_failure_mixing_engines.result' --- a/mysql-test/suite/binlog/r/binlog_row_failure_mixing_engines.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/binlog/r/binlog_row_failure_mixing_engines.result 2009-09-23 02:31:54 +0000 @@ -0,0 +1,123 @@ +################################################################################### +# CONFIGURATION +################################################################################### +CREATE TABLE nt_1 (a text, b int PRIMARY KEY) ENGINE = MyISAM; +CREATE TABLE nt_2 (a text, b int PRIMARY KEY) ENGINE = MyISAM; +CREATE TABLE tt_1 (a text, b int PRIMARY KEY) ENGINE = Innodb; +CREATE TABLE tt_2 (a text, b int PRIMARY KEY) ENGINE = Innodb; +CREATE TRIGGER tr_i_tt_1_to_nt_1 BEFORE INSERT ON tt_1 FOR EACH ROW +BEGIN +INSERT INTO nt_1 VALUES (NEW.a, NEW.b); +END| +CREATE TRIGGER tr_i_nt_2_to_tt_2 BEFORE INSERT ON nt_2 FOR EACH ROW +BEGIN +INSERT INTO tt_2 VALUES (NEW.a, NEW.b); +END| +################################################################################### +# CHECK HISTORY IN BINLOG +################################################################################### +*** "B M* T C" with error in M* generates in the binlog the "B M* R B T C" entries +INSERT INTO nt_1 VALUES ("new text 1", 1); +BEGIN; +INSERT INTO tt_1 VALUES (USER(), 2), (USER(), 1); +ERROR 23000: Duplicate entry '1' for key 'PRIMARY' +INSERT INTO tt_1 VALUES ("new text 3", 3), ("new text 4", 4); +COMMIT; +INSERT INTO tt_2 VALUES ("new text 5", 5); +BEGIN; +INSERT INTO nt_2 VALUES (USER(), 6), (USER(), 5); +ERROR 23000: Duplicate entry '5' for key 'PRIMARY' +INSERT INTO tt_2 VALUES ("new text 7", 7); +COMMIT; +*** "B M M* T C" with error in M* generates in the binlog the "B M M* T C" entries +INSERT INTO nt_1 VALUES ("new text 11", 11); +BEGIN; +INSERT INTO tt_1 VALUES ("new text 8", 8), ("new text 9", 9); +INSERT INTO tt_1 VALUES (USER(), 10), (USER(), 11); +ERROR 23000: Duplicate entry '11' for key 'PRIMARY' +INSERT INTO tt_2 VALUES ("new text 12", 12); +COMMIT; +INSERT INTO tt_2 VALUES ("new text 16", 16); +BEGIN; +INSERT INTO nt_2 VALUES ("new text 13", 13), ("new text 14", 14); +INSERT INTO nt_2 VALUES (USER(), 15), (USER(), 16); +ERROR 23000: Duplicate entry '16' for key 'PRIMARY' +INSERT INTO tt_2 VALUES ("new text 17", 17); +COMMIT; +show binlog events from ; +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Table_map # # table_id: # (test.nt_1) +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # COMMIT +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Table_map # # table_id: # (test.tt_1) +master-bin.000001 # Table_map # # table_id: # (test.nt_1) +master-bin.000001 # Write_rows # # table_id: # +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # ROLLBACK +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Table_map # # table_id: # (test.tt_1) +master-bin.000001 # Table_map # # table_id: # (test.nt_1) +master-bin.000001 # Write_rows # # table_id: # +master-bin.000001 # Write_rows # # table_id: # +master-bin.000001 # Write_rows # # table_id: # +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F +master-bin.000001 # Xid # # COMMIT /* XID */ +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Table_map # # table_id: # (test.tt_2) +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F +master-bin.000001 # Xid # # COMMIT /* XID */ +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Table_map # # table_id: # (test.nt_2) +master-bin.000001 # Table_map # # table_id: # (test.tt_2) +master-bin.000001 # Write_rows # # table_id: # +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # ROLLBACK +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Table_map # # table_id: # (test.tt_2) +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F +master-bin.000001 # Xid # # COMMIT /* XID */ +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Table_map # # table_id: # (test.nt_1) +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # COMMIT +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Table_map # # table_id: # (test.tt_1) +master-bin.000001 # Table_map # # table_id: # (test.nt_1) +master-bin.000001 # Write_rows # # table_id: # +master-bin.000001 # Write_rows # # table_id: # +master-bin.000001 # Write_rows # # table_id: # +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F +master-bin.000001 # Table_map # # table_id: # (test.tt_1) +master-bin.000001 # Table_map # # table_id: # (test.nt_1) +master-bin.000001 # Write_rows # # table_id: # +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F +master-bin.000001 # Table_map # # table_id: # (test.tt_2) +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F +master-bin.000001 # Xid # # COMMIT /* XID */ +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Table_map # # table_id: # (test.tt_2) +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F +master-bin.000001 # Xid # # COMMIT /* XID */ +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Table_map # # table_id: # (test.nt_2) +master-bin.000001 # Table_map # # table_id: # (test.tt_2) +master-bin.000001 # Write_rows # # table_id: # +master-bin.000001 # Write_rows # # table_id: # +master-bin.000001 # Write_rows # # table_id: # +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F +master-bin.000001 # Table_map # # table_id: # (test.nt_2) +master-bin.000001 # Table_map # # table_id: # (test.tt_2) +master-bin.000001 # Write_rows # # table_id: # +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F +master-bin.000001 # Table_map # # table_id: # (test.tt_2) +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F +master-bin.000001 # Xid # # COMMIT /* XID */ +################################################################################### +# CLEAN +################################################################################### +DROP TABLE tt_1; +DROP TABLE tt_2; +DROP TABLE nt_1; +DROP TABLE nt_2; === added file 'mysql-test/suite/binlog/t/binlog_mixed_failure_mixing_engines.test' --- a/mysql-test/suite/binlog/t/binlog_mixed_failure_mixing_engines.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/binlog/t/binlog_mixed_failure_mixing_engines.test 2009-09-23 02:31:54 +0000 @@ -0,0 +1,4 @@ +--source include/have_binlog_format_mixed.inc +--source include/have_innodb.inc + +--source extra/binlog_tests/binlog_failure_mixing_engines.test === added file 'mysql-test/suite/binlog/t/binlog_row_failure_mixing_engines.test' --- a/mysql-test/suite/binlog/t/binlog_row_failure_mixing_engines.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/binlog/t/binlog_row_failure_mixing_engines.test 2009-09-23 02:31:54 +0000 @@ -0,0 +1,4 @@ +--source include/have_binlog_format_row.inc +--source include/have_innodb.inc + +--source extra/binlog_tests/binlog_failure_mixing_engines.test === modified file 'sql/log.cc' --- a/sql/log.cc 2009-09-11 17:06:27 +0000 +++ b/sql/log.cc 2009-09-23 02:31:54 +0000 @@ -182,7 +182,10 @@ public: { DBUG_PRINT("info", ("truncating to position %lu", (ulong) pos)); DBUG_PRINT("info", ("before_stmt_pos=%lu", (ulong) pos)); - delete pending(); + if (pending()) + { + delete pending(); + } set_pending(0); reinit_io_cache(&trans_log, WRITE_CACHE, pos, 0, 0); trans_log.end_of_file= max_binlog_cache_size; @@ -1539,9 +1542,10 @@ static int binlog_commit(handlerton *hto { Query_log_event qev(thd, STRING_WITH_LEN("COMMIT"), TRUE, TRUE, 0); error= binlog_end_trans(thd, trx_data, &qev, all); - goto end; } + trx_data->at_least_one_stmt = my_b_tell(&trx_data->trans_log) > 0; + end: if (!all) trx_data->before_stmt_pos = MY_OFF_T_UNDEF; // part of the stmt commit @@ -1608,15 +1612,18 @@ static int binlog_rollback(handlerton *h { /* We flush the cache with a rollback, wrapped in a beging/rollback if: - . aborting a transcation that modified a non-transactional table or; + . aborting a transaction that modified a non-transactional table; . aborting a statement that modified both transactional and - non-transctional tables but which is not in the boundaries of any - transaction; + non-transactional tables but which is not in the boundaries of any + transaction or there was no early change; . the OPTION_KEEP_LOG is activate. */ if ((all && thd->transaction.all.modified_non_trans_table) || (!all && thd->transaction.stmt.modified_non_trans_table && !(thd->options & (OPTION_BEGIN | OPTION_NOT_AUTOCOMMIT))) || + (!all && thd->transaction.stmt.modified_non_trans_table && + !trx_data->at_least_one_stmt && + thd->current_stmt_binlog_row_based) || ((thd->options & OPTION_KEEP_LOG))) { Query_log_event qev(thd, STRING_WITH_LEN("ROLLBACK"), TRUE, TRUE, 0); --Boundary_(ID_oaleXduyd8jf40Od4cV4jQ) MIME-version: 1.0 Content-type: text/bzr-bundle; CHARSET=US-ASCII; name*0="bzr/alfranio.correia@stripped"; name*1=154-3ezh5glpsl9zga8h.bundle Content-transfer-encoding: 7BIT Content-disposition: inline; filename*0="bzr/alfranio.correia@stripped"; filename*1=154-3ezh5glpsl9zga8h.bundle # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: alfranio.correia@stripped\ # 3ezh5glpsl9zga8h # target_branch: file:///home/acorreia/workspace.sun/repository.mysql\ # /bzrwork/bug-47287/mysql-5.1-bugteam/ # testament_sha1: 2c1e00fe1b91a4014d3e5551ad99f82f284b7003 # timestamp: 2009-09-23 03:31:59 +0100 # base_revision_id: joro@stripped # # Begin bundle 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 --Boundary_(ID_oaleXduyd8jf40Od4cV4jQ)--