]> granicus.if.org Git - apache/commitdiff
loadfactor now decimal
authorJim Jagielski <jim@apache.org>
Wed, 16 Aug 2017 12:57:41 +0000 (12:57 +0000)
committerJim Jagielski <jim@apache.org>
Wed, 16 Aug 2017 12:57:41 +0000 (12:57 +0000)
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1805188 13f79535-47bb-0310-9956-ffa450edef68

CHANGES
docs/manual/mod/mod_proxy.xml
modules/md/Makefile
modules/proxy/mod_proxy.c
modules/proxy/mod_proxy_balancer.c
modules/proxy/proxy_util.c

diff --git a/CHANGES b/CHANGES
index e0ff6c45419dea7aaa6fdaba8712265bf8f44278..e15ebbe47355383e6e223f20845ab0ec18dfb71e 100644 (file)
--- 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 <https://wiki.mozilla.org/Security/Server_Side_TLS>. [Stefan Eissing]
index cd2cbe6baaedf430c5aa1b9df36620b943a4af58..0da0b9c89bfe11dcfbe74a41ba6db11a07e4476f 100644 (file)
@@ -797,8 +797,8 @@ expressions</description>
             directive and can take any of the key value pair parameters available to
             <directive module="mod_proxy">ProxyPass</directive> directives.</p>
         <p>One additional parameter is available only to <directive>BalancerMember</directive> directives:
-            <var>loadfactor</var>. This is the member load factor - a number between 1
-            (default) and 100, which defines the weighted load to be applied to the
+            <var>loadfactor</var>. 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.</p>
         <p>The <var>balancerurl</var> is only needed when not within a
             <code>&lt;Proxy <var>balancer://</var>...&gt;</code>
@@ -1355,7 +1355,7 @@ ProxyPass "/"             "balancer://mycluster/" stickysession=JSESSIONID|jsess
 ProxyPass "/" "balancer://hotcluster/"
 &lt;Proxy balancer://hotcluster&gt;
     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
index 349767a23db4628623a611c59719e02fdeb365a2..fff18da6f06b11af328a37450d7e6cb1f4e63737 100644 (file)
@@ -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.
index 7ba7f91a47eac3c0ec57c4f79cb0104a50a8d8fc..2696a70e4febab0a29d32857a2794b8786cfd36d 100644 (file)
@@ -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, "</td><td>", (*worker)->s->route, NULL);
                 ap_rvputs(r, "</td><td>", (*worker)->s->redirect, NULL);
-                ap_rprintf(r, "</td><td>%d</td>", (*worker)->s->lbfactor);
+                ap_rprintf(r, "</td><td>%f.2</td>", (float)((*worker)->s->lbfactor)/100.0);
                 ap_rprintf(r, "<td>%d</td>", (*worker)->s->lbset);
                 ap_rprintf(r, "<td>%" APR_SIZE_T_FMT "</td><td>",
                            (*worker)->s->elected);
index 69086e94564d315e0f9b4c13a6c41576320ac11c..1a6bb72baa8afd484bca782e505ddf3cefa4eefd 100644 (file)
@@ -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)
                           "</httpd:scheme>\n", NULL);
                 ap_rvputs(r, "          <httpd:hostname>", worker->s->hostname,
                           "</httpd:hostname>\n", NULL);
-                ap_rprintf(r, "          <httpd:loadfactor>%d</httpd:loadfactor>\n",
-                          worker->s->lbfactor);
+                ap_rprintf(r, "          <httpd:loadfactor>%f.2</httpd:loadfactor>\n",
+                          (float)(worker->s->lbfactor)/100.0);
                 ap_rprintf(r,
                            "          <httpd:port>%d</httpd:port>\n",
                            worker->s->port);
@@ -1416,8 +1418,8 @@ static int balancer_handler(request_rec *r)
                            "          <httpd:lbstatus>%d</httpd:lbstatus>\n",
                            worker->s->lbstatus);
                 ap_rprintf(r,
-                           "          <httpd:loadfactor>%d</httpd:loadfactor>\n",
-                           worker->s->lbfactor);
+                           "          <httpd:loadfactor>%f.2</httpd:loadfactor>\n",
+                           (float)(worker->s->lbfactor)/100.0);
                 ap_rprintf(r,
                            "          <httpd:transferred>%" APR_OFF_T_FMT "</httpd:transferred>\n",
                            worker->s->transferred);
@@ -1603,7 +1605,7 @@ static int balancer_handler(request_rec *r)
                           NULL);
                 ap_rvputs(r, "</td><td>",
                           ap_escape_html(r->pool, worker->s->redirect), NULL);
-                ap_rprintf(r, "</td><td>%d</td>", worker->s->lbfactor);
+                ap_rprintf(r, "</td><td>%f.2</td>", (float)(worker->s->lbfactor)/100.0);
                 ap_rprintf(r, "<td>%d</td><td>", worker->s->lbset);
                 ap_rvputs(r, ap_proxy_parse_wstatus(r->pool, worker), NULL);
                 ap_rputs("</td>", r);
@@ -1638,7 +1640,7 @@ static int balancer_handler(request_rec *r)
             ap_rputs("<form method='POST' enctype='application/x-www-form-urlencoded' action='", r);
             ap_rvputs(r, ap_escape_uri(r->pool, action), "'>\n", NULL);
             ap_rputs("<table><tr><td>Load factor:</td><td><input name='w_lf' id='w_lf' type=text ", r);
-            ap_rprintf(r, "value='%d'></td></tr>\n", wsel->s->lbfactor);
+            ap_rprintf(r, "value='%f.2'></td></tr>\n", (float)(wsel->s->lbfactor)/100.0);
             ap_rputs("<tr><td>LB Set:</td><td><input name='w_ls' id='w_ls' type=text ", r);
             ap_rprintf(r, "value='%d'></td></tr>\n", wsel->s->lbset);
             ap_rputs("<tr><td>Route:</td><td><input name='w_wr' id='w_wr' type=text ", r);
index 1f439c7588d559db5ac45b5869e691745b523f06..74b25c67219dd7f83da90b2f2728eebd8cc9832d 100644 (file)
@@ -1741,7 +1741,7 @@ PROXY_DECLARE(char *) ap_proxy_define_worker(apr_pool_t *p,
     wshared->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);