From 417fae0e604c9ce095d7eb391800eb2d98432a1c Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Sun, 25 Mar 2007 21:16:40 +0200 Subject: [PATCH] [MINOR] changed server weight storage from char to unsigned int 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 | 4 ++-- src/backend.c | 6 +++--- src/cfgparse.c | 13 +++++++------ src/proto_http.c | 2 +- 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/include/types/server.h b/include/types/server.h index d4856de76b..b887d25c7b 100644 --- a/include/types/server.h +++ b/include/types/server.h @@ -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 */ diff --git a/src/backend.c b/src/backend.c index 0918a0b676..309bee11ac 100644 --- a/src/backend.c +++ b/src/backend.c @@ -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; diff --git a/src/cfgparse.c b/src/cfgparse.c index cfb2e7e00a..3102a9444a 100644 --- a/src/cfgparse.c +++ b/src/cfgparse.c @@ -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 */ diff --git a/src/proto_http.c b/src/proto_http.c index b01859080a..164e31c2b8 100644 --- a/src/proto_http.c +++ b/src/proto_http.c @@ -3512,7 +3512,7 @@ int produce_content_stats_proxy(struct session *s, struct proxy *px) /* act, bck */ "%s%s" "", - sv->uweight+1, + sv->uweight, (sv->state & SRV_BACKUP) ? "-" : "Y", (sv->state & SRV_BACKUP) ? "Y" : "-"); -- 2.47.3