Skip to content

Commit

Permalink
BUG/MINOR: server-state: Fix expiration date of srvrq_check tasks
Browse files Browse the repository at this point in the history
"hold.timeout" was used as expiration date for srvrq_check tasks. But it is
not accurrate. The expiration date must be based on the resolution timeouts
instead (resolve and retry).

The purpose of srvrq_check task is to clean up the server resolution status
when outdated info are inherited from the state file. Using "hold.timeout"
is not accurrate here because hold timeouts concern the resolution response
items not the resolution status of servers. It may be set to a huge value or
0. The expiration date of these tasks must be based on the resolution
timeouts instead.

So now the ("timeout resolve" + resolve_retries * "timeout retry") value is
used.

This patch should fix the issue haproxy#2816. It must be backported to all stable
versions.

(cherry picked from commit 647a290)
Signed-off-by: Willy Tarreau <[email protected]>
(cherry picked from commit 3746a7d0639ced74bb9f7cff79181be9a0f18e56)
Signed-off-by: Christopher Faulet <[email protected]>
  • Loading branch information
capflam committed Dec 11, 2024
1 parent 6928d0a commit cd69a61
Showing 1 changed file with 3 additions and 1 deletion.
4 changes: 3 additions & 1 deletion src/server_state.c
Original file line number Diff line number Diff line change
Expand Up @@ -426,7 +426,9 @@ static void srv_state_srv_update(struct server *srv, int version, char **params)

/* insert in tree and set the srvrq expiration date */
ebis_insert(&srv->srvrq->named_servers, &srv->host_dn);
task_schedule(srv->srvrq_check, tick_add(now_ms, srv->srvrq->resolvers->hold.timeout));
task_schedule(srv->srvrq_check, tick_add(now_ms, srv->srvrq->resolvers->timeout.resolve +
srv->srvrq->resolvers->resolve_retries *
srv->srvrq->resolvers->timeout.retry));

/* Unset SRV_F_MAPPORTS for SRV records.
* SRV_F_MAPPORTS is unfortunately set by parse_server()
Expand Down

0 comments on commit cd69a61

Please sign in to comment.