[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.
This commit is contained in:
Willy Tarreau 2007-03-25 21:16:40 +02:00
parent 91b6f329eb
commit 417fae0e60
4 changed files with 13 additions and 12 deletions

View 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 */

View 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;

View 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 */

View 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" : "-");