From: Jim Jagielski
Date: Wed, 16 Aug 2017 12:57:41 +0000 (+0000)
Subject: loadfactor now decimal
X-Git-Tag: 2.5.0-alpha~217
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d248d8b2ffa5bc470438b3fa6c6d17a36e263027;p=apache
loadfactor now decimal
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1805188 13f79535-47bb-0310-9956-ffa450edef68
---
diff --git a/CHANGES b/CHANGES
index e0ff6c4541..e15ebbe473 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,9 @@
-*- coding: utf-8 -*-
Changes with Apache 2.5.0
+ *) mod_proxy: loadfactor parameter can now be a decimal number (eg: 1.25).
+ [Jim Jagielski]
+
*) mod_ssl: add SSLPolicy (define/use) and SSLProxyPolicy directives plus documentation. Add
core definitions for policies 'modern', 'intermediate' and 'old', as defined by Mozilla
in . [Stefan Eissing]
diff --git a/docs/manual/mod/mod_proxy.xml b/docs/manual/mod/mod_proxy.xml
index cd2cbe6baa..0da0b9c89b 100644
--- a/docs/manual/mod/mod_proxy.xml
+++ b/docs/manual/mod/mod_proxy.xml
@@ -797,8 +797,8 @@ expressions
directive and can take any of the key value pair parameters available to
ProxyPass directives.
One additional parameter is available only to BalancerMember directives:
- loadfactor. This is the member load factor - a number between 1
- (default) and 100, which defines the weighted load to be applied to the
+ loadfactor. This is the member load factor - a floating pount number between 1.0
+ (default) and 100.0, which defines the weighted load to be applied to the
member in question.
The balancerurl is only needed when not within a
<Proxy balancer://...>
@@ -1355,7 +1355,7 @@ ProxyPass "/" "balancer://mycluster/" stickysession=JSESSIONID|jsess
ProxyPass "/" "balancer://hotcluster/"
<Proxy balancer://hotcluster>
BalancerMember ajp://1.2.3.4:8009 loadfactor=1
- BalancerMember ajp://1.2.3.5:8009 loadfactor=2
+ BalancerMember ajp://1.2.3.5:8009 loadfactor=2.5
# The server below is on hot standby
BalancerMember ajp://1.2.3.6:8009 status=+H
ProxySet lbmethod=bytraffic
diff --git a/modules/md/Makefile b/modules/md/Makefile
index 349767a23d..fff18da6f0 100644
--- a/modules/md/Makefile
+++ b/modules/md/Makefile
@@ -1,8 +1,8 @@
-top_srcdir = /Users/sei/projects/httpd/trunk
-top_builddir = /Users/sei/projects/httpd/trunk
-srcdir = /Users/sei/projects/httpd/trunk/modules/md
-builddir = /Users/sei/projects/httpd/trunk/modules/md
-VPATH = /Users/sei/projects/httpd/trunk/modules/md
+top_srcdir = /Users/jim/src/asf/code/dev/httpd-git-trunk
+top_builddir = /Users/jim/src/asf/code/dev/httpd-git-trunk
+srcdir = /Users/jim/src/asf/code/dev/httpd-git-trunk/modules/md
+builddir = /Users/jim/src/asf/code/dev/httpd-git-trunk/modules/md
+VPATH = /Users/jim/src/asf/code/dev/httpd-git-trunk/modules/md
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
diff --git a/modules/proxy/mod_proxy.c b/modules/proxy/mod_proxy.c
index 7ba7f91a47..2696a70e4f 100644
--- a/modules/proxy/mod_proxy.c
+++ b/modules/proxy/mod_proxy.c
@@ -106,7 +106,8 @@ static const char *set_worker_param(apr_pool_t *p,
/* Normalized load factor. Used with BalancerMember,
* it is a number between 1 and 100.
*/
- ival = atoi(val);
+ double fval = atof(val);
+ ival = fval * 100.0;
if (ival < 1 || ival > 100)
return "LoadFactor must be a number between 1..100";
worker->s->lbfactor = ival;
@@ -2882,7 +2883,7 @@ static int proxy_status_hook(request_rec *r, int flags)
ap_rvputs(r, ap_proxy_parse_wstatus(r->pool, *worker), NULL);
ap_rvputs(r, "
", (*worker)->s->route, NULL);
ap_rvputs(r, " | ", (*worker)->s->redirect, NULL);
- ap_rprintf(r, " | %d | ", (*worker)->s->lbfactor);
+ ap_rprintf(r, "%f.2 | ", (float)((*worker)->s->lbfactor)/100.0);
ap_rprintf(r, "%d | ", (*worker)->s->lbset);
ap_rprintf(r, "%" APR_SIZE_T_FMT " | ",
(*worker)->s->elected);
diff --git a/modules/proxy/mod_proxy_balancer.c b/modules/proxy/mod_proxy_balancer.c
index 69086e9456..1a6bb72baa 100644
--- a/modules/proxy/mod_proxy_balancer.c
+++ b/modules/proxy/mod_proxy_balancer.c
@@ -700,10 +700,10 @@ static void recalc_factors(proxy_balancer *balancer)
/* Recalculate lbfactors */
workers = (proxy_worker **)balancer->workers->elts;
/* Special case if there is only one worker its
- * load factor will always be 1
+ * load factor will always be 100
*/
if (balancer->workers->nelts == 1) {
- (*workers)->s->lbstatus = (*workers)->s->lbfactor = 1;
+ (*workers)->s->lbstatus = (*workers)->s->lbfactor = 100;
return;
}
for (i = 0; i < balancer->workers->nelts; i++) {
@@ -1093,7 +1093,9 @@ static int balancer_handler(request_rec *r)
ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(01192) "settings worker params");
if ((val = apr_table_get(params, "w_lf"))) {
- int ival = atoi(val);
+ int ival;
+ double fval = atof(val);
+ ival = fval * 100.0;
if (ival >= 1 && ival <= 100) {
wsel->s->lbfactor = ival;
if (bsel)
@@ -1362,8 +1364,8 @@ static int balancer_handler(request_rec *r)
"\n", NULL);
ap_rvputs(r, " ", worker->s->hostname,
"\n", NULL);
- ap_rprintf(r, " %d\n",
- worker->s->lbfactor);
+ ap_rprintf(r, " %f.2\n",
+ (float)(worker->s->lbfactor)/100.0);
ap_rprintf(r,
" %d\n",
worker->s->port);
@@ -1416,8 +1418,8 @@ static int balancer_handler(request_rec *r)
" %d\n",
worker->s->lbstatus);
ap_rprintf(r,
- " %d\n",
- worker->s->lbfactor);
+ " %f.2\n",
+ (float)(worker->s->lbfactor)/100.0);
ap_rprintf(r,
" %" APR_OFF_T_FMT "\n",
worker->s->transferred);
@@ -1603,7 +1605,7 @@ static int balancer_handler(request_rec *r)
NULL);
ap_rvputs(r, " | ",
ap_escape_html(r->pool, worker->s->redirect), NULL);
- ap_rprintf(r, " | %d | ", worker->s->lbfactor);
+ ap_rprintf(r, "%f.2 | ", (float)(worker->s->lbfactor)/100.0);
ap_rprintf(r, "%d | ", worker->s->lbset);
ap_rvputs(r, ap_proxy_parse_wstatus(r->pool, worker), NULL);
ap_rputs(" | ", r);
@@ -1638,7 +1640,7 @@ static int balancer_handler(request_rec *r)
ap_rputs("