From: Aurelien DARRAGON Date: Mon, 27 Mar 2023 08:17:31 +0000 (+0200) Subject: BUG/MINOR: server: incorrect report for tracking servers leaving drain X-Git-Tag: v2.8-dev8~59 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9a1df02ccb0f40bf93ab7d654363e8706851a81e;p=thirdparty%2Fhaproxy.git BUG/MINOR: server: incorrect report for tracking servers leaving drain Report message for tracking servers completely leaving drain is wrong: The check for "leaving drain .. via" never evaluates because the condition !(s->next_admin & SRV_ADMF_FDRAIN) is always true in the current block which is guarded by !(s->next_admin & SRV_ADMF_DRAIN). For tracking servers that leave inherited drain mode, this results in the following message being emitted: "Server x/b is UP (leaving forced drain)" Instead of: "Server x/b is UP (leaving drain) via x/a" To this fix: we check if FDRAIN is currently set, else it means that the drain status is inherited from the tracked server (IDRAIN) This regression was introduced with 64cc49cf ("MAJOR: servers: propagate server status changes asynchronously."), thus it may be backported to every stable versions. --- diff --git a/src/server.c b/src/server.c index bdb34c3def..b78f8a6888 100644 --- a/src/server.c +++ b/src/server.c @@ -5757,7 +5757,7 @@ static void srv_update_status(struct server *s) tmptrash = alloc_trash_chunk(); if (tmptrash) { - if (!(s->next_admin & SRV_ADMF_FDRAIN)) { + if (s->cur_admin & SRV_ADMF_FDRAIN) { chunk_printf(tmptrash, "%sServer %s/%s is %s (leaving forced drain)", s->flags & SRV_F_BACKUP ? "Backup " : "",