]> git.ipfire.org Git - thirdparty/haproxy.git/commit
MEDIUM: mworker: Add systemd `Type=notify` support
authorTim Duesterhus <tim@bastelstu.be>
Mon, 20 Nov 2017 14:58:35 +0000 (15:58 +0100)
committerWilly Tarreau <w@1wt.eu>
Mon, 20 Nov 2017 17:39:41 +0000 (18:39 +0100)
commitd6942c829746d9a28f1f92b531dd858db89a5c64
tree54291a3e2c551d92f976958c75fde7ff6930eccf
parent62dd698070c80d1ee4e779b1f7622386a45508dc
MEDIUM: mworker: Add systemd `Type=notify` support

This patch adds support for `Type=notify` to the systemd unit.

Supporting `Type=notify` improves both starting as well as reloading
of the unit, because systemd will be let known when the action completed.

See this quote from `systemd.service(5)`:
> Note however that reloading a daemon by sending a signal (as with the
> example line above) is usually not a good choice, because this is an
> asynchronous operation and hence not suitable to order reloads of
> multiple services against each other. It is strongly recommended to
> set ExecReload= to a command that not only triggers a configuration
> reload of the daemon, but also synchronously waits for it to complete.

By making systemd aware of a reload in progress it is able to wait until
the reload actually succeeded.

This patch introduces both a new `USE_SYSTEMD` build option which controls
including the sd-daemon library as well as a `-Ws` runtime option which
runs haproxy in master-worker mode with systemd support.

When haproxy is running in master-worker mode with systemd support it will
send status messages to systemd using `sd_notify(3)` in the following cases:

- The master process forked off the worker processes (READY=1)
- The master process entered the `mworker_reload()` function (RELOADING=1)
- The master process received the SIGUSR1 or SIGTERM signal (STOPPING=1)

Change the unit file to specify `Type=notify` and replace master-worker
mode (`-W`) with master-worker mode with systemd support (`-Ws`).

Future evolutions of this feature could include making use of the `STATUS`
feature of `sd_notify()` to send information about the number of active
connections to systemd. This would require bidirectional communication
between the master and the workers and thus is left for future work.
Makefile
contrib/systemd/haproxy.service.in
include/types/global.h
src/haproxy.c