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é

Reply via email to