MySQL Lists are EOL. Please join:

List:Commits« Previous MessageNext Message »
From:Alfranio Correia Date:December 31 2009 12:30pm
Subject:bzr commit into mysql-5.1-rep+3 branch (alfranio.correia:3130)
Bug#48815
View as plain text  
#At file:///home/acorreia/workspace.sun/repository.mysql/bzrwork/bug-48815/mysql-5.1-rep%2B3/ based on revid:dao-gang.qu@stripped

 3130 Alfranio Correia	2009-12-31
      BUG#48815 Slave stops with error code 1644 but row event executed by SQL thread
      
      Updated rpl_ndb_binlog_format_errors.test to check error ER_BINLOG_ROW_INJECTION_AND_STMT_ENGINE.

    modified:
      mysql-test/suite/rpl_ndb/r/rpl_ndb_binlog_format_errors.result
      mysql-test/suite/rpl_ndb/t/rpl_ndb_binlog_format_errors.test
=== modified file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_binlog_format_errors.result'
--- a/mysql-test/suite/rpl_ndb/r/rpl_ndb_binlog_format_errors.result	2009-10-19 08:26:22 +0000
+++ b/mysql-test/suite/rpl_ndb/r/rpl_ndb_binlog_format_errors.result	2009-12-31 12:30:47 +0000
@@ -37,14 +37,22 @@ CREATE TRIGGER trig_1 AFTER INSERT ON t_
 INSERT INTO t_self_logging VALUES (1);
 ERROR HY000: Cannot execute statement: binlogging impossible since more than one engine is involved and at least one engine is self-logging.
 DROP trigger trig_1;
+SELECT * FROM t_self_logging /* Should be empty */;
+a
+SELECT * FROM t /* Should be empty */;
+a
 * Modify both row-only and stmt-only table
 CREATE TRIGGER trig_2 AFTER INSERT ON t_stmt FOR EACH ROW BEGIN INSERT INTO t_row VALUES(1); END;
 INSERT INTO t_stmt VALUES (1);
 ERROR HY000: Cannot execute statement: binlogging impossible since both row-incapable engines and statement-incapable engines are involved.
+SELECT * FROM t_stmt /* should be empty */;
+a
 DROP TRIGGER trig_2;
 * Stmt-only table and binlog_format=row
 INSERT INTO t_stmt VALUES (1);
 ERROR HY000: Cannot execute statement: binlogging impossible since BINLOG_FORMAT = ROW and at least one table uses a storage engine limited to statement-logging.
+SELECT * FROM t_stmt /* should be empty */;
+a
 * Row injection and stmt-only table: in slave sql thread
 INSERT INTO t_slave_stmt VALUES (1);
 [on slave]
@@ -52,12 +60,17 @@ INSERT INTO t_slave_stmt VALUES (1);
 Last_SQL_Error = Error 'Cannot execute row injection: binlogging impossible since at least one table uses a storage engine limited to statement-logging.' on opening tables
 set global sql_slave_skip_counter=1;
 include/start_slave.inc
+SELECT * FROM t_slave_stmt /* should be empty */;
+a
+[on master]
 * Row injection and stmt-only table: use BINLOG statement
 BINLOG '
 1gRVShMBAAAALwAAAEABAAAAABcAAAAAAAAABHRlc3QABnRfc3RtdAABDwJkAAE=
 1gRVShcBAAAAIAAAAGABAAAQABcAAAAAAAEAAf/+ATE=
 ';
 ERROR HY000: Cannot execute row injection: binlogging impossible since at least one table uses a storage engine limited to statement-logging.
+SELECT * FROM t_stmt /* should be empty */;
+a
 ---- binlog_format=mixed ----
 [on slave]
 include/stop_slave.inc
@@ -83,21 +96,30 @@ SET @@session.binlog_format = STATEMENT;
 * Row-only engine and binlog_format=statement: innodb-specific message
 INSERT INTO t_row VALUES (1);
 ERROR HY000: Cannot execute statement: binlogging impossible since BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to row-logging. InnoDB is limited to row-logging when transaction isolation level is READ COMMITTED or READ UNCOMMITTED.
+SELECT * FROM t_row /* should be empty */;
+a
 * Row-only engine and binlog_format=statement: generic message
 SET @@session.debug= '+d,no_innodb_binlog_errors';
 INSERT INTO t_row VALUES (1);
 ERROR HY000: Cannot execute statement: binlogging impossible since BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to row-logging.
+SELECT * FROM t_row /* should be empty */;
+a
 * Same statement, but db filtered out - no error
 USE other;
 INSERT INTO test.t_row VALUES (1);
 USE test;
 SET @@session.debug= '';
+SELECT * FROM t_row /* should contain the value 1 */;
+a
+1
 * Row injection and binlog_format=statement: BINLOG statement
 BINLOG '
 cNpVShMBAAAAKgAAADYBAAAAABcAAAAAAAAABHRlc3QAAXQAAQ8CZAAB
 cNpVShcBAAAAIAAAAFYBAAAQABcAAAAAAAEAAf/+ATE=
 ';
 ERROR HY000: Cannot execute row injection: binlogging impossible since BINLOG_FORMAT = STATEMENT.
+SELECT * FROM t /* should be empty */;
+a
 * Same statement, but db filtered out - no error
 USE other;
 BINLOG '
@@ -105,24 +127,38 @@ cNpVShMBAAAAKgAAADYBAAAAABcAAAAAAAAABHRl
 cNpVShcBAAAAIAAAAFYBAAAQABcAAAAAAAEAAf/+ATE=
 ';
 USE test;
+SELECT * FROM t /* should contain the value 1 */;
+a
+1
+DELETE FROM t;
 * Unsafe statement and binlog_format=statement
-INSERT INTO t VALUES (UUID());
+INSERT INTO t VALUES (COALESCE(1, UUID()));
 Warnings:
 Note	1592	Unsafe statement binlogged in statement format since BINLOG_FORMAT = STATEMENT. Reason for unsafeness: Statement uses a system function whose value may differ on slave.
+SELECT * FROM t /* should contain the value 1 */;
+a
+1
+DELETE FROM t;
 * Same statement, but db filtered out - no message
 USE other;
-INSERT INTO test.t VALUES (UUID());
+INSERT INTO test.t VALUES (COALESCE(1, UUID()));
 USE test;
+SELECT * FROM t /* should contain the value 1 */;
+a
+1
+DELETE FROM t;
 ---- master: binlog_format=mixed, slave: binlog_format=statement ----
 SET @@global.binlog_format = MIXED;
 SET @@session.binlog_format = MIXED;
 * Row injection and binlog_format=statement: in slave sql thread
-INSERT INTO t VALUES (UUID());
+INSERT INTO t VALUES (COALESCE(1, UUID()));
 [on slave]
 --source include/wait_for_slave_sql_error_and_skip.inc
 Last_SQL_Error = Error 'Cannot execute row injection: binlogging impossible since BINLOG_FORMAT = STATEMENT.' on opening tables
 set global sql_slave_skip_counter=1;
 include/start_slave.inc
+SELECT * FROM t /* should be empty */;
+a
 [on master]
 ==== Clean up ====
 DROP TRIGGER trig_autoinc;

=== modified file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_binlog_format_errors.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_binlog_format_errors.test	2009-10-19 08:26:22 +0000
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_binlog_format_errors.test	2009-12-31 12:30:47 +0000
@@ -93,16 +93,20 @@ AAAAAAAAAAAAAAAAAADWBFVKEzgNAAgAEgAEBAQE
 --error ER_BINLOG_MULTIPLE_ENGINES_AND_SELF_LOGGING_ENGINE
 INSERT INTO t_self_logging VALUES (1);
 DROP trigger trig_1;
+SELECT * FROM t_self_logging /* Should be empty */;
+SELECT * FROM t /* Should be empty */;
 
 --echo * Modify both row-only and stmt-only table
 --eval CREATE TRIGGER trig_2 AFTER INSERT ON t_stmt FOR EACH ROW BEGIN INSERT INTO t_row VALUES(1); END
 --error ER_BINLOG_ROW_ENGINE_AND_STMT_ENGINE
 INSERT INTO t_stmt VALUES (1);
+SELECT * FROM t_stmt /* should be empty */;
 DROP TRIGGER trig_2;
 
 --echo * Stmt-only table and binlog_format=row
 --error ER_BINLOG_ROW_MODE_AND_STMT_ENGINE
 INSERT INTO t_stmt VALUES (1);
+SELECT * FROM t_stmt /* should be empty */;
 
 --echo * Row injection and stmt-only table: in slave sql thread
 INSERT INTO t_slave_stmt VALUES (1);
@@ -112,7 +116,11 @@ INSERT INTO t_slave_stmt VALUES (1);
 --let $slave_sql_errno= 1642
 --let $show_sql_error= 1
 --source include/wait_for_slave_sql_error_and_skip.inc
+--connection slave
+SELECT * FROM t_slave_stmt /* should be empty */;
 
+--echo [on master]
+--connection master
 --echo * Row injection and stmt-only table: use BINLOG statement
 # This is a Table_map_event and a Write_rows_event. Together, they are
 # equivalent to 'INSERT INTO t_stmt VALUES (1)'
@@ -121,6 +129,7 @@ BINLOG '
 1gRVShMBAAAALwAAAEABAAAAABcAAAAAAAAABHRlc3QABnRfc3RtdAABDwJkAAE=
 1gRVShcBAAAAIAAAAGABAAAQABcAAAAAAAEAAf/+ATE=
 ';
+SELECT * FROM t_stmt /* should be empty */;
 
 
 --echo ---- binlog_format=mixed ----
@@ -161,6 +170,7 @@ SET @@session.binlog_format = STATEMENT;
 --echo * Row-only engine and binlog_format=statement: innodb-specific message
 --error ER_BINLOG_STMT_MODE_AND_ROW_ENGINE
 INSERT INTO t_row VALUES (1);
+SELECT * FROM t_row /* should be empty */;
 
 # Commented out since innodb gives an error (this is a bug)
 #--echo * Same statement, but db filtered out - no error
@@ -172,12 +182,14 @@ INSERT INTO t_row VALUES (1);
 SET @@session.debug= '+d,no_innodb_binlog_errors';
 --error ER_BINLOG_STMT_MODE_AND_ROW_ENGINE
 INSERT INTO t_row VALUES (1);
+SELECT * FROM t_row /* should be empty */;
 
 --echo * Same statement, but db filtered out - no error
 USE other;
 INSERT INTO test.t_row VALUES (1);
 USE test;
 SET @@session.debug= '';
+SELECT * FROM t_row /* should contain the value 1 */;
 
 --echo * Row injection and binlog_format=statement: BINLOG statement
 # This is a Table_map_event and a Write_rows_event. Together, they are
@@ -187,6 +199,7 @@ BINLOG '
 cNpVShMBAAAAKgAAADYBAAAAABcAAAAAAAAABHRlc3QAAXQAAQ8CZAAB
 cNpVShcBAAAAIAAAAFYBAAAQABcAAAAAAAEAAf/+ATE=
 ';
+SELECT * FROM t /* should be empty */;
 
 --echo * Same statement, but db filtered out - no error
 # This is a Table_map_event and a Write_rows_event. Together, they are
@@ -197,15 +210,21 @@ cNpVShMBAAAAKgAAADYBAAAAABcAAAAAAAAABHRl
 cNpVShcBAAAAIAAAAFYBAAAQABcAAAAAAAEAAf/+ATE=
 ';
 USE test;
+SELECT * FROM t /* should contain the value 1 */;
+DELETE FROM t;
 
 --echo * Unsafe statement and binlog_format=statement
 # This will give a warning.
-INSERT INTO t VALUES (UUID());
+INSERT INTO t VALUES (COALESCE(1, UUID()));
+SELECT * FROM t /* should contain the value 1 */;
+DELETE FROM t;
 
 --echo * Same statement, but db filtered out - no message
 USE other;
-INSERT INTO test.t VALUES (UUID());
+INSERT INTO test.t VALUES (COALESCE(1, UUID()));
 USE test;
+SELECT * FROM t /* should contain the value 1 */;
+DELETE FROM t;
 
 
 --echo ---- master: binlog_format=mixed, slave: binlog_format=statement ----
@@ -214,14 +233,15 @@ SET @@global.binlog_format = MIXED;
 SET @@session.binlog_format = MIXED;
 
 --echo * Row injection and binlog_format=statement: in slave sql thread
-INSERT INTO t VALUES (UUID());
+INSERT INTO t VALUES (COALESCE(1, UUID()));
 --echo [on slave]
 --connection slave
 # 1644 = ER_BINLOG_ROW_INJECTION_AND_STMT_MODE
 --let $slave_sql_errno= 1644
 --let $show_sql_error= 1
 --source include/wait_for_slave_sql_error_and_skip.inc
-
+--connection slave
+SELECT * FROM t /* should be empty */;
 --echo [on master]
 --connection master
 


Attachment: [text/bzr-bundle]
Thread
bzr commit into mysql-5.1-rep+3 branch (alfranio.correia:3130)Bug#48815Alfranio Correia31 Dec