]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: spoe: Be sure to be able to quickly close IDLE applets on soft-stop
authorChristopher Faulet <cfaulet@haproxy.com>
Thu, 14 Mar 2024 09:49:01 +0000 (10:49 +0100)
committerChristopher Faulet <cfaulet@haproxy.com>
Fri, 15 Mar 2024 08:09:22 +0000 (09:09 +0100)
On soft-stop, we try, as far as possible, to process all pending messages
before closing SPOE applets. However, in sync mode, when an applets waiting
for a response receives the ACK frame, it is switched to IDLE state without
checking if it may be closed. In this case, we will wait the idle timeout
before closing de applet, delaying the soft-stop.

To reduce this delay, on soft-stop, IDLE applets are woken up. On the next
wakeup, the applet will try to process pending messages or will be
closed.

This patch should be backported to all stable versions.

src/flt_spoe.c

index cd65c0e49e6cd8bceec843e28a57d22ef4951b0b..73d47247bfac0fd1670d5117ebeabad3b2124c06 100644 (file)
@@ -2001,7 +2001,9 @@ spoe_handle_appctx(struct appctx *appctx)
                        return;
        }
   out:
-       if (SPOE_APPCTX(appctx)->task->expire != TICK_ETERNITY)
+       if (stopping && appctx->st0 == SPOE_APPCTX_ST_IDLE)
+               task_wakeup(SPOE_APPCTX(appctx)->task, TASK_WOKEN_MSG);
+       else if (SPOE_APPCTX(appctx)->task->expire != TICK_ETERNITY)
                task_queue(SPOE_APPCTX(appctx)->task);
 }