Hello community, here is the log from the commit of package corosync for openSUSE:Factory checked in at 2018-02-03 15:41:04 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/corosync (Old) and /work/SRC/openSUSE:Factory/.corosync.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "corosync" Sat Feb 3 15:41:04 2018 rev:53 rq:571271 version:2.4.3 Changes: -------- --- /work/SRC/openSUSE:Factory/corosync/corosync.changes 2018-01-16 09:33:30.822559884 +0100 +++ /work/SRC/openSUSE:Factory/.corosync.new/corosync.changes 2018-02-03 15:41:07.369237681 +0100 @@ -1,0 +2,16 @@ +Wed Jan 31 05:59:06 UTC 2018 - b...@suse.com + +- 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 + +------------------------------------------------------------------- New: ---- 0013-logging-Make-blackbox-configurable.patch 0014-logging-Close-before-and-open-blackbox-after-fork.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ corosync.spec ++++++ --- /var/tmp/diff_new_pack.SRqLuH/_old 2018-02-03 15:41:08.541182943 +0100 +++ /var/tmp/diff_new_pack.SRqLuH/_new 2018-02-03 15:41:08.557182196 +0100 @@ -74,6 +74,8 @@ Patch17: 0010-qdevice-mv-free-str-after-port-validation.patch Patch18: 0011-libcpg-Fix-issue-with-partial-big-packet-assembly.patch Patch19: 0012-totemudp-u-Drop-truncated-packets-on-receive.patch +Patch20: 0013-logging-Make-blackbox-configurable.patch +Patch21: 0014-logging-Close-before-and-open-blackbox-after-fork.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build # openais is indeed gone and should be uninstalled. Yes, we do not @@ -158,6 +160,8 @@ %patch17 -p1 %patch18 -p1 %patch19 -p1 +%patch20 -p1 +%patch21 -p1 %build %if %{with runautogen} ++++++ 0001-coroapi-Use-size_t-for-private_data_size.patch ++++++ --- /var/tmp/diff_new_pack.SRqLuH/_old 2018-02-03 15:41:08.645178086 +0100 +++ /var/tmp/diff_new_pack.SRqLuH/_new 2018-02-03 15:41:08.645178086 +0100 @@ -1,19 +1,3 @@ -From afd97d788494007462b95a237161310af4c6e233 Mon Sep 17 00:00:00 2001 -From: Michael Jones <jone...@jonesmz.com> -Date: Thu, 25 May 2017 13:29:19 -0500 -Subject: [PATCH 6/6] coroapi: Use size_t for private_data_size - -Unsigned int and size_t represent two different concepts. - -Same problem was present in ipc_glue. - -Signed-off-by: Michael Jones <jone...@jonesmz.com> -Reviewed-by: Jan Friesse <jfrie...@redhat.com> ---- - exec/ipc_glue.c | 2 +- - include/corosync/coroapi.h | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - diff --git a/exec/ipc_glue.c b/exec/ipc_glue.c index d0a25d98..8b34d495 100644 --- a/exec/ipc_glue.c ++++++ 0002-fix-ifdown-udp.patch ++++++ --- /var/tmp/diff_new_pack.SRqLuH/_old 2018-02-03 15:41:08.661177338 +0100 +++ /var/tmp/diff_new_pack.SRqLuH/_new 2018-02-03 15:41:08.661177338 +0100 @@ -1,22 +1,3 @@ -From 790794bc1f654fd1b4c8c2904c8d5c60374b99c1 Mon Sep 17 00:00:00 2001 -From: Jan Friesse <jfrie...@redhat.com> -Date: Mon, 31 Jul 2017 18:05:18 +0200 -Subject: [PATCH] totemudp: Add local loop support for unicast msgs - -This patch intends to solve long time ifdown corosync problem. Idea is -to use multicast local socket also for sending unicast messages. -Together with testing what is current bind state it's possible to keep -pretending existence of old IP address instead of rebinding to localhost -what breaks a lot things badly. - -Heavilly based on Yu, Zou <zo...@shiqichuban.com> work. Also big thanks -to Bin Liu <b...@suse.com> for testing and bringing some ideas. - -Signed-off-by: Jan Friesse <jfrie...@redhat.com> ---- - exec/totemudp.c | 215 +++++++++++++++++++++++++++++++++----------------------- - 1 file changed, 128 insertions(+), 87 deletions(-) - diff --git a/exec/totemudp.c b/exec/totemudp.c index 31d05704..47830e4b 100644 --- a/exec/totemudp.c ++++++ 0005-do-not-convert-empty-uid-gid-to-0.patch ++++++ --- /var/tmp/diff_new_pack.SRqLuH/_old 2018-02-03 15:41:08.701175470 +0100 +++ /var/tmp/diff_new_pack.SRqLuH/_new 2018-02-03 15:41:08.701175470 +0100 @@ -1,12 +1,3 @@ -From a7a13690db8fc7508177138265c6930fa11ade3e Mon Sep 17 00:00:00 2001 -From: Bin Liu <b...@suse.com> -Date: Tue, 21 Nov 2017 11:03:10 +0800 -Subject: [PATCH] do not convert empty uid gid to 0 - ---- - exec/coroparse.c | 12 ++++++++++++ - 1 file changed, 12 insertions(+) - diff --git a/exec/coroparse.c b/exec/coroparse.c index 374ed7dd..ac654a11 100644 --- a/exec/coroparse.c ++++++ 0008-wd-fix-snprintf-warnings.patch ++++++ --- /var/tmp/diff_new_pack.SRqLuH/_old 2018-02-03 15:41:08.757172855 +0100 +++ /var/tmp/diff_new_pack.SRqLuH/_new 2018-02-03 15:41:08.761172668 +0100 @@ -1,17 +1,3 @@ -From 0906e5717cce87ac8db25ac9a335a63530dba839 Mon Sep 17 00:00:00 2001 -From: Bin Liu <b...@suse.com> -Date: Fri, 1 Dec 2017 10:58:50 +0800 -Subject: [PATCH] wd: fix snprintf warnings - -When running ./configure --enable-watchdog, gcc 7.2.1 will report -warnings for snprintf. This patch fixes the warnings. - -Signed-off-by: Bin Liu <b...@suse.com> -Reviewed-by: Jan Friesse <jfrie...@redhat.com> ---- - exec/wd.c | 20 ++++++++++---------- - 1 file changed, 10 insertions(+), 10 deletions(-) - diff --git a/exec/wd.c b/exec/wd.c index 8d0734c9..042d2046 100644 --- a/exec/wd.c ++++++ 0010-qdevice-mv-free-str-after-port-validation.patch ++++++ --- /var/tmp/diff_new_pack.SRqLuH/_old 2018-02-03 15:41:08.849168558 +0100 +++ /var/tmp/diff_new_pack.SRqLuH/_new 2018-02-03 15:41:08.857168184 +0100 @@ -1,21 +1,3 @@ -From 60d419917ac5a64abe8539bedb9fd57af1451ff5 Mon Sep 17 00:00:00 2001 -From: Bin Liu <b...@suse.com> -Date: Wed, 27 Dec 2017 18:21:34 +0800 -Subject: [PATCH] qdevice: mv free(str) after port validation - -in the previous code of qdevice_net_instance_init_from_cmap: - host_port = strtol(str, &ep, 10); - - free(str); - - if (host_port <= 0 || host_port > ((uint16_t)~0) || *ep != '\0') - -before free, *ep is '\0'. But after free, *ep changed to 'U', so mv -free behind the comparison. ---- - qdevices/qdevice-net-instance.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - diff --git a/qdevices/qdevice-net-instance.c b/qdevices/qdevice-net-instance.c index 7adcaa3f..e4b7b04d 100644 --- a/qdevices/qdevice-net-instance.c ++++++ 0011-libcpg-Fix-issue-with-partial-big-packet-assembly.patch ++++++ --- /var/tmp/diff_new_pack.SRqLuH/_old 2018-02-03 15:41:08.913165569 +0100 +++ /var/tmp/diff_new_pack.SRqLuH/_new 2018-02-03 15:41:08.913165569 +0100 @@ -1,23 +1,3 @@ -From 86579ff5f8f8d93e3173731bdf632827d4d1c711 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Rytis=20Karpu=C5=A1ka?= <ryt...@neurotechnology.com> -Date: Thu, 28 Dec 2017 15:17:12 +0200 -Subject: [PATCH 1/2] libcpg: Fix issue with partial big packet assembly -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Packet assembly is done seperately for each nodeid, pid pair, -therefore multiple packets are not mixed into single buffer. - -(backported from master c9dd11772cd6660d7651b6781df963efa914652e) - -Signed-off-by: Rytis Karpuška <ryt...@neurotechnology.com> -Reviewed-by: Jan Friesse <jfrie...@redhat.com> -Reviewed-by: Christine Caulfield <ccaul...@redhat.com> ---- - lib/cpg.c | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++------------- - 1 file changed, 76 insertions(+), 20 deletions(-) - diff --git a/lib/cpg.c b/lib/cpg.c index c831390b..a0e662f0 100644 --- a/lib/cpg.c ++++++ 0012-totemudp-u-Drop-truncated-packets-on-receive.patch ++++++ --- /var/tmp/diff_new_pack.SRqLuH/_old 2018-02-03 15:41:08.929164822 +0100 +++ /var/tmp/diff_new_pack.SRqLuH/_new 2018-02-03 15:41:08.929164822 +0100 @@ -1,21 +1,3 @@ -From 89d36a80a4899cb9536ad22cb16615c9eff043de Mon Sep 17 00:00:00 2001 -From: Jan Friesse <jfrie...@redhat.com> -Date: Fri, 5 Jan 2018 16:38:43 +0100 -Subject: [PATCH 1/2] totemudp[u]: Drop truncated packets on receive - -This is backport of part of "totemudpu: Scale receive buffer" patch in -master branch. - -We shouldn't not need to enlarge buffer because maximum number of nodes -for needle is 2 so join message is smaller. - -Signed-off-by: Jan Friesse <jfrie...@redhat.com> -Reviewed-by: Christine Caulfield <ccaul...@redhat.com> ---- - exec/totemudp.c | 26 ++++++++++++++++++++++++++ - exec/totemudpu.c | 26 ++++++++++++++++++++++++++ - 2 files changed, 52 insertions(+) - diff --git a/exec/totemudp.c b/exec/totemudp.c index 2f36b5d9..40e99f93 100644 --- a/exec/totemudp.c ++++++ 0013-logging-Make-blackbox-configurable.patch ++++++ 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 ++++++ 0014-logging-Close-before-and-open-blackbox-after-fork.patch ++++++ diff --git a/exec/logsys.c b/exec/logsys.c index a38cc5e8..8c9c222c 100644 --- a/exec/logsys.c +++ b/exec/logsys.c @@ -862,3 +862,19 @@ void logsys_blackbox_set(int enable) pthread_mutex_unlock (&logsys_config_mutex); } + +/* + * To set correct pid to qb blackbox filename after tty dettach (fork) we have to + * close (this function) and (if needed) reopen blackbox (logsys_blackbox_postfork function). + */ +void logsys_blackbox_prefork(void) +{ + + (void)qb_log_ctl(QB_LOG_BLACKBOX, QB_LOG_CONF_ENABLED, QB_FALSE); +} + +void logsys_blackbox_postfork(void) +{ + + _logsys_config_apply_blackbox(); +} diff --git a/exec/main.c b/exec/main.c index cd587dc8..426e56d0 100644 --- a/exec/main.c +++ b/exec/main.c @@ -1460,7 +1460,13 @@ int main (int argc, char **argv, char **envp) * Now we are fully initialized. */ if (background) { + logsys_blackbox_prefork(); + corosync_tty_detach (); + + logsys_blackbox_postfork(); + + log_printf (LOGSYS_LEVEL_DEBUG, "Corosync TTY detached"); } /* diff --git a/include/corosync/logsys.h b/include/corosync/logsys.h index ec38d2cb..a4aad69b 100644 --- a/include/corosync/logsys.h +++ b/include/corosync/logsys.h @@ -258,6 +258,11 @@ extern int logsys_thread_start (void); extern void logsys_blackbox_set(int enable); +extern void logsys_blackbox_prefork(void); + +extern void logsys_blackbox_postfork(void); + + /** * @brief logsys_subsys_id */ -- 2.13.6