]> git.ipfire.org Git - thirdparty/haproxy.git/commit
BUG/MEDIUM: spoe: Kill applets if there are pending connections and nbthread > 1
authorChristopher Faulet <cfaulet@haproxy.com>
Mon, 1 Mar 2021 14:01:14 +0000 (15:01 +0100)
committerChristopher Faulet <cfaulet@haproxy.com>
Mon, 1 Mar 2021 14:10:19 +0000 (15:10 +0100)
commit9e647e5af77faa6a95dd511d78ed8763781e764a
treeef6f88eb2eb1a104390a5ab26f21912cd8ff8339
parentae3056157c17b181c754556836a5d8336fb9823f
BUG/MEDIUM: spoe: Kill applets if there are pending connections and nbthread > 1

When the processing stage is finished for a SPOE applet, before returning it
into the idle list, we check if the assigned server appears as full or if
there are some pending connections on the backend or the assigned server. If
yes, it means we reach a maxconn and we close the applet to free a
slot. Otherwise, the applet can be reused. This test is only performed if
there are more than one thread.

It is important to close SPOE applets when there are pending connections for
multithreaded instances because connections with the SPOE agents are
persistent and local to a thread (applets are local to a thread). If a
maxconn is configured, some threads may take all available slots for a
while, leaving remaining threads without any free slot to process SPOE
messages. It is especially true if the maxconn is low.

This patch should fix the issue #705. It must be backported as far as
1.8. However, the code in 1.8 is quite different, a test must be performed
to be sure it works well.
src/flt_spoe.c