]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MEDIUM: stats: Only report drain state in stats if server has SRV_ADMF_DRAIN set
authorSimon Horman <horms@verge.net.au>
Thu, 23 Apr 2015 05:51:28 +0000 (14:51 +0900)
committerWilly Tarreau <w@1wt.eu>
Thu, 23 Apr 2015 07:57:53 +0000 (09:57 +0200)
There are some similarities between a weight of zero and the
administratively set drain state: both allow existing connections
to continue while not accepting any new ones.

However, when reporting a server state generally a distinction is made
between state=UP,weight=0 and state=DRAIN,weight=*. This patch makes
stats reporting consistent in this regard.

This patch does not alter the behaviour that if a server's weight
is zero then its stats row is blue when accessed via HTML. This remains
the case regardless of if the state is UP or DRAIN.

Signed-off-by: Simon Horman <horms@verge.net.au>
src/dumpstats.c

index b505d4e2e17295288e0b7cd4a1bebc76b491d269..5704fe4fdcf49598231c759813029436dac9c8c1 100644 (file)
@@ -3906,13 +3906,14 @@ static int stats_dump_proxy_to_buffer(struct stream_interface *si, struct proxy
                                        sv_colour = SRV_STATS_COLOUR_UP;
                                }
 
-                               if (server_is_draining(sv)) {
-                                       if (sv_state == SRV_STATS_STATE_UP_GOING_DOWN) {
+                               if (sv_state == SRV_STATS_STATE_UP && !svs->uweight)
+                                       sv_colour = SRV_STATS_COLOUR_DRAINING;
+
+                               if (sv->admin & SRV_ADMF_DRAIN) {
+                                       if (sv_state == SRV_STATS_STATE_UP_GOING_DOWN)
                                                sv_state = SRV_STATS_STATE_DRAIN_GOING_DOWN;
-                                       } else {
+                                       else
                                                sv_state = SRV_STATS_STATE_DRAIN;
-                                               sv_colour = SRV_STATS_COLOUR_DRAINING;
-                                       }
                                }
 
                                if (sv_state == SRV_STATS_STATE_UP && !(svs->check.state & CHK_ST_ENABLED)) {