]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
[MINOR] changed server weight storage from char to unsigned int
authorWilly Tarreau <w@1wt.eu>
Sun, 25 Mar 2007 19:16:40 +0000 (21:16 +0200)
committerWilly Tarreau <w@1wt.eu>
Sun, 25 Mar 2007 19:16:40 +0000 (21:16 +0200)
This change does not affect memory usage much, but it simplifies the
code a lot by removing many +1/-1 operations on weights.

include/types/server.h
src/backend.c
src/cfgparse.c
src/proto_http.c

index d4856de76b039cce44d178bde6b2d12407e9af38..b887d25c7b44b621d4e3ee27311a02ef177f0262 100644 (file)
@@ -82,8 +82,8 @@ struct server {
        int curfd;                              /* file desc used for current test, or -1 if not in test */
 
        char *id;                               /* just for identification */
-       unsigned char uweight, eweight;         /* user-specified weight-1, and effective weight-1 */
-       unsigned int wscore;                    /* weight score, used during srv map computation */
+       unsigned uweight, eweight;              /* user-specified weight, and effective weight */
+       unsigned wscore;                        /* weight score, used during srv map computation */
 
        unsigned failed_checks, down_trans;     /* failed checks and up-down transitions */
        unsigned failed_conns, failed_resp;     /* failed connect() and responses */
index 0918a0b6760cdab24d37772e59ea216ab58ed56b..309bee11ac3fb03419a9c59c488a2fed5c3b9f07 100644 (file)
@@ -59,10 +59,10 @@ void recount_servers(struct proxy *px)
                if (srv->state & SRV_RUNNING) {
                        if (srv->state & SRV_BACKUP) {
                                px->srv_bck++;
-                               px->tot_wbck += srv->eweight + 1;
+                               px->tot_wbck += srv->eweight;
                        } else {
                                px->srv_act++;
-                               px->tot_wact += srv->eweight + 1;
+                               px->tot_wact += srv->eweight;
                        }
                }
        }
@@ -117,7 +117,7 @@ void recalc_server_map(struct proxy *px)
                                        break;
                                }
 
-                               cur->wscore += cur->eweight + 1;
+                               cur->wscore += cur->eweight;
                                v = (cur->wscore + tot) / tot; /* result between 0 and 3 */
                                if (best == NULL || v > max) {
                                        max = v;
index cfb2e7e00a783e7f50c4ae9f611964903f7fc41f..3102a9444a2048bd34b71dd9a08b9f39acd302db 100644 (file)
@@ -1197,6 +1197,7 @@ int cfg_parse_listen(const char *file, int linenum, char **args)
                newsrv->rise = DEF_RISETIME;
                newsrv->fall = DEF_FALLTIME;
                newsrv->health = newsrv->rise; /* up, but will fall down at first failure */
+               newsrv->uweight = 1;
 
                cur_arg = 3;
                while (*args[cur_arg]) {
@@ -1238,7 +1239,7 @@ int cfg_parse_listen(const char *file, int linenum, char **args)
                                              file, linenum, newsrv->id, w);
                                        return -1;
                                }
-                               newsrv->uweight = w - 1;
+                               newsrv->uweight = w;
                                cur_arg += 2;
                        }
                        else if (!strcmp(args[cur_arg], "minconn")) {
@@ -2346,11 +2347,11 @@ int readcfgfile(const char *file)
                        /* We will factor the weights to reduce the table,
                         * using Euclide's largest common divisor algorithm
                         */
-                       pgcd = newsrv->uweight + 1;
+                       pgcd = newsrv->uweight;
                        for (srv = newsrv->next; srv && pgcd > 1; srv = srv->next) {
                                int t, w;
                
-                               w = srv->uweight + 1;
+                               w = srv->uweight;
                                while (w) {
                                        t = pgcd % w;
                                        pgcd = w;
@@ -2360,11 +2361,11 @@ int readcfgfile(const char *file)
 
                        act = bck = 0;
                        for (srv = newsrv; srv; srv = srv->next) {
-                               srv->eweight = ((srv->uweight + 1) / pgcd) - 1;
+                               srv->eweight = srv->uweight / pgcd;
                                if (srv->state & SRV_BACKUP)
-                                       bck += srv->eweight + 1;
+                                       bck += srv->eweight;
                                else
-                                       act += srv->eweight + 1;
+                                       act += srv->eweight;
                        }
 
                        /* this is the largest map we will ever need for this servers list */
index b01859080aa46be8981ae22a552935427cfb77ef..164e31c2b87e1fe1741eb142a269124b0076a872 100644 (file)
@@ -3512,7 +3512,7 @@ int produce_content_stats_proxy(struct session *s, struct proxy *px)
                                     /* act, bck */
                                     "<td>%s</td><td>%s</td>"
                                     "",
-                                    sv->uweight+1,
+                                    sv->uweight,
                                     (sv->state & SRV_BACKUP) ? "-" : "Y",
                                     (sv->state & SRV_BACKUP) ? "Y" : "-");