From: William Lallemand Date: Fri, 24 Nov 2017 21:02:34 +0000 (+0100) Subject: MAJOR: mworker: exits the master on failure X-Git-Tag: v1.8.0~15 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4cfede87a313456fcbce7a185312460b4e1d05b7;p=thirdparty%2Fhaproxy.git MAJOR: mworker: exits the master on failure This patch changes the behavior of the master during the exit of a worker. When a worker exits with an error code, for example in the case of a segfault, all workers are now killed and the master leaves. If you don't want this behavior you can use the option "master-worker no-exit-on-failure". --- diff --git a/doc/configuration.txt b/doc/configuration.txt index ea326d19a7..6fb239aa1d 100644 --- a/doc/configuration.txt +++ b/doc/configuration.txt @@ -869,19 +869,20 @@ lua-load This global directive loads and executes a Lua file. This directive can be used multiple times. -master-worker [exit-on-failure] +master-worker [no-exit-on-failure] Master-worker mode. It is equivalent to the command line "-W" argument. This mode will launch a "master" which will monitor the "workers". Using this mode, you can reload HAProxy directly by sending a SIGUSR2 signal to the master. The master-worker mode is compatible either with the foreground or daemon mode. It is recommended to use this mode with multiprocess and systemd. - The "exit-on-failure" option allows the master to kill every workers and - exit when one of the current workers died. It is convenient to combine this - option with Restart=on-failure in a systemd unit file in order to relaunch - the whole process. + By default, if a worker exits with a bad return code, in the case of a + segfault for example, all workers will be killed, and the master will leave. + It is convenient to combine this behavior with Restart=on-failure in a + systemd unit file in order to relaunch the whole process. If you don't want + this behavior, you must use the keyword "no-exit-on-failure". - See alors "-W" in the management guide. + See also "-W" in the management guide. nbproc Creates processes when going daemon. This requires the "daemon" diff --git a/include/types/global.h b/include/types/global.h index 0f50d4571a..a3d1e96202 100644 --- a/include/types/global.h +++ b/include/types/global.h @@ -65,7 +65,7 @@ #define GTUNE_RESOLVE_DONTFAIL (1<<7) #define GTUNE_SOCKET_TRANSFER (1<<8) -#define GTUNE_EXIT_ONFAILURE (1<<9) +#define GTUNE_NOEXIT_ONFAILURE (1<<9) #define GTUNE_USE_SYSTEMD (1<<10) /* Access level for a stats socket */ diff --git a/src/cfgparse.c b/src/cfgparse.c index f70eafb5db..e7e32cf9d2 100644 --- a/src/cfgparse.c +++ b/src/cfgparse.c @@ -716,8 +716,8 @@ int cfg_parse_global(const char *file, int linenum, char **args, int kwm) if (alertif_too_many_args(1, file, linenum, args, &err_code)) goto out; if (*args[1]) { - if (!strcmp(args[1], "exit-on-failure")) { - global.tune.options |= GTUNE_EXIT_ONFAILURE; + if (!strcmp(args[1], "no-exit-on-failure")) { + global.tune.options |= GTUNE_NOEXIT_ONFAILURE; } else { ha_alert("parsing [%s:%d] : '%s' only supports 'exit-on-failure' option.\n", file, linenum, args[0]); err_code |= ERR_ALERT | ERR_FATAL; diff --git a/src/haproxy.c b/src/haproxy.c index faa46e076e..891a021d94 100644 --- a/src/haproxy.c +++ b/src/haproxy.c @@ -759,7 +759,7 @@ restart_wait: if (current_child(exitpid)) { ha_alert("Current worker %d left with exit code %d\n", exitpid, status); if (status != 0 && status != 130 && status != 143 - && global.tune.options & GTUNE_EXIT_ONFAILURE) { + && !(global.tune.options & GTUNE_NOEXIT_ONFAILURE)) { ha_alert("exit-on-failure: killing every workers with SIGTERM\n"); mworker_kill(SIGTERM); }