]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: startup: replace HAPROXY_LOAD_SUCCESS with global load_status
authorValentine Krasnobaeva <vkrasnobaeva@haproxy.com>
Tue, 12 Nov 2024 10:28:46 +0000 (11:28 +0100)
committerWilliam Lallemand <wlallemand@haproxy.com>
Wed, 13 Nov 2024 08:50:05 +0000 (09:50 +0100)
After master-worker refactoring, master performs re-exec only once up to
receiving "reload" command or USR2 signal. There is no more the second
master's re-exec to free unused memory. Thus, there is no longer need to export
environment variable HAPROXY_LOAD_SUCCESS with worker process load status. This
status can be simply saved in a global variable load_status.

include/haproxy/mworker.h
src/cli.c
src/haproxy.c
src/mworker.c

index 72c5f94a12b06a8ba174dcba1e99dd5b514b206d..7d2fa251e6d592184531e1d3ba8ba77dba1a9ee5 100644 (file)
@@ -18,6 +18,7 @@
 #include <haproxy/signal-t.h>
 
 extern int max_reloads;
+extern int load_status;
 extern struct mworker_proc *proc_self;
 /* master CLI configuration (-S flag) */
 extern struct list mworker_cli_conf;
index e63ba93642843d0d7dfa89486af3b8119e1aa647..de4dca628d6be680f63d4652c16ee6d186683aa8 100644 (file)
--- a/src/cli.c
+++ b/src/cli.c
@@ -2532,7 +2532,7 @@ static int _send_status(char **args, char *payload, struct appctx *appctx, void
                        kill(proc->pid, oldpids_sig);
                }
        }
-       setenv("HAPROXY_LOAD_SUCCESS", "1", 1);
+       load_status = 1;
        ha_notice("Loading success.\n");
 
 #if defined(USE_SYSTEMD)
index 49b08592a13b50cebb5cac96ddcce8aa468fa83a..be9fd5a06e51efcd865bf9d31b725f9061a2e74d 100644 (file)
@@ -936,7 +936,7 @@ void on_new_child_failure()
        sock_drop_unused_old_sockets();
 
        usermsgs_clr(NULL);
-       setenv("HAPROXY_LOAD_SUCCESS", "0", 1);
+       load_status = 0;
        ha_warning("Failed to load worker!\n");
 #if defined(USE_SYSTEMD)
        /* the sd_notify API is not able to send a reload failure signal. So
@@ -3048,10 +3048,10 @@ static void run_master_in_recovery_mode(int argc, char **argv)
        struct mworker_proc *proc;
        char *errmsg = NULL;
 
-       /* HAPROXY_LOAD_SUCCESS is checked in cli_io_handler_show_cli_sock() to
+       /* load_status is global and checked in cli_io_handler_show_cli_sock() to
         * dump master startup logs with its alerts/warnings via master CLI sock.
         */
-       setenv("HAPROXY_LOAD_SUCCESS", "0", 1);
+       load_status = 0;
 
        /* increment the number failed reloads */
        list_for_each_entry(proc, &proc_list, list) {
index b8daf2935bc1cf3a1031984555fcf39023e0d6b3..d0ef3141e252a0cc96f256acce41052e41cea6c5 100644 (file)
@@ -47,6 +47,7 @@
 
 static int exitcode = -1;
 int max_reloads = INT_MAX; /* max number of reloads a worker can have until they are killed */
+int load_status; /* worker process startup status: 1 - loaded successfully; 0 - load failed */
 struct mworker_proc *proc_self = NULL; /* process structure of current process */
 struct list mworker_cli_conf = LIST_HEAD_INIT(mworker_cli_conf); /* master CLI configuration (-S flag) */
 
@@ -795,7 +796,6 @@ static int cli_parse_reload(char **args, char *payload, struct appctx *appctx, v
 static int cli_io_handler_show_loadstatus(struct appctx *appctx)
 {
        struct mworker_proc *proc;
-       char *env;
 
        if (!cli_has_level(appctx, ACCESS_LVL_OPER))
                return 1;
@@ -810,15 +810,11 @@ static int cli_io_handler_show_loadstatus(struct appctx *appctx)
                }
        }
 
-       env = getenv("HAPROXY_LOAD_SUCCESS");
-       if (!env)
-               return 1;
-
-       if (strcmp(env, "0") == 0) {
+       if (load_status == 0)
                chunk_printf(&trash, "Success=0\n");
-       } else if (strcmp(env, "1") == 0) {
+       else
                chunk_printf(&trash, "Success=1\n");
-       }
+
 #ifdef USE_SHM_OPEN
        if (startup_logs && ring_data(startup_logs) > 1)
                chunk_appendf(&trash, "--\n");