BUG/MEDIUM: peer: Notify the applet won't consume data when it waits for sync
authorChristopher Faulet <cfaulet@haproxy.com>
Thu, 1 Aug 2024 15:09:06 +0000 (17:09 +0200)
committerChristopher Faulet <cfaulet@haproxy.com>
Tue, 3 Sep 2024 16:33:45 +0000 (18:33 +0200)
When the peer applet is waiting for a synchronisation with the global sync
task, we must notify it won't consume data. Otherwise, if some data are
already waiting in the input buffer, the applet will be woken up in loop and
this wil trigger the watchdog. Once synchronized, the applet is woken up. In
that case, the peer applet must indicate it is going to consume data again.

This patch should fix the issue #2656. It must be backported to 3.0.

(cherry picked from commit 78b8b6003082b54a24fa7b13be954f73248cc9d4)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>

src/peers.c

index 96f6de9..145d669 100644 (file)
@@ -3080,8 +3080,11 @@ switchstate:
                                        }
                                }
 
-                               if (curpeer->flags & PEER_F_WAIT_SYNCTASK_ACK)
+                               if (curpeer->flags & PEER_F_WAIT_SYNCTASK_ACK) {
+                                       applet_wont_consume(appctx);
                                        goto out;
+                               }
+                               applet_will_consume(appctx);
 
                                /* local peer is assigned of a lesson, start it */
                                if (curpeer->learnstate == PEER_LR_ST_ASSIGNED && curpeer->local)