mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-23 06:41:32 +02:00
BUG/MINOR: Wrong peer task expiration handling during synchronization processing.
When a peer task has sent a synchronization request to remote peers its next expiration date was updated based on a resynchronization timeout value which itself may have already expired leading the underlying poller to wait for 0ms during a fraction of second (consuming high CPU resources). With this patch we update such peer task expiration dates only if the resynchronization timeout is not already expired. Thanks to Patrick Hemmer who reported an issue with nice traces which helped in finding this one. This patch may be backported to 1.7 and 1.6.
This commit is contained in:
parent
8a361b594e
commit
5d6e5f86c5
@ -1963,8 +1963,9 @@ static struct task *process_peer_sync(struct task * task)
|
||||
|
||||
if ((peers->flags & PEERS_RESYNC_STATEMASK) != PEERS_RESYNC_FINISHED) {
|
||||
/* Resync not finished*/
|
||||
/* reschedule task to resync timeout, to ended resync if needed */
|
||||
task->expire = tick_first(task->expire, peers->resync_timeout);
|
||||
/* reschedule task to resync timeout if not expired, to ended resync if needed */
|
||||
if (!tick_is_expired(peers->resync_timeout, now_ms))
|
||||
task->expire = tick_first(task->expire, peers->resync_timeout);
|
||||
}
|
||||
} /* !stopping */
|
||||
else {
|
||||
|
Loading…
x
Reference in New Issue
Block a user