]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: server: incorrect report for tracking servers leaving drain
authorAurelien DARRAGON <adarragon@haproxy.com>
Mon, 27 Mar 2023 08:17:31 +0000 (10:17 +0200)
committerChristopher Faulet <cfaulet@haproxy.com>
Fri, 21 Apr 2023 12:36:45 +0000 (14:36 +0200)
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.

src/server.c

index bdb34c3def3a51d3aebf116e99f3dc1cbe63870a..b78f8a68889bff9231c9115260eebd7acc7abf1d 100644 (file)
@@ -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 " : "",