- corosync exposes itself for a self-crash under rare circumstance(bsc#1078412) Added: 0013-logging-Make-blackbox-configurable.patch 0014-logging-Close-before-and-open-blackbox-after-fork.patch Modified: remove unncessary git commit messages 0001-coroapi-Use-size_t-for-private_data_size.patch 0002-fix-ifdown-udp.patch 0005-do-not-convert-empty-uid-gid-to-0.patch 0008-wd-fix-snprintf-warnings.patch 0010-qdevice-mv-free-str-after-port-validation.patch 0011-libcpg-Fix-issue-with-partial-big-packet-assembly.patch 0012-totemudp-u-Drop-truncated-packets-on-receive.patch OBS-URL: https://build.opensuse.org/request/show/571270 OBS-URL: https://build.opensuse.org/package/show/network:ha-clustering:Factory/corosync?expand=0&rev=133
202 lines
5.3 KiB
Diff
202 lines
5.3 KiB
Diff
diff --git a/exec/logconfig.c b/exec/logconfig.c
|
|
index 6d0bed6a..ccbffae6 100644
|
|
--- a/exec/logconfig.c
|
|
+++ b/exec/logconfig.c
|
|
@@ -127,7 +127,7 @@ static int insert_into_buffer(
|
|
}
|
|
|
|
/*
|
|
- * format set is the only global specific option that
|
|
+ * format set is global specific option that
|
|
* doesn't apply at system/subsystem level.
|
|
*/
|
|
static int corosync_main_config_format_set (
|
|
@@ -228,6 +228,40 @@ parse_error:
|
|
return (-1);
|
|
}
|
|
|
|
+/*
|
|
+ * blackbox is another global specific option that
|
|
+ * doesn't apply at system/subsystem level.
|
|
+ */
|
|
+static int corosync_main_config_blackbox_set (
|
|
+ const char **error_string)
|
|
+{
|
|
+ const char *error_reason;
|
|
+ char *value = NULL;
|
|
+
|
|
+ if (map_get_string("logging.blackbox", &value) == CS_OK) {
|
|
+ if (strcmp (value, "on") == 0) {
|
|
+ (void)logsys_blackbox_set(QB_TRUE);
|
|
+ } else if (strcmp (value, "off") == 0) {
|
|
+ (void)logsys_blackbox_set(QB_FALSE);
|
|
+ } else {
|
|
+ error_reason = "unknown value for blackbox";
|
|
+ free(value);
|
|
+ goto parse_error;
|
|
+ }
|
|
+
|
|
+ free(value);
|
|
+ } else {
|
|
+ (void)logsys_blackbox_set(QB_TRUE);
|
|
+ }
|
|
+
|
|
+ return (0);
|
|
+
|
|
+parse_error:
|
|
+ *error_string = error_reason;
|
|
+
|
|
+ return (-1);
|
|
+}
|
|
+
|
|
static int corosync_main_config_log_destination_set (
|
|
const char *path,
|
|
const char *key,
|
|
@@ -522,6 +556,10 @@ static int corosync_main_config_read_logging (
|
|
goto parse_error;
|
|
}
|
|
|
|
+ if (corosync_main_config_blackbox_set(&error_reason) < 0) {
|
|
+ goto parse_error;
|
|
+ }
|
|
+
|
|
if (corosync_main_config_set ("logging", NULL, &error_reason) < 0) {
|
|
goto parse_error;
|
|
}
|
|
diff --git a/exec/logsys.c b/exec/logsys.c
|
|
index 6b4995dd..a38cc5e8 100644
|
|
--- a/exec/logsys.c
|
|
+++ b/exec/logsys.c
|
|
@@ -119,6 +119,8 @@ static char *format_buffer=NULL;
|
|
|
|
static int logsys_thread_started = 0;
|
|
|
|
+static int logsys_blackbox_enabled = 1;
|
|
+
|
|
static int _logsys_config_subsys_get_unlocked (const char *subsys)
|
|
{
|
|
unsigned int i;
|
|
@@ -309,7 +311,6 @@ int _logsys_system_setup(
|
|
int i;
|
|
int32_t fidx;
|
|
char tempsubsys[LOGSYS_MAX_SUBSYS_NAMELEN];
|
|
- int blackbox_enable_res;
|
|
|
|
if ((mainsystem == NULL) ||
|
|
(strlen(mainsystem) >= LOGSYS_MAX_SUBSYS_NAMELEN)) {
|
|
@@ -371,7 +372,12 @@ int _logsys_system_setup(
|
|
QB_LOG_FILTER_FILE, "*", LOG_TRACE);
|
|
qb_log_ctl(QB_LOG_BLACKBOX, QB_LOG_CONF_SIZE, IPC_LOGSYS_SIZE);
|
|
qb_log_ctl(QB_LOG_BLACKBOX, QB_LOG_CONF_THREADED, QB_FALSE);
|
|
- blackbox_enable_res = qb_log_ctl(QB_LOG_BLACKBOX, QB_LOG_CONF_ENABLED, QB_TRUE);
|
|
+
|
|
+ /*
|
|
+ * Blackbox is disabled at the init and enabled later based
|
|
+ * on config (logging.blackbox) value.
|
|
+ */
|
|
+ qb_log_ctl(QB_LOG_BLACKBOX, QB_LOG_CONF_ENABLED, QB_FALSE);
|
|
|
|
if (logsys_format_set(NULL) == -1) {
|
|
return -1;
|
|
@@ -397,14 +403,6 @@ int _logsys_system_setup(
|
|
}
|
|
}
|
|
|
|
- if (blackbox_enable_res < 0) {
|
|
- LOGSYS_PERROR (-blackbox_enable_res, LOGSYS_LEVEL_WARNING,
|
|
- "Unable to initialize log flight recorder. "\
|
|
- "The most common cause of this error is " \
|
|
- "not enough space on /dev/shm. Corosync will continue work, " \
|
|
- "but blackbox will not be available");
|
|
- }
|
|
-
|
|
pthread_mutex_unlock (&logsys_config_mutex);
|
|
|
|
return (0);
|
|
@@ -767,10 +765,26 @@ static void _logsys_config_apply_per_subsys(int32_t s)
|
|
logsys_loggers[s].dirty = QB_FALSE;
|
|
}
|
|
|
|
+static void _logsys_config_apply_blackbox(void) {
|
|
+ int blackbox_enable_res;
|
|
+
|
|
+ blackbox_enable_res = qb_log_ctl(QB_LOG_BLACKBOX, QB_LOG_CONF_ENABLED, logsys_blackbox_enabled);
|
|
+
|
|
+ if (blackbox_enable_res < 0) {
|
|
+ LOGSYS_PERROR (-blackbox_enable_res, LOGSYS_LEVEL_WARNING,
|
|
+ "Unable to initialize log flight recorder. "\
|
|
+ "The most common cause of this error is " \
|
|
+ "not enough space on /dev/shm. Corosync will continue work, " \
|
|
+ "but blackbox will not be available");
|
|
+ }
|
|
+}
|
|
+
|
|
void logsys_config_apply(void)
|
|
{
|
|
int32_t s;
|
|
|
|
+ _logsys_config_apply_blackbox();
|
|
+
|
|
for (s = 0; s <= LOGSYS_MAX_SUBSYS_COUNT; s++) {
|
|
if (strcmp(logsys_loggers[s].subsys, "") == 0) {
|
|
continue;
|
|
@@ -838,3 +852,13 @@ int logsys_thread_start (void)
|
|
|
|
return (0);
|
|
}
|
|
+
|
|
+void logsys_blackbox_set(int enable)
|
|
+{
|
|
+
|
|
+ pthread_mutex_lock (&logsys_config_mutex);
|
|
+
|
|
+ logsys_blackbox_enabled = enable;
|
|
+
|
|
+ pthread_mutex_unlock (&logsys_config_mutex);
|
|
+}
|
|
diff --git a/exec/main.c b/exec/main.c
|
|
index 7fe24e2e..cd587dc8 100644
|
|
--- a/exec/main.c
|
|
+++ b/exec/main.c
|
|
@@ -220,6 +220,7 @@ static void corosync_blackbox_write_to_file (void)
|
|
|
|
if ((res = qb_log_blackbox_write_to_file(fname)) < 0) {
|
|
LOGSYS_PERROR(-res, LOGSYS_LEVEL_ERROR, "Can't store blackbox file");
|
|
+ return ;
|
|
}
|
|
snprintf(fdata_fname, sizeof(fdata_fname), "%s/fdata", get_run_dir());
|
|
unlink(fdata_fname);
|
|
diff --git a/include/corosync/logsys.h b/include/corosync/logsys.h
|
|
index 0b2fbff8..ec38d2cb 100644
|
|
--- a/include/corosync/logsys.h
|
|
+++ b/include/corosync/logsys.h
|
|
@@ -256,6 +256,8 @@ extern int _logsys_subsys_create (const char *subsys, const char *filename);
|
|
*/
|
|
extern int logsys_thread_start (void);
|
|
|
|
+extern void logsys_blackbox_set(int enable);
|
|
+
|
|
/**
|
|
* @brief logsys_subsys_id
|
|
*/
|
|
diff --git a/man/corosync.conf.5 b/man/corosync.conf.5
|
|
index 06390281..68103d0e 100644
|
|
--- a/man/corosync.conf.5
|
|
+++ b/man/corosync.conf.5
|
|
@@ -539,6 +539,12 @@ This specifies that the code function name should be printed.
|
|
|
|
The default is off.
|
|
|
|
+.TP
|
|
+blackbox
|
|
+This specifies that blackbox functionality should be enabled.
|
|
+
|
|
+The defualt is on.
|
|
+
|
|
.PP
|
|
The following options are valid both for top level logging directive
|
|
and they can be overridden in logger_subsys entries.
|
|
--
|
|
2.13.6
|
|
|