]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: systemd wrapper: add support for passing the -x option.
authorOlivier Houchard <ohouchard@haproxy.com>
Sun, 9 Apr 2017 14:28:10 +0000 (16:28 +0200)
committerWilly Tarreau <w@1wt.eu>
Thu, 13 Apr 2017 17:15:17 +0000 (19:15 +0200)
Make the systemd wrapper chech if HAPROXY_STATS_SOCKET if set.
If set, it will use it as an argument to the "-x" option, which makes
haproxy asks for any listening socket, on the stats socket, in order
to achieve reloads with no new connection lost.

contrib/systemd/haproxy.service.in
src/haproxy-systemd-wrapper.c

index dca81a263ee122fbbd567454a2b1c5035e92a16b..05bb7161daa5ada26b3e7bccc21b4e64f99ea42b 100644 (file)
@@ -3,6 +3,8 @@ Description=HAProxy Load Balancer
 After=network.target
 
 [Service]
+# You can point the environment variable HAPROXY_STATS_SOCKET to a stats
+# socket if you want seamless reloads.
 Environment="CONFIG=/etc/haproxy/haproxy.cfg" "PIDFILE=/run/haproxy.pid"
 ExecStartPre=@SBINDIR@/haproxy -f $CONFIG -c -q
 ExecStart=@SBINDIR@/haproxy-systemd-wrapper -f $CONFIG -p $PIDFILE
index f6a9c852b277b5f193d6a952119a149b4cfe3e8b..457f5bd57133f5bd7b625e03425c236688b26494 100644 (file)
@@ -92,11 +92,15 @@ static void spawn_haproxy(char **pid_strv, int nb_pid)
        pid = fork();
        if (!pid) {
                char **argv;
+               char *stats_socket = NULL;
                int i;
                int argno = 0;
 
                /* 3 for "haproxy -Ds -sf" */
-               argv = calloc(4 + main_argc + nb_pid + 1, sizeof(char *));
+               if (nb_pid > 0)
+                       stats_socket = getenv("HAPROXY_STATS_SOCKET");
+               argv = calloc(4 + main_argc + nb_pid + 1 +
+                   (stats_socket != NULL ? 2 : 0), sizeof(char *));
                if (!argv) {
                        fprintf(stderr, SD_NOTICE "haproxy-systemd-wrapper: failed to calloc(), please try again later.\n");
                        exit(1);
@@ -121,6 +125,10 @@ static void spawn_haproxy(char **pid_strv, int nb_pid)
                        argv[argno++] = "-sf";
                        for (i = 0; i < nb_pid; ++i)
                                argv[argno++] = pid_strv[i];
+                       if (stats_socket != NULL) {
+                               argv[argno++] = "-x";
+                               argv[argno++] = stats_socket;
+                       }
                }
                argv[argno] = NULL;