From 2558c41a85699d4254a48ff66b07ae2beb0b2c8c Mon Sep 17 00:00:00 2001 From: Jim Jagielski Date: Tue, 19 Sep 2017 10:17:40 +0000 Subject: [PATCH] Merge r1805188, r1805190, r1805206, r1808723 from trunk: loadfactor now decimal Umm. This is C :) Fix remaining lint from ms capability for hchecks. format typo Reviewed by: jim, humbedooh, ylavic git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1808855 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES | 3 +++ STATUS | 9 --------- docs/manual/mod/mod_proxy.xml | 6 +++--- modules/proxy/mod_proxy.c | 5 +++-- modules/proxy/mod_proxy_balancer.c | 22 ++++++++++++---------- modules/proxy/proxy_util.c | 2 +- 6 files changed, 22 insertions(+), 25 deletions(-) diff --git a/CHANGES b/CHANGES index e7a2d65763..c6b3bcaedb 100644 --- a/CHANGES +++ b/CHANGES @@ -10,6 +10,9 @@ Changes with Apache 2.4.28 length in a password file. [Luca Toscano, Hanno Böck ] + *) mod_proxy: loadfactor parameter can now be a decimal number (eg: 1.25). + [Jim Jagielski] + *) mod_proxy_wstunnel: Allow upgrade to any protocol dynamically. PR 61142. diff --git a/STATUS b/STATUS index 5766e70a84..6aa0a9f5a6 100644 --- a/STATUS +++ b/STATUS @@ -115,15 +115,6 @@ RELEASE SHOWSTOPPERS: PATCHES ACCEPTED TO BACKPORT FROM TRUNK: [ start all new proposals below, under PATCHES PROPOSED. ] - *) mod_proxy: Loadfactor can now be a decimal number (eg: 1.25) - trunk patch: http://svn.apache.org/r1805188 - http://svn.apache.org/r1805190 - http://svn.apache.org/r1805206 (partial) - http://svn.apache.org/r1808723 - 2.4.x patch: http://home.apache.org/~jim/patches/httpd-2.4-loadfactor-v2.patch - +1: jim, humbedooh, ylavic - ylavic: conflicts on the docs, addressable while backporting I guess. - *) mod_speling: Don't embed Referer data in link in error page. trunk patch: http://svn.apache.org/r1808780 2.4.x: trunk patch applies diff --git a/docs/manual/mod/mod_proxy.xml b/docs/manual/mod/mod_proxy.xml index 73b2042b1d..4bd5146986 100644 --- a/docs/manual/mod/mod_proxy.xml +++ b/docs/manual/mod/mod_proxy.xml @@ -785,8 +785,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 decimal 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://...> @@ -1332,7 +1332,7 @@ ProxyPass "/" "balancer://mycluster/" stickysession=JSESSIONID|jsessionid nofail 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.25 # The server below is on hot standby BalancerMember "ajp://1.2.3.6:8009" status=+H ProxySet lbmethod=bytraffic diff --git a/modules/proxy/mod_proxy.c b/modules/proxy/mod_proxy.c index 3f916f66df..314fc0d782 100644 --- a/modules/proxy/mod_proxy.c +++ b/modules/proxy/mod_proxy.c @@ -103,7 +103,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; @@ -2685,7 +2686,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, "%.2f", (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 61ff5e4721..9c58590a87 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,8 +1093,10 @@ 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); - if (ival >= 1 && ival <= 100) { + int ival; + double fval = atof(val); + ival = fval * 100.0; + if (ival >= 100 && ival <= 10000) { wsel->s->lbfactor = ival; if (bsel) recalc_factors(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, " %.2f\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); + " %.2f\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, "%.2f", (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("

\n", NULL); ap_rputs("\n", wsel->s->lbfactor); + ap_rprintf(r, "value='%.2f'>\n", (float)(wsel->s->lbfactor)/100.0); ap_rputs("\n", wsel->s->lbset); ap_rputs("
Load factor:
LB Set:
Route:flush_packets = flush_off; wshared->flush_wait = PROXY_FLUSH_WAIT; wshared->is_address_reusable = 1; - wshared->lbfactor = 1; + wshared->lbfactor = 100; wshared->passes = 1; wshared->fails = 1; wshared->interval = apr_time_from_sec(HCHECK_WATHCHDOG_DEFAULT_INTERVAL); -- 2.40.0