List:Commits« Previous MessageNext Message »
From:Alfranio Correia Date:March 11 2009 7:58pm
Subject:bzr commit into mysql-5.1-bugteam branch (alfranio.correia:2832)
Bug#38197
View as plain text  
#At file:///home/acorreia/workspace.sun/repository.mysql/bzrwork/bug-38197/mysql-5.1-bugteam-push/ based on revid:joro@stripped

 2832 Alfranio Correia	2009-03-11 [merge]
      auto-merge BUG#38197 Errors in @@init_slave not visible in 'show slave status'
added:
  mysql-test/suite/rpl/r/rpl_bug38197.result
  mysql-test/suite/rpl/t/rpl_bug38197.test
modified:
  mysql-test/suite/rpl/r/rpl_bug33931.result
  mysql-test/suite/rpl/t/rpl_bug33931.test
  sql/slave.cc

=== modified file 'mysql-test/suite/rpl/r/rpl_bug33931.result'
--- a/mysql-test/suite/rpl/r/rpl_bug33931.result	2008-10-13 18:33:08 +0000
+++ b/mysql-test/suite/rpl/r/rpl_bug33931.result	2009-02-11 11:56:25 +0000
@@ -1,5 +1,5 @@
 reset master;
-call mtr.add_suppression("Failed during slave.*thread initialization");
+call mtr.add_suppression("Failed during slave thread initialization");
 stop slave;
 reset slave;
 SET GLOBAL debug="d,simulate_io_slave_error_on_init,simulate_sql_slave_error_on_init";
@@ -23,8 +23,8 @@ Replicate_Do_Table	
 Replicate_Ignore_Table	
 Replicate_Wild_Do_Table	
 Replicate_Wild_Ignore_Table	
-Last_Errno	0
-Last_Error	
+Last_Errno	#
+Last_Error	Failed during slave thread initialization
 Skip_Counter	0
 Exec_Master_Log_Pos	0
 Relay_Log_Space	#
@@ -41,6 +41,6 @@ Seconds_Behind_Master	#
 Master_SSL_Verify_Server_Cert	No
 Last_IO_Errno	0
 Last_IO_Error	
-Last_SQL_Errno	0
-Last_SQL_Error	
+Last_SQL_Errno	#
+Last_SQL_Error	Failed during slave thread initialization
 SET GLOBAL debug="";

=== added file 'mysql-test/suite/rpl/r/rpl_bug38197.result'
--- a/mysql-test/suite/rpl/r/rpl_bug38197.result	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/rpl/r/rpl_bug38197.result	2009-02-11 11:56:25 +0000
@@ -0,0 +1,18 @@
+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;
+stop slave;
+reset slave;
+SET GLOBAL debug= "d,simulate_io_slave_error_on_init,simulate_sql_slave_error_on_init";
+start slave;
+Reporting the following error: Failed during slave thread initialization
+SET GLOBAL debug= "";
+stop slave;
+reset slave;
+SET GLOBAL init_slave= "garbage";
+start slave;
+Reporting the following error: Slave SQL thread aborted. Can't execute init_slave query
+SET GLOBAL init_slave= "";

=== modified file 'mysql-test/suite/rpl/t/rpl_bug33931.test'
--- a/mysql-test/suite/rpl/t/rpl_bug33931.test	2008-10-13 18:33:08 +0000
+++ b/mysql-test/suite/rpl/t/rpl_bug33931.test	2009-02-11 11:56:25 +0000
@@ -15,7 +15,7 @@ reset master;
 connection slave;
 
 # Add suppression for expected warnings in slaves error log
-call mtr.add_suppression("Failed during slave.*thread initialization");
+call mtr.add_suppression("Failed during slave thread initialization");
 
 --disable_warnings
 stop slave;
@@ -37,8 +37,8 @@ connection slave;
 #
 source include/wait_for_slave_to_stop.inc;
 
---replace_result $MASTER_MYPORT MASTER_PORT                                     
---replace_column 1 # 8 # 9 # 23 # 33 #                                          
+--replace_result $MASTER_MYPORT MASTER_PORT
+--replace_column 1 # 8 # 9 # 19 # 23 # 33 # 37 #
 query_vertical show slave status;
 
 #

=== added file 'mysql-test/suite/rpl/t/rpl_bug38197.test'
--- a/mysql-test/suite/rpl/t/rpl_bug38197.test	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/rpl/t/rpl_bug38197.test	2009-02-11 11:56:25 +0000
@@ -0,0 +1,86 @@
+######################################################################
+# Some errors that cause the slave SQL thread to stop are not shown in 
+# the Slave_SQL_Error column of "SHOW SLAVE STATUS". Instead, the error 
+# is only in the server's error log.
+#
+# Two failures and their respective reporting are verified:
+#             
+# 1 - Failures during slave thread initialization
+# 2 - Failures while processing queries passed through the init_slave
+# option.
+#
+# In order to check the first type of failure, we inject a fault in the 
+# SQL/IO Threads through SET GLOBAL debug.
+#
+# To check the second type, we set @@global.init_slave to an invalid 
+# command thus preventing the initialization of the SQL Thread.
+#
+# Obs:
+# 1 - Note that testing failures while initializing the relay log position 
+# is hard as the same function is called before the code reaches the point 
+# that we want to test.
+#
+# 2 - This test does not target failures that are reported while applying 
+# events such as duplicate keys, errors while reading the relay-log.bin*, 
+# etc. Such errors are already checked on other tests.
+######################################################################
+
+######################################################################
+#                    Configuring the Environment
+######################################################################
+source include/have_debug.inc;
+source include/master-slave.inc;
+source include/have_log_bin.inc;
+
+connection slave;
+
+--disable_warnings
+stop slave;
+--enable_warnings
+reset slave;
+
+######################################################################
+#           Injecting faults in the threads' initialization
+######################################################################
+connection slave;
+
+# Set debug flags on slave to force errors to occur
+SET GLOBAL debug= "d,simulate_io_slave_error_on_init,simulate_sql_slave_error_on_init";
+
+start slave;
+
+#
+# slave is going to stop because of emulated failures
+# but there won't be any crashes nor asserts hit.
+#
+source include/wait_for_slave_to_stop.inc;
+
+let $error= query_get_value(SHOW SLAVE STATUS, Last_Error, 1);
+echo Reporting the following error: $error;
+
+SET GLOBAL debug= "";
+
+######################################################################
+#             Injecting faults in the init_slave option
+######################################################################
+connection slave;
+
+--disable_warnings
+stop slave;
+--enable_warnings
+source include/wait_for_slave_to_stop.inc;
+
+reset slave;
+
+SET GLOBAL init_slave= "garbage";
+
+start slave;
+source include/wait_for_slave_sql_to_stop.inc;
+
+let $error= query_get_value(SHOW SLAVE STATUS, Last_Error, 1);
+echo Reporting the following error: $error;
+
+######################################################################
+#                             Clean up
+######################################################################
+SET GLOBAL init_slave= "";

=== modified file 'sql/slave.cc'
--- a/sql/slave.cc	2009-01-09 12:49:24 +0000
+++ b/sql/slave.cc	2009-02-11 11:56:25 +0000
@@ -2678,7 +2678,8 @@ pthread_handler_t handle_slave_sql(void 
     */
     pthread_cond_broadcast(&rli->start_cond);
     pthread_mutex_unlock(&rli->run_lock);
-    sql_print_error("Failed during slave thread initialization");
+    rli->report(ERROR_LEVEL, ER_SLAVE_FATAL_ERROR, 
+                "Failed during slave thread initialization");
     goto err;
   }
   thd->init_for_queries();
@@ -2722,9 +2723,9 @@ pthread_handler_t handle_slave_sql(void 
                          rli->group_relay_log_pos,
                          1 /*need data lock*/, &errmsg,
                          1 /*look for a description_event*/))
-  {
-    sql_print_error("Error initializing relay log position: %s",
-                    errmsg);
+  { 
+    rli->report(ERROR_LEVEL, ER_SLAVE_FATAL_ERROR, 
+                "Error initializing relay log position: %s", errmsg);
     goto err;
   }
   THD_CHECK_SENTRY(thd);
@@ -2769,8 +2770,8 @@ log '%s' at position %s, relay log '%s' 
     execute_init_command(thd, &sys_init_slave, &LOCK_sys_init_slave);
     if (thd->is_slave_error)
     {
-      sql_print_error("\
-Slave SQL thread aborted. Can't execute init_slave query");
+      rli->report(ERROR_LEVEL, thd->main_da.sql_errno(), 
+                  "Slave SQL thread aborted. Can't execute init_slave query");
       goto err;
     }
   }
@@ -2820,10 +2821,20 @@ Slave SQL thread aborted. Can't execute 
                       thd->main_da.sql_errno(), last_errno));
           if (last_errno == 0)
           {
+            /*
+ 	      This function is reporting an error which was not reported
+ 	      while executing exec_relay_log_event().
+ 	    */ 
             rli->report(ERROR_LEVEL, thd->main_da.sql_errno(), errmsg);
           }
           else if (last_errno != thd->main_da.sql_errno())
           {
+            /*
+             * An error was reported while executing exec_relay_log_event()
+             * however the error code differs from what is in the thread.
+             * This function prints out more information to help finding
+             * what caused the problem.
+             */  
             sql_print_error("Slave (additional info): %s Error_code: %d",
                             errmsg, thd->main_da.sql_errno());
           }

Thread
bzr commit into mysql-5.1-bugteam branch (alfranio.correia:2832)Bug#38197Alfranio Correia11 Mar