Author: rjung
Date: Fri Sep 23 00:46:55 2011
New Revision: 1174468

URL: http://svn.apache.org/viewvc?rev=1174468&view=rev
Log:
When using the alternate decay for the "Next"
session lb method, calculate curmin only for
active workers. Otherwise curmin will quickly
stabilize at "0".

Decay non-active workers as well so that they
do not report fantasy values.

Modified:
    tomcat/jk/trunk/native/common/jk_lb_worker.c

Modified: tomcat/jk/trunk/native/common/jk_lb_worker.c
URL: 
http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_lb_worker.c?rev=1174468&r1=1174467&r2=1174468&view=diff
==============================================================================
--- tomcat/jk/trunk/native/common/jk_lb_worker.c (original)
+++ tomcat/jk/trunk/native/common/jk_lb_worker.c Fri Sep 23 00:46:55 2011
@@ -624,7 +624,7 @@ static jk_uint64_t decay_load(lb_worker_
 {
     unsigned int i;
     jk_uint64_t curmax = 0;
-    jk_uint64_t curmin;
+    jk_uint64_t curmin = 0;
     lb_sub_worker_t *w;
     ajp_worker_t *aw;
 
@@ -636,9 +636,6 @@ static jk_uint64_t decay_load(lb_worker_
             if (p->lbmethod != JK_LB_METHOD_NEXT) {
                 w->s->lb_value >>= exponent;
             }
-            if (w->s->lb_value < curmin) {
-                curmin = w->s->lb_value;
-            }
             if (w->s->lb_value > curmax) {
                 curmax = w->s->lb_value;
             }
@@ -649,7 +646,23 @@ static jk_uint64_t decay_load(lb_worker_
     if (p->lbmethod == JK_LB_METHOD_NEXT) {
         for (i = 0; i < p->num_of_workers; i++) {
             w = &p->lb_workers[i];
-            w->s->lb_value -= curmin;
+            /* Take into account only the workers that are
+             * not in error state, stopped, disabled or busy.
+             * Unfortunately we can not respect activations
+             * defined by mapping rules here.
+             */
+            if (JK_WORKER_USABLE(w->s->state, w->activation)) {
+                if (curmin == 0 || w->s->lb_value < curmin) {
+                    curmin = w->s->lb_value;
+                }
+            }
+        }
+        for (i = 0; i < p->num_of_workers; i++) {
+            w = &p->lb_workers[i];
+            if (w->s->lb_value >= curmin)
+                w->s->lb_value -= curmin;
+            else
+                w->s->lb_value = 0;
         }
     }
     JK_TRACE_EXIT(l);
@@ -752,7 +765,7 @@ static int find_best_bydomain(jk_ws_serv
             strlen(wr.domain) != domain_len ||
             strncmp(wr.domain, route_or_domain, domain_len))
             continue;
-        /* Take into calculation only the workers that are
+        /* Take into account only the workers that are
          * not in error state, stopped, disabled or busy.
          */
         activation = s->extension.activation ?
@@ -802,7 +815,7 @@ static int find_best_byvalue(jk_ws_servi
         if (activation == JK_LB_ACTIVATION_UNSET)
             activation = wr.activation;
 
-        /* Take into calculation only the workers that are
+        /* Take into account only the workers that are
          * not in error state, stopped, disabled or busy.
          */
         if (JK_WORKER_USABLE(states[wr.i], activation)) {



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to