List:Commits« Previous MessageNext Message »
From:Alfranio Correia Date:May 8 2009 6:43pm
Subject:bzr commit into mysql-6.0-rpl branch (alfranio.correia:2847) WL#4828
View as plain text  
#At file:///home/acorreia/workspace.sun/repository.mysql/bzrwork/wl-4828/mysql-6.0-rpl/ based on revid:zhenxing.he@stripped

 2847 Alfranio Correia	2009-05-08
      WL#4828

    modified:
      dbug/dbug.c
      include/my_dbug.h
      sql/mysql_priv.h
      sql/sql_class.cc
      sql/sql_class.h
      sql/sql_partition.cc
=== modified file 'dbug/dbug.c'
--- a/dbug/dbug.c	2009-03-25 16:51:28 +0000
+++ b/dbug/dbug.c	2009-05-08 18:43:13 +0000
@@ -1836,6 +1836,38 @@ BOOLEAN _db_keyword_(CODE_STATE *cs, con
 /*
  *  FUNCTION
  *
+ *      _db_keywords_    test keyword formed by a set of strings for member
+ *                       of keyword list
+ *
+ *  DESCRIPTION
+ *
+ *      This function is similar to _db_keyword but receives a set of strings to
+ *      be concatenated in order to make the keyword to be compared.
+ */
+
+BOOLEAN _db_keywords_(CODE_STATE *cs, int strict, ...)
+{
+  char *src;
+  va_list ap;
+  int pos= 0;
+  int size= 0;
+  char dest[_MAX_FUNC_NAME_];
+
+  va_start(ap, strict);
+  while ((src = va_arg(ap, char *)) && size < _MAX_FUNC_NAME_)
+  {
+    for (pos= 0; (size + pos) < _MAX_FUNC_NAME_ && src[pos] != '\0' ; pos++)
+      dest[size + pos] = src[pos];
+    size= size + pos;
+  }
+  dest[size + pos] = '\0';
+  va_end(ap);
+  return _db_keyword_(cs, dest, strict);
+}
+
+/*
+ *  FUNCTION
+ *
  *      Indent    indent a line to the given indentation level
  *
  *  SYNOPSIS
@@ -2460,6 +2492,13 @@ void _db_unlock_file_()
   pthread_mutex_unlock(&THR_LOCK_dbug);
 }
 
+const char* _db_get_func_(void)
+{
+  CODE_STATE *cs;
+  get_code_state_or_return(0);
+  return cs->func;
+}
+
 /*
  * Here we need the definitions of the clock routine.  Add your
  * own for whatever system that you have.

=== modified file 'include/my_dbug.h'
--- a/include/my_dbug.h	2008-12-10 17:04:38 +0000
+++ b/include/my_dbug.h	2009-05-08 18:43:13 +0000
@@ -31,6 +31,7 @@ struct _db_stack_frame_ {
 struct  _db_code_state_;
 extern  my_bool _dbug_on_;
 extern  my_bool _db_keyword_(struct _db_code_state_ *, const char *, int);
+extern  my_bool _VARARGS(_db_keywords_(struct _db_code_state_ *, int, ...));
 extern  int _db_explain_(struct _db_code_state_ *cs, char *buf, size_t len);
 extern  int _db_explain_init_(char *buf, size_t len);
 extern	int _db_is_pushed_(void);
@@ -54,6 +55,7 @@ extern  void _db_lock_file_(void);
 extern  void _db_unlock_file_(void);
 extern  FILE *_db_fp_(void);
 extern  void _db_flush_();
+extern  const char* _db_get_func_(void);
 
 #define DBUG_ENTER(a) struct _db_stack_frame_ _db_stack_frame_; \
         _db_enter_ (a,__FILE__,__LINE__,&_db_stack_frame_)
@@ -101,6 +103,20 @@ extern  void _db_flush_();
                      (void)_CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDERR),\
                      _exit(3))
 #endif
+#define _MAX_FUNC_NAME_ 255
+#define CHECK_CRASH(func, op) \
+        do { \
+          if (_db_keywords_(0, 0, (func), (op), 0)) \
+            { (_db_flush_(), abort()); } \
+        } while (0)
+#define DBUG_CRASH_ENTER(func) \
+  DBUG_ENTER(func); CHECK_CRASH(func, "_crash_enter")
+#define DBUG_CRASH_RETURN(val) \
+  do {CHECK_CRASH (_db_get_func_(), "_crash_return"); \
+    DBUG_RETURN(val);} while(0)
+#define DBUG_CRASH_VOID_RETURN \
+  do {CHECK_CRASH (_db_get_func_(), "_crash_return"); \
+    DBUG_VOID_RETURN;} while(0)
 
 #else                                           /* No debugger */
 
@@ -132,6 +148,9 @@ extern  void _db_flush_();
 #define DEBUGGER_ON                     do { } while(0)
 #define IF_DBUG(A)
 #define DBUG_ABORT()                    abort()
+#define DBUG_CRASH_ENTER(func)
+#define DBUG_CRASH_RETURN(val)          do { return(val); } while(0)
+#define DBUG_CRASH_VOID_RETURN          do { return; } while(0)
 
 #endif
 #ifdef  __cplusplus

=== modified file 'sql/mysql_priv.h'
--- a/sql/mysql_priv.h	2009-04-30 14:35:36 +0000
+++ b/sql/mysql_priv.h	2009-05-08 18:43:13 +0000
@@ -977,100 +977,6 @@ struct Query_cache_query_flags
 #define query_cache_is_cacheable_query(L) 0
 #endif /*HAVE_QUERY_CACHE*/
 
-/*
-  Error injector Macros to enable easy testing of recovery after failures
-  in various error cases.
-*/
-#ifndef ERROR_INJECT_SUPPORT
-
-#define ERROR_INJECT(x) 0
-#define ERROR_INJECT_ACTION(x,action) 0
-#define ERROR_INJECT_CRASH(x) 0
-#define ERROR_INJECT_VALUE(x) 0
-#define ERROR_INJECT_VALUE_ACTION(x,action) 0
-#define ERROR_INJECT_VALUE_CRASH(x) 0
-#define SET_ERROR_INJECT_VALUE(x)
-
-#else
-
-inline bool check_and_unset_keyword(const char *dbug_str)
-{
-  const char *extra_str= "-d,";
-  char total_str[200];
-  if (_db_keyword_ (0, dbug_str, 1))
-  {
-    strxmov(total_str, extra_str, dbug_str, NullS);
-    DBUG_SET(total_str);
-    return 1;
-  }
-  return 0;
-}
-
-
-inline bool
-check_and_unset_inject_value(int value)
-{
-  THD *thd= current_thd;
-  if (thd->error_inject_value == (uint)value)
-  {
-    thd->error_inject_value= 0;
-    return 1;
-  }
-  return 0;
-}
-
-/*
-  ERROR INJECT MODULE:
-  --------------------
-  These macros are used to insert macros from the application code.
-  The event that activates those error injections can be activated
-  from SQL by using:
-  SET SESSION dbug=+d,code;
-
-  After the error has been injected, the macros will automatically
-  remove the debug code, thus similar to using:
-  SET SESSION dbug=-d,code
-  from SQL.
-
-  ERROR_INJECT_CRASH will inject a crash of the MySQL Server if code
-  is set when macro is called. ERROR_INJECT_CRASH can be used in
-  if-statements, it will always return FALSE unless of course it
-  crashes in which case it doesn't return at all.
-
-  ERROR_INJECT_ACTION will inject the action specified in the action
-  parameter of the macro, before performing the action the code will
-  be removed such that no more events occur. ERROR_INJECT_ACTION
-  can also be used in if-statements and always returns FALSE.
-  ERROR_INJECT can be used in a normal if-statement, where the action
-  part is performed in the if-block. The macro returns TRUE if the
-  error was activated and otherwise returns FALSE. If activated the
-  code is removed.
-
-  Sometimes it is necessary to perform error inject actions as a serie
-  of events. In this case one can use one variable on the THD object.
-  Thus one sets this value by using e.g. SET_ERROR_INJECT_VALUE(100).
-  Then one can later test for it by using ERROR_INJECT_CRASH_VALUE,
-  ERROR_INJECT_ACTION_VALUE and ERROR_INJECT_VALUE. This have the same
-  behaviour as the above described macros except that they use the
-  error inject value instead of a code used by DBUG macros.
-*/
-#define SET_ERROR_INJECT_VALUE(x) \
-  current_thd->error_inject_value= (x)
-#define ERROR_INJECT_CRASH(code) \
-  DBUG_EVALUATE_IF(code, (DBUG_ABORT(), 0), 0)
-#define ERROR_INJECT_ACTION(code, action) \
-  (check_and_unset_keyword(code) ? ((action), 0) : 0)
-#define ERROR_INJECT(code) \
-  check_and_unset_keyword(code)
-#define ERROR_INJECT_VALUE(value) \
-  check_and_unset_inject_value(value)
-#define ERROR_INJECT_VALUE_ACTION(value,action) \
-  (check_and_unset_inject_value(value) ? (action) : 0)
-#define ERROR_INJECT_VALUE_CRASH(value) \
-  ERROR_INJECT_VALUE_ACTION(value, (DBUG_ABORT(), 0))
-
-#endif
-
 void write_bin_log(THD *thd, bool clear_error,
                    char const *query, ulong query_length);
 

=== modified file 'sql/sql_class.cc'
--- a/sql/sql_class.cc	2009-05-07 11:44:40 +0000
+++ b/sql/sql_class.cc	2009-05-08 18:43:13 +0000
@@ -493,9 +493,6 @@ THD::THD()
   limit_found_rows= 0;
   row_count_func= -1;
   statement_id_counter= 0UL;
-#ifdef ERROR_INJECT_SUPPORT
-  error_inject_value= 0UL;
-#endif
   // Must be reset to handle error with THD's created for init of mysqld
   lex->current_select= 0;
   start_time=(time_t) 0;

=== modified file 'sql/sql_class.h'
--- a/sql/sql_class.h	2009-05-08 07:49:21 +0000
+++ b/sql/sql_class.h	2009-05-08 18:43:13 +0000
@@ -1696,9 +1696,6 @@ public:
   query_id_t query_id;
   ulong      col_access;
 
-#ifdef ERROR_INJECT_SUPPORT
-  ulong      error_inject_value;
-#endif
   /* Statement id is thread-wide. This counter is used to generate ids */
   ulong      statement_id_counter;
   ulong	     rand_saved_seed1, rand_saved_seed2;

=== modified file 'sql/sql_partition.cc'
--- a/sql/sql_partition.cc	2009-04-01 09:15:50 +0000
+++ b/sql/sql_partition.cc	2009-05-08 18:43:13 +0000
@@ -6140,28 +6140,28 @@ uint fast_alter_partition_table(THD *thd
       to test if recovery is properly done.
     */
     if (write_log_drop_shadow_frm(lpt) ||
-        ERROR_INJECT_CRASH("crash_drop_partition_1") ||
+        DBUG_EVALUATE_IF("crash_drop_partition_1", (DBUG_ABORT(), 0), 0) ||
         mysql_write_frm(lpt, WFRM_WRITE_SHADOW) ||
-        ERROR_INJECT_CRASH("crash_drop_partition_2") ||
+        DBUG_EVALUATE_IF("crash_drop_partition_2", (DBUG_ABORT(), 0), 0) ||
         write_log_drop_partition(lpt) ||
-        ERROR_INJECT_CRASH("crash_drop_partition_3") ||
+        DBUG_EVALUATE_IF("crash_drop_partition_3", (DBUG_ABORT(), 0), 0) ||
         (not_completed= FALSE) ||
         abort_and_upgrade_lock(lpt) ||
-        ERROR_INJECT_CRASH("crash_drop_partition_4") ||
+        DBUG_EVALUATE_IF("crash_drop_partition_4", (DBUG_ABORT(), 0), 0) ||
         alter_close_tables(lpt) ||
-        ERROR_INJECT_CRASH("crash_drop_partition_5") ||
+        DBUG_EVALUATE_IF("crash_drop_partition_5", (DBUG_ABORT(), 0), 0) ||
         ((!thd->lex->no_write_to_binlog) &&
          (write_bin_log(thd, FALSE,
                         thd->query, thd->query_length), FALSE)) ||
-        ERROR_INJECT_CRASH("crash_drop_partition_6") ||
+        DBUG_EVALUATE_IF("crash_drop_partition_6", (DBUG_ABORT(), 0), 0) ||
         ((frm_install= TRUE), FALSE) ||
         mysql_write_frm(lpt, WFRM_INSTALL_SHADOW) ||
         ((frm_install= FALSE), FALSE) ||
-        ERROR_INJECT_CRASH("crash_drop_partition_7") ||
+        DBUG_EVALUATE_IF("crash_drop_partition_7", (DBUG_ABORT(), 0), 0) ||
         mysql_drop_partitions(lpt) ||
-        ERROR_INJECT_CRASH("crash_drop_partition_8") ||
+        DBUG_EVALUATE_IF("crash_drop_partition_8", (DBUG_ABORT(), 0), 0) ||
         (write_log_completed(lpt, FALSE), FALSE) ||
-        ERROR_INJECT_CRASH("crash_drop_partition_9") ||
+        DBUG_EVALUATE_IF("crash_drop_partition_9", (DBUG_ABORT(), 0), 0) ||
         (alter_partition_lock_handling(lpt), FALSE)) 
     {
       handle_alter_part_error(lpt, not_completed, TRUE, frm_install);
@@ -6209,27 +6209,27 @@ uint fast_alter_partition_table(THD *thd
       13)Complete query
     */
     if (write_log_add_change_partition(lpt) ||
-        ERROR_INJECT_CRASH("crash_add_partition_1") ||
+        DBUG_EVALUATE_IF("crash_add_partition_1", (DBUG_ABORT(), 0), 0) ||
         mysql_write_frm(lpt, WFRM_WRITE_SHADOW) ||
-        ERROR_INJECT_CRASH("crash_add_partition_2") ||
+        DBUG_EVALUATE_IF("crash_add_partition_2", (DBUG_ABORT(), 0), 0) ||
         mysql_change_partitions(lpt) ||
-        ERROR_INJECT_CRASH("crash_add_partition_3") ||
+        DBUG_EVALUATE_IF("crash_add_partition_3", (DBUG_ABORT(), 0), 0) ||
         abort_and_upgrade_lock(lpt) ||
-        ERROR_INJECT_CRASH("crash_add_partition_4") ||
+        DBUG_EVALUATE_IF("crash_add_partition_4", (DBUG_ABORT(), 0), 0) ||
         alter_close_tables(lpt) ||
-        ERROR_INJECT_CRASH("crash_add_partition_5") ||
+        DBUG_EVALUATE_IF("crash_add_partition_5", (DBUG_ABORT(), 0), 0) ||
         ((!thd->lex->no_write_to_binlog) &&
          (write_bin_log(thd, FALSE,
                         thd->query, thd->query_length), FALSE)) ||
-        ERROR_INJECT_CRASH("crash_add_partition_6") ||
+        DBUG_EVALUATE_IF("crash_add_partition_6", (DBUG_ABORT(), 0), 0) ||
         write_log_rename_frm(lpt) ||
         (not_completed= FALSE) ||
-        ERROR_INJECT_CRASH("crash_add_partition_7") ||
+        DBUG_EVALUATE_IF("crash_add_partition_7", (DBUG_ABORT(), 0), 0) ||
         ((frm_install= TRUE), FALSE) ||
         mysql_write_frm(lpt, WFRM_INSTALL_SHADOW) ||
-        ERROR_INJECT_CRASH("crash_add_partition_8") ||
+        DBUG_EVALUATE_IF("crash_add_partition_8", (DBUG_ABORT(), 0), 0) ||
         (write_log_completed(lpt, FALSE), FALSE) ||
-        ERROR_INJECT_CRASH("crash_add_partition_9") ||
+        DBUG_EVALUATE_IF("crash_add_partition_9", (DBUG_ABORT(), 0), 0) ||
         (alter_partition_lock_handling(lpt), FALSE))
     {
       handle_alter_part_error(lpt, not_completed, FALSE, frm_install);
@@ -6291,31 +6291,31 @@ uint fast_alter_partition_table(THD *thd
       12) Complete query
     */
     if (write_log_add_change_partition(lpt) ||
-        ERROR_INJECT_CRASH("crash_change_partition_1") ||
+        DBUG_EVALUATE_IF("crash_change_partition_1", (DBUG_ABORT(), 0), 0) ||
         mysql_write_frm(lpt, WFRM_WRITE_SHADOW) ||
-        ERROR_INJECT_CRASH("crash_change_partition_2") ||
+        DBUG_EVALUATE_IF("crash_change_partition_2", (DBUG_ABORT(), 0), 0) ||
         mysql_change_partitions(lpt) ||
-        ERROR_INJECT_CRASH("crash_change_partition_3") ||
+        DBUG_EVALUATE_IF("crash_change_partition_3", (DBUG_ABORT(), 0), 0) ||
         write_log_final_change_partition(lpt) ||
-        ERROR_INJECT_CRASH("crash_change_partition_4") ||
+        DBUG_EVALUATE_IF("crash_change_partition_4", (DBUG_ABORT(), 0), 0) ||
         (not_completed= FALSE) ||
         abort_and_upgrade_lock(lpt) ||
-        ERROR_INJECT_CRASH("crash_change_partition_5") ||
+        DBUG_EVALUATE_IF("crash_change_partition_5", (DBUG_ABORT(), 0), 0) ||
         alter_close_tables(lpt) ||
-        ERROR_INJECT_CRASH("crash_change_partition_6") ||
+        DBUG_EVALUATE_IF("crash_change_partition_6", (DBUG_ABORT(), 0), 0) ||
         ((!thd->lex->no_write_to_binlog) &&
          (write_bin_log(thd, FALSE,
                         thd->query, thd->query_length), FALSE)) ||
-        ERROR_INJECT_CRASH("crash_change_partition_7") ||
+        DBUG_EVALUATE_IF("crash_change_partition_7", (DBUG_ABORT(), 0), 0) ||
         mysql_write_frm(lpt, WFRM_INSTALL_SHADOW) ||
-        ERROR_INJECT_CRASH("crash_change_partition_8") ||
+        DBUG_EVALUATE_IF("crash_change_partition_8", (DBUG_ABORT(), 0), 0) ||
         mysql_drop_partitions(lpt) ||
-        ERROR_INJECT_CRASH("crash_change_partition_9") ||
+        DBUG_EVALUATE_IF("crash_change_partition_9", (DBUG_ABORT(), 0), 0) ||
         mysql_rename_partitions(lpt) ||
         ((frm_install= TRUE), FALSE) ||
-        ERROR_INJECT_CRASH("crash_change_partition_10") ||
+        DBUG_EVALUATE_IF("crash_change_partition_10", (DBUG_ABORT(), 0), 0) ||
         (write_log_completed(lpt, FALSE), FALSE) ||
-        ERROR_INJECT_CRASH("crash_change_partition_11") ||
+        DBUG_EVALUATE_IF("crash_change_partition_11", (DBUG_ABORT(), 0), 0) ||
         (alter_partition_lock_handling(lpt), FALSE))
     {
       handle_alter_part_error(lpt, not_completed, FALSE, frm_install);


Attachment: [text/bzr-bundle]
Thread
bzr commit into mysql-6.0-rpl branch (alfranio.correia:2847) WL#4828Alfranio Correia8 May
  • Re: bzr commit into mysql-6.0-rpl branch (alfranio.correia:2847)WL#4828Davi Arnaut12 May
    • Re: bzr commit into mysql-6.0-rpl branch (alfranio.correia:2847)WL#4828Alfranio Correia13 May
    • Re: bzr commit into mysql-6.0-rpl branch (alfranio.correia:2847)WL#4828Alfranio Correia13 May