From: Christopher Faulet Date: Mon, 29 Sep 2025 13:49:44 +0000 (+0200) Subject: MEDIUM: peers: No longer ack updates during a full resync X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;p=thirdparty%2Fhaproxy.git 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. --- 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) {