Hi Bjoern,
Le 06/08/2014 22:16, [email protected] a écrit :
Hi Mark,
trying to test this one, but if i use the "frontend/backend"-syntax
(and not the "listen"-syntax) with "external-check command", HAProxy
segfaults :
# /usr/local/sbin/haproxy -f /etc/haproxy/haproxy.cfg -d
Available polling systems :
epoll : pref=300, test result OK
poll : pref=200, test result OK
select : pref=150, test result FAILED
Total: 3 (2 usable), will use epoll.
Using epoll() as the polling mechanism.
[ALERT] 216/205611 (1316) : Starting [be_test:node01] check: no listener.
Segmentation fault (core dumped)
OK, I could reproduce it. This is happening for several reasons :
1. External checks can only be used in "listen" sections.
This is not clearly documented but it can be guessed by the arguments
passed to the command : the proxy address and port are required (see [1]).
I think this is annoying because it's only usable in some specific use
cases. Maybe we should rework this part of the implementation : I see
that for unix sockets, the port argument is set to "NOT_USED", we could
do the same for checks in a backend section. Willy, Simon, is it OK for
you ?
2. Because external checks are initialized late in the process (only
when the first check is started), leaving some variables uninitialized.
I'm going to send a patch which prepares the external checks early in
the process initialization and quit in a clean way when no listener is
found (meaning that we are in a backend section). But definitely, we
should work on an alternative allowing external checks in backends.
[1]
http://cbonte.github.io/haproxy-dconv/snapshot/configuration-1.6.html#external-check%20command
--
Cyril Bonté