mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-04-22 23:15:37 +00:00
BUG/MEDIUM: peers: Don't start resync on reload if local peer is not up-to-date
On a reload, if the previous resync was not finished, the freshly old worker must not try to start a new resync. Otherwise, it will compete with the older wokers, slowing down or blocking the resync. Only an up-to-date woker must try to perform a local resync. This patch must be backported as far as 2.0 (and maybe to 1.8 too).
This commit is contained in:
parent
19a82b9495
commit
b372f16d35
@ -3472,12 +3472,14 @@ struct task *process_peer_sync(struct task * task, void *context, unsigned int s
|
|||||||
peers->resync_timeout = tick_add(now_ms, MS_TO_TICKS(PEER_RESYNC_TIMEOUT));
|
peers->resync_timeout = tick_add(now_ms, MS_TO_TICKS(PEER_RESYNC_TIMEOUT));
|
||||||
|
|
||||||
/* If there's no active peer connection */
|
/* If there's no active peer connection */
|
||||||
if (!tick_is_expired(peers->resync_timeout, now_ms) &&
|
if ((peers->flags & PEERS_RESYNC_STATEMASK) == PEERS_RESYNC_FINISHED &&
|
||||||
|
!tick_is_expired(peers->resync_timeout, now_ms) &&
|
||||||
(ps->statuscode == 0 ||
|
(ps->statuscode == 0 ||
|
||||||
ps->statuscode == PEER_SESS_SC_SUCCESSCODE ||
|
ps->statuscode == PEER_SESS_SC_SUCCESSCODE ||
|
||||||
ps->statuscode == PEER_SESS_SC_CONNECTEDCODE ||
|
ps->statuscode == PEER_SESS_SC_CONNECTEDCODE ||
|
||||||
ps->statuscode == PEER_SESS_SC_TRYAGAIN)) {
|
ps->statuscode == PEER_SESS_SC_TRYAGAIN)) {
|
||||||
/* The resync timeout is not expired and
|
/* The resync is finished for the local peer and
|
||||||
|
* the resync timeout is not expired and
|
||||||
* connection never tried
|
* connection never tried
|
||||||
* or previous peer connection was successfully established
|
* or previous peer connection was successfully established
|
||||||
* or previous tcp connect succeeded but init state incomplete
|
* or previous tcp connect succeeded but init state incomplete
|
||||||
|
Loading…
Reference in New Issue
Block a user