]> sourceware.org Git - lvm2.git/commitdiff
Optionally abort on internal errors (and leverage this option in the
authorPetr Rockai <prockai@redhat.com>
Mon, 30 Nov 2009 17:17:11 +0000 (17:17 +0000)
committerPetr Rockai <prockai@redhat.com>
Mon, 30 Nov 2009 17:17:11 +0000 (17:17 +0000)
testsuite). (This is showing a problem in the pvmove test for me, so I expect
the tests to start failing -- this needs to be fixed separately though.)

doc/example.conf
lib/commands/toolcontext.c
lib/config/defaults.h
lib/log/log.c
lib/log/lvm-logging.h
test/test-utils.sh

index 1067665da12b1fdb1246080688641b5b3a43c08f..fb0f59ad2a940327caac4c1509d6ade2106eff44 100644 (file)
@@ -316,6 +316,10 @@ global {
 
     # The external locking library to load if locking_type is set to 2.
     #   locking_library = "liblvm2clusterlock.so"
+
+    # Treat any internal errors as fatal errors, aborting the process that
+    # encountered the internal error. Please only enable for debugging.
+    abort_on_internal_errors = 0
 }
 
 activation {
index 80b6f8f03a2787357533f2d56da843d8a611c2fe..bb3e5d21d252954f8b5ab25835cd5d81a052c5bd 100644 (file)
@@ -147,7 +147,9 @@ static void _init_logging(struct cmd_context *cmd)
 
        /* Log message formatting */
        init_indent(find_config_tree_int(cmd, "log/indent",
-                                   DEFAULT_INDENT));
+                                        DEFAULT_INDENT));
+       init_abort_on_internal_errors(find_config_tree_int(cmd, "global/abort_on_internal_errors",
+                                                          DEFAULT_ABORT_ON_INTERNAL_ERRORS));
 
        cmd->default_settings.msg_prefix = find_config_tree_str(cmd,
                                                           "log/prefix",
index c4a23a42f044ec5d081d8b708965ce2f958832cd..a4e8d09f4e2930c819d06e50efc901353caebcb7 100644 (file)
@@ -85,6 +85,7 @@
 #define DEFAULT_VERBOSE 0
 #define DEFAULT_LOGLEVEL 0
 #define DEFAULT_INDENT 1
+#define DEFAULT_ABORT_ON_INTERNAL_ERRORS 0
 #define DEFAULT_UNITS "h"
 #define DEFAULT_SUFFIX 1
 #define DEFAULT_HOSTTAGS 0
index 1a7da46341911786eedb68145329a7a1e44971cb..5cc83ab6b16ef7323bfb4799039bfedd139504e5 100644 (file)
@@ -19,6 +19,7 @@
 #include "lvm-string.h"
 #include "lvm-file.h"
 #include "defaults.h"
+#include "config.h"
 
 #include <stdarg.h>
 #include <syslog.h>
@@ -35,6 +36,7 @@ static int _indent = 1;
 static int _log_suppress = 0;
 static char _msg_prefix[30] = "  ";
 static int _already_logging = 0;
+static int _abort_on_internal_errors = 0;
 
 static lvm2_log_fn_t _lvm2_log_fn = NULL;
 
@@ -140,6 +142,11 @@ void init_indent(int indent)
        _indent = indent;
 }
 
+void init_abort_on_internal_errors(int fatal)
+{
+       _abort_on_internal_errors = fatal;
+}
+
 void reset_lvm_errno(int store_errmsg)
 {
        _lvm_errno = 0;
@@ -172,9 +179,14 @@ void print_log(int level, const char *file, int line, int dm_errno,
        const char *trformat;           /* Translated format string */
        char *newbuf;
        int use_stderr = level & _LOG_STDERR;
+       int internal_error = 0;
 
        level &= ~_LOG_STDERR;
 
+       if (!strncmp(format, "Internal error:",
+                    strlen("Internal error:")))
+               internal_error = 1;
+
        if (_log_suppress == 2)
                return;
 
@@ -291,6 +303,9 @@ void print_log(int level, const char *file, int line, int dm_errno,
                va_end(ap);
        }
 
+       if (internal_error && _abort_on_internal_errors)
+               abort();
+
        if (level > debug_level())
                return;
 
index 560f060205588dce51944427beabaab15c0f1093..838dc1f2e19d8605c968c79dea34cec0657af21b 100644 (file)
@@ -39,6 +39,7 @@ void init_msg_prefix(const char *prefix);
 void init_log_file(const char *log_file, int append);
 void init_log_direct(const char *log_file, int append);
 void init_log_while_suspended(int log_while_suspended);
+void init_abort_on_internal_errors(int fatal);
 
 void fin_log(void);
 void release_log_memory(void);
index fa1f2c5fb06f0ca16572fcd9cd044443c98156b8..d339a79e85833435d23c5d8a70ffc5306e9c1df9 100644 (file)
@@ -199,8 +199,9 @@ prepare_lvmconf() {
     archive = 0
   }
   global {
+    abort_on_internal_errors = 1
     library_dir = "$G_root_/lib"
-     locking_dir = "$G_root_/var/lock/lvm"
+    locking_dir = "$G_root_/var/lock/lvm"
   }
 EOF
 }
This page took 0.04144 seconds and 5 git commands to generate.