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("

\n", NULL); ap_rputs("\n", wsel->s->lbfactor); + ap_rprintf(r, "value='%f.2'>\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);