From 590c5ff2ede9388c4e625aa1db9b3393effefac4 Mon Sep 17 00:00:00 2001 From: Christopher Faulet Date: Mon, 29 Sep 2025 15:49:44 +0200 Subject: [PATCH] MEDIUM: peers: No longer ack updates during a full resync ACK messages received by a peer sending updates during a full resync are ignored. So, on the other side, there is no reason to still send these ACK messages. Let's skip them. In addition, the received updates during this stage are not considered as to be acked. It is important to be sure to properly emit ACK messages once the full sync finished. --- src/peers.c | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/peers.c b/src/peers.c index 941821ed2..c894e0173 100644 --- a/src/peers.c +++ b/src/peers.c @@ -1821,18 +1821,20 @@ int peer_treat_updatemsg(struct appctx *appctx, struct peer *p, int updt, int ex expire = MS_TO_TICKS(table->expire); - if (updt) { - if (msg_len < sizeof(update)) { - TRACE_ERROR("malformed update message: message too small", PEERS_EV_SESS_IO|PEERS_EV_RX_MSG|PEERS_EV_PROTO_ERR, appctx, p, st); - goto malformed_exit; - } + if (p->learnstate != PEER_LR_ST_PROCESSING) { + if (updt) { + if (msg_len < sizeof(update)) { + TRACE_ERROR("malformed update message: message too small", PEERS_EV_SESS_IO|PEERS_EV_RX_MSG|PEERS_EV_PROTO_ERR, appctx, p, st); + goto malformed_exit; + } - memcpy(&update, *msg_cur, sizeof(update)); - *msg_cur += sizeof(update); - st->last_get = htonl(update); - } - else { - st->last_get++; + memcpy(&update, *msg_cur, sizeof(update)); + *msg_cur += sizeof(update); + st->last_get = htonl(update); + } + else { + st->last_get++; + } } if (exp) { -- 2.47.3