BUG/MINOR: sink: retry attempt for sft server may never occur
authorAurelien DARRAGON <adarragon@haproxy.com>
Thu, 2 Oct 2025 19:40:57 +0000 (21:40 +0200)
committerAurelien DARRAGON <adarragon@haproxy.com>
Tue, 14 Oct 2025 09:10:01 +0000 (11:10 +0200)
commitb2cd824a3d48fa279cd49d0ffd609a9f7a8f6e05
treee9e6de2f0407f67dbe1976e0cf94aa97c45aebf5
parent0549eb167a80ea6a95c829f0239361bc6245fc2f
BUG/MINOR: sink: retry attempt for sft server may never occur

Since 9561b9fb6 ("BUG/MINOR: sink: add tempo between 2 connection
attempts for sft servers"), there is a possibility that the tempo we use
to schedule the task expiry may point to TICK_ETERNITY as we add ticks to
tempo with a simple addition that doesn't take care of potential wrapping.

When this happens (although relatively rare, since now_ms only wraps every
49.7 days, but a forced wrap occurs 20 seconds after haproxy is started
so it is more likely to happen there), the process_sink_forward() task
expiry being set to TICK_ETERNITY, it may never be called again, this
is especially true if the ring section only contains a single server.

To fix the issue, we must use tick_add() helper function to set the tempo
value and this way we ensure that the value will never be TICK_ETERNITY.

It must be backported everywhere 9561b9fb6 was backported (up to 2.6
it seems).

(cherry picked from commit c26ac3f5e44b78b7fc4caaaa6f8a8ea807178438)
Signed-off-by: Aurelien DARRAGON <adarragon@haproxy.com>
(cherry picked from commit 27e59792c158aef7219194f43bc9e2d9d060b758)
Signed-off-by: Aurelien DARRAGON <adarragon@haproxy.com>
(cherry picked from commit 0a1603052030876249140f2a92038f79611faa58)
Signed-off-by: Aurelien DARRAGON <adarragon@haproxy.com>
src/sink.c