]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: stats: use the admin flags for soft enable/disable/stop/start on the web page
authorWilly Tarreau <w@1wt.eu>
Thu, 22 May 2014 15:22:34 +0000 (17:22 +0200)
committerWilly Tarreau <w@1wt.eu>
Fri, 23 May 2014 12:29:11 +0000 (14:29 +0200)
Instead of changing the weight to zero or enforcing maintenance mode, we
now make use of the new MAINT/DRAIN flags which are correctly propagated.

src/dumpstats.c

index 3404bfe48ea228b4d369c916652f690e6ea32cb0..cca1d123d8c2653a0b1df067d0c59ddd3919ef1d 100644 (file)
@@ -4241,30 +4241,32 @@ static int stats_process_http_post(struct stream_interface *si)
                                else if ((sv = findserver(px, value)) != NULL) {
                                        switch (action) {
                                        case ST_ADM_ACTION_DISABLE:
-                                               if ((px->state != PR_STSTOPPED) && !(sv->admin & SRV_ADMF_FMAINT)) {
+                                               if (!(sv->admin & SRV_ADMF_FMAINT)) {
                                                        altered_servers++;
                                                        total_servers++;
-                                                       srv_adm_set_maint(sv);
+                                                       srv_set_admin_flag(sv, SRV_ADMF_FMAINT);
                                                }
                                                break;
                                        case ST_ADM_ACTION_ENABLE:
-                                               if ((px->state != PR_STSTOPPED) && (sv->admin & SRV_ADMF_FMAINT)) {
+                                               if (sv->admin & SRV_ADMF_FMAINT) {
                                                        altered_servers++;
                                                        total_servers++;
-                                                       srv_adm_set_ready(sv);
+                                                       srv_clr_admin_flag(sv, SRV_ADMF_FMAINT);
                                                }
                                                break;
                                        case ST_ADM_ACTION_STOP:
+                                               if (!(sv->admin & SRV_ADMF_FDRAIN)) {
+                                                       srv_set_admin_flag(sv, SRV_ADMF_FDRAIN);
+                                                       altered_servers++;
+                                                       total_servers++;
+                                               }
+                                               break;
                                        case ST_ADM_ACTION_START:
-                                               if (action == ST_ADM_ACTION_START)
-                                                       sv->uweight = sv->iweight;
-                                               else
-                                                       sv->uweight = 0;
-
-                                               server_recalc_eweight(sv);
-
-                                               altered_servers++;
-                                               total_servers++;
+                                               if (sv->admin & SRV_ADMF_FDRAIN) {
+                                                       srv_clr_admin_flag(sv, SRV_ADMF_FDRAIN);
+                                                       altered_servers++;
+                                                       total_servers++;
+                                               }
                                                break;
                                        case ST_ADM_ACTION_SHUTDOWN:
                                                if (px->state != PR_STSTOPPED) {