From 9526a24b2f3b5763ef0589c6a299c09bd0e89b17 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 6 Mar 2008 20:32:47 +0200 Subject: [PATCH] Bug #22234 Extra Slave Col: Slave should stop on Error Field `d` of table There was a failure in that show slave status displayed a wrong message when slave stopped at processing a row event inserting to a default-less column. The problem seem to have ceased after recent fixes in rbr code. However, the test was not updated to carry testing of the case commented-out. Uncommenting and editing the test. Notice, Bug#23907 is most probably a duplicate of this one. mysql-test/extra/rpl_tests/rpl_extraSlave_Col.test: uncommenting the test that previously failed. mysql-test/suite/rpl/r/rpl_extraCol_innodb.result: results changed due to the correct expected error message of an added test is displayed. mysql-test/suite/rpl/r/rpl_extraCol_myisam.result: results changed to reflect the test changes mysql-test/suite/rpl_ndb/r/rpl_ndb_extraCol.result: results changed to reflect the uncommented test sql/log_event.cc: correcting of a merge with bug#12713 to use the correct object holding the error code. --- .../extra/rpl_tests/rpl_extraSlave_Col.test | 59 ++++++++----------- .../suite/rpl/r/rpl_extraCol_innodb.result | 56 ++++++++++++++++++ .../suite/rpl/r/rpl_extraCol_myisam.result | 56 ++++++++++++++++++ .../suite/rpl_ndb/r/rpl_ndb_extraCol.result | 56 ++++++++++++++++++ sql/log_event.cc | 2 +- 5 files changed, 195 insertions(+), 34 deletions(-) diff --git a/mysql-test/extra/rpl_tests/rpl_extraSlave_Col.test b/mysql-test/extra/rpl_tests/rpl_extraSlave_Col.test index 6fa2c9ac1b5..7e726828a1e 100644 --- a/mysql-test/extra/rpl_tests/rpl_extraSlave_Col.test +++ b/mysql-test/extra/rpl_tests/rpl_extraSlave_Col.test @@ -403,45 +403,38 @@ sync_slave_with_master; # added columns do not have default values# # Expect: Proper error message # ########################################### -# Commented out due to Bug #23907 Extra Slave Col is not -# erroring on extra col with no default values. +# Bug#22234, Bug#23907 Extra Slave Col is not +# erroring on extra col with no default values. ######################################################## #--echo *** Create t9 on slave *** -#STOP SLAVE; -#RESET SLAVE; -#eval CREATE TABLE t9 (a INT KEY, b BLOB, c CHAR(5), -# d TIMESTAMP, -# e INT DEFAULT '1')ENGINE=$engine_type; +STOP SLAVE; +RESET SLAVE; +eval CREATE TABLE t9 (a INT KEY, b BLOB, c CHAR(5), + d TIMESTAMP, + e INT NOT NULL) ENGINE=$engine_type; -#--echo *** Create t9 on Master *** -#connection master; -#eval CREATE TABLE t9 (a INT PRIMARY KEY, b BLOB, c CHAR(5) -# ) ENGINE=$engine_type; -#RESET MASTER; +--echo *** Create t9 on Master *** +connection master; +eval CREATE TABLE t9 (a INT PRIMARY KEY, b BLOB, c CHAR(5) + ) ENGINE=$engine_type; +RESET MASTER; -#--echo *** Start Slave *** -#connection slave; -#START SLAVE; +--echo *** Start Slave *** +connection slave; +START SLAVE; -#--echo *** Master Data Insert *** -#connection master; -#set @b1 = 'b1b1b1b1'; -#set @b1 = concat(@b1,@b1); -#INSERT INTO t9 () VALUES(1,@b1,'Kyle'),(2,@b1,'JOE'),(3,@b1,'QA'); +--echo *** Master Data Insert *** +connection master; +set @b1 = 'b1b1b1b1'; +set @b1 = concat(@b1,@b1); +INSERT INTO t9 () VALUES(1,@b1,'Kyle'),(2,@b1,'JOE'),(3,@b1,'QA'); -#--echo ************************************************* -#--echo ** Currently giving wrong error see bug#22234 *** -#--echo ************************************************* -#sync_slave_with_master; -#connection slave; - -#--echo *** Select from T9 *** -#--source include/wait_for_slave_sql_to_stop.inc -#--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; -#START SLAVE; +--source include/wait_for_slave_sql_to_stop.inc +--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; +START SLAVE; #--echo *** Drop t9 *** #connection master; diff --git a/mysql-test/suite/rpl/r/rpl_extraCol_innodb.result b/mysql-test/suite/rpl/r/rpl_extraCol_innodb.result index e268e4c2e51..f0f41c02a84 100644 --- a/mysql-test/suite/rpl/r/rpl_extraCol_innodb.result +++ b/mysql-test/suite/rpl/r/rpl_extraCol_innodb.result @@ -399,6 +399,62 @@ set @b1 = concat(@b1,@b1); INSERT INTO t8 () VALUES(1,@b1,'Kyle'),(2,@b1,'JOE'),(3,@b1,'QA'); *** Drop t8 *** DROP TABLE t8; +STOP SLAVE; +RESET SLAVE; +CREATE TABLE t9 (a INT KEY, b BLOB, c CHAR(5), +d TIMESTAMP, +e INT NOT NULL) ENGINE='InnoDB'; +*** Create t9 on Master *** +CREATE TABLE t9 (a INT PRIMARY KEY, b BLOB, c CHAR(5) +) ENGINE='InnoDB'; +RESET MASTER; +*** Start Slave *** +START SLAVE; +*** Master Data Insert *** +set @b1 = 'b1b1b1b1'; +set @b1 = concat(@b1,@b1); +INSERT INTO t9 () VALUES(1,@b1,'Kyle'),(2,@b1,'JOE'),(3,@b1,'QA'); +SHOW SLAVE STATUS; +Slave_IO_State # +Master_Host 127.0.0.1 +Master_User root +Master_Port # +Connect_Retry 1 +Master_Log_File master-bin.000001 +Read_Master_Log_Pos # +Relay_Log_File # +Relay_Log_Pos # +Relay_Master_Log_File master-bin.000001 +Slave_IO_Running Yes +Slave_SQL_Running No +Replicate_Do_DB +Replicate_Ignore_DB +Replicate_Do_Table +Replicate_Ignore_Table # +Replicate_Wild_Do_Table +Replicate_Wild_Ignore_Table +Last_Errno 1364 +Last_Error Could not execute Write_rows event on table test.t9; Field 'e' doesn't have a default value, Error_code: 1364; handler error HA_ERR_ROWS_EVENT_APPLY; the event's master log master-bin.000001, end_log_pos 330 +Skip_Counter 0 +Exec_Master_Log_Pos # +Relay_Log_Space # +Until_Condition None +Until_Log_File +Until_Log_Pos 0 +Master_SSL_Allowed No +Master_SSL_CA_File +Master_SSL_CA_Path +Master_SSL_Cert +Master_SSL_Cipher +Master_SSL_Key +Seconds_Behind_Master # +Master_SSL_Verify_Server_Cert No +Last_IO_Errno # +Last_IO_Error # +Last_SQL_Errno 1364 +Last_SQL_Error Could not execute Write_rows event on table test.t9; Field 'e' doesn't have a default value, Error_code: 1364; handler error HA_ERR_ROWS_EVENT_APPLY; the event's master log master-bin.000001, end_log_pos 330 +SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; +START SLAVE; *** Create t10 on slave *** STOP SLAVE; RESET SLAVE; diff --git a/mysql-test/suite/rpl/r/rpl_extraCol_myisam.result b/mysql-test/suite/rpl/r/rpl_extraCol_myisam.result index 364354d3a17..ad67e3ecf80 100644 --- a/mysql-test/suite/rpl/r/rpl_extraCol_myisam.result +++ b/mysql-test/suite/rpl/r/rpl_extraCol_myisam.result @@ -399,6 +399,62 @@ set @b1 = concat(@b1,@b1); INSERT INTO t8 () VALUES(1,@b1,'Kyle'),(2,@b1,'JOE'),(3,@b1,'QA'); *** Drop t8 *** DROP TABLE t8; +STOP SLAVE; +RESET SLAVE; +CREATE TABLE t9 (a INT KEY, b BLOB, c CHAR(5), +d TIMESTAMP, +e INT NOT NULL) ENGINE='MyISAM'; +*** Create t9 on Master *** +CREATE TABLE t9 (a INT PRIMARY KEY, b BLOB, c CHAR(5) +) ENGINE='MyISAM'; +RESET MASTER; +*** Start Slave *** +START SLAVE; +*** Master Data Insert *** +set @b1 = 'b1b1b1b1'; +set @b1 = concat(@b1,@b1); +INSERT INTO t9 () VALUES(1,@b1,'Kyle'),(2,@b1,'JOE'),(3,@b1,'QA'); +SHOW SLAVE STATUS; +Slave_IO_State # +Master_Host 127.0.0.1 +Master_User root +Master_Port # +Connect_Retry 1 +Master_Log_File master-bin.000001 +Read_Master_Log_Pos # +Relay_Log_File # +Relay_Log_Pos # +Relay_Master_Log_File master-bin.000001 +Slave_IO_Running Yes +Slave_SQL_Running No +Replicate_Do_DB +Replicate_Ignore_DB +Replicate_Do_Table +Replicate_Ignore_Table # +Replicate_Wild_Do_Table +Replicate_Wild_Ignore_Table +Last_Errno 1364 +Last_Error Could not execute Write_rows event on table test.t9; Field 'e' doesn't have a default value, Error_code: 1364; handler error HA_ERR_ROWS_EVENT_APPLY; the event's master log master-bin.000001, end_log_pos 262 +Skip_Counter 0 +Exec_Master_Log_Pos # +Relay_Log_Space # +Until_Condition None +Until_Log_File +Until_Log_Pos 0 +Master_SSL_Allowed No +Master_SSL_CA_File +Master_SSL_CA_Path +Master_SSL_Cert +Master_SSL_Cipher +Master_SSL_Key +Seconds_Behind_Master # +Master_SSL_Verify_Server_Cert No +Last_IO_Errno # +Last_IO_Error # +Last_SQL_Errno 1364 +Last_SQL_Error Could not execute Write_rows event on table test.t9; Field 'e' doesn't have a default value, Error_code: 1364; handler error HA_ERR_ROWS_EVENT_APPLY; the event's master log master-bin.000001, end_log_pos 262 +SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; +START SLAVE; *** Create t10 on slave *** STOP SLAVE; RESET SLAVE; diff --git a/mysql-test/suite/rpl_ndb/r/rpl_ndb_extraCol.result b/mysql-test/suite/rpl_ndb/r/rpl_ndb_extraCol.result index 685fdbf0a6e..3ab515806e7 100644 --- a/mysql-test/suite/rpl_ndb/r/rpl_ndb_extraCol.result +++ b/mysql-test/suite/rpl_ndb/r/rpl_ndb_extraCol.result @@ -399,6 +399,62 @@ set @b1 = concat(@b1,@b1); INSERT INTO t8 () VALUES(1,@b1,'Kyle'),(2,@b1,'JOE'),(3,@b1,'QA'); *** Drop t8 *** DROP TABLE t8; +STOP SLAVE; +RESET SLAVE; +CREATE TABLE t9 (a INT KEY, b BLOB, c CHAR(5), +d TIMESTAMP, +e INT NOT NULL) ENGINE='NDB'; +*** Create t9 on Master *** +CREATE TABLE t9 (a INT PRIMARY KEY, b BLOB, c CHAR(5) +) ENGINE='NDB'; +RESET MASTER; +*** Start Slave *** +START SLAVE; +*** Master Data Insert *** +set @b1 = 'b1b1b1b1'; +set @b1 = concat(@b1,@b1); +INSERT INTO t9 () VALUES(1,@b1,'Kyle'),(2,@b1,'JOE'),(3,@b1,'QA'); +SHOW SLAVE STATUS; +Slave_IO_State # +Master_Host 127.0.0.1 +Master_User root +Master_Port # +Connect_Retry 1 +Master_Log_File master-bin.000001 +Read_Master_Log_Pos # +Relay_Log_File # +Relay_Log_Pos # +Relay_Master_Log_File master-bin.000001 +Slave_IO_Running Yes +Slave_SQL_Running No +Replicate_Do_DB +Replicate_Ignore_DB +Replicate_Do_Table +Replicate_Ignore_Table # +Replicate_Wild_Do_Table +Replicate_Wild_Ignore_Table +Last_Errno 1364 +Last_Error Could not execute Write_rows event on table test.t9; Field 'e' doesn't have a default value, Error_code: 1364; handler error HA_ERR_ROWS_EVENT_APPLY; the event's master log master-bin.000001, end_log_pos 447 +Skip_Counter 0 +Exec_Master_Log_Pos # +Relay_Log_Space # +Until_Condition None +Until_Log_File +Until_Log_Pos 0 +Master_SSL_Allowed No +Master_SSL_CA_File +Master_SSL_CA_Path +Master_SSL_Cert +Master_SSL_Cipher +Master_SSL_Key +Seconds_Behind_Master # +Master_SSL_Verify_Server_Cert No +Last_IO_Errno # +Last_IO_Error # +Last_SQL_Errno 1364 +Last_SQL_Error Could not execute Write_rows event on table test.t9; Field 'e' doesn't have a default value, Error_code: 1364; handler error HA_ERR_ROWS_EVENT_APPLY; the event's master log master-bin.000001, end_log_pos 447 +SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; +START SLAVE; *** Create t10 on slave *** STOP SLAVE; RESET SLAVE; diff --git a/sql/log_event.cc b/sql/log_event.cc index 0d2f3e7e708..5461d5489eb 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -137,7 +137,7 @@ static void inline slave_rows_error_report(enum loglevel level, int ha_error, " %s, Error_code: %d;", err->msg, err->code); } - rli->report(level, thd->net.client_last_errno, + rli->report(level, thd->is_error()? thd->main_da.sql_errno() : 0, "Could not execute %s event on table %s.%s;" "%s handler error %s; " "the event's master log %s, end_log_pos %lu",