mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-01-06 20:29:48 +00:00
BUG/MEDIUM: mworker: report status, if daemonized master fails
As daemonization fork happens now very early and before the master-worker fork, if master or worker processes fail during the initialization, some critical errors can't be reported to stdout. The launching (parent) process in such cases exits with 0. This makes an impression, that master and his worker have successfully started at background, which really complicates the operations. In the previous commit a pipe was added to make daemonized child communicate with his parent. Let's add the same logic to master-worker mode. Up to receiving the READY message from the worker, master will "forward" it via the pipe to the launching process. Launching process can obtain master's exit status, if the master fails to start and nothing has been written in the pipe. This fix should be backported only in 3.1.
This commit is contained in:
parent
663d75e7a0
commit
97aaf76716
10
src/cli.c
10
src/cli.c
@ -2494,6 +2494,7 @@ static int _send_status(char **args, char *payload, struct appctx *appctx, void
|
||||
{
|
||||
struct listener *mproxy_li;
|
||||
struct mworker_proc *proc;
|
||||
char *msg = "READY\n";
|
||||
int pid;
|
||||
|
||||
BUG_ON((strcmp(args[0], "_send_status") != 0),
|
||||
@ -2537,6 +2538,15 @@ static int _send_status(char **args, char *payload, struct appctx *appctx, void
|
||||
nb_oldpids = tell_old_pids(oldpids_sig);
|
||||
}
|
||||
|
||||
if (daemon_fd[1] != -1) {
|
||||
if (write(daemon_fd[1], msg, strlen(msg)) < 0) {
|
||||
ha_alert("[%s.main()] Failed to write into pipe with parent process: %s\n", progname, strerror(errno));
|
||||
exit(1);
|
||||
}
|
||||
close(daemon_fd[1]);
|
||||
daemon_fd[1] = -1;
|
||||
}
|
||||
|
||||
load_status = 1;
|
||||
ha_notice("Loading success.\n");
|
||||
|
||||
|
@ -1250,6 +1250,11 @@ void mworker_apply_master_worker_mode(void)
|
||||
|
||||
exit(EXIT_FAILURE);
|
||||
case 0:
|
||||
if (daemon_fd[1] >= 0) {
|
||||
close(daemon_fd[1]);
|
||||
daemon_fd[1] = -1;
|
||||
}
|
||||
|
||||
/* This one must not be exported, it's internal! */
|
||||
unsetenv("HAPROXY_MWORKER_REEXEC");
|
||||
ha_random_jump96(1);
|
||||
|
Loading…
Reference in New Issue
Block a user