You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by rj...@apache.org on 2008/01/18 22:26:11 UTC

svn commit: r613279 - /tomcat/connectors/trunk/jk/native/common/jk_lb_worker.c

Author: rjung
Date: Fri Jan 18 13:26:10 2008
New Revision: 613279

URL: http://svn.apache.org/viewvc?rev=613279&view=rev
Log:
Use activation state coming from uri worker map
(if set) to overwrite activation state set in
workers.properties.

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

Modified: tomcat/connectors/trunk/jk/native/common/jk_lb_worker.c
URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_lb_worker.c?rev=613279&r1=613278&r2=613279&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_lb_worker.c (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_lb_worker.c Fri Jan 18 13:26:10 2008
@@ -50,8 +50,8 @@
  * Note: activation == JK_LB_ACTIVATION_ACTIVE is equivalent to
  *       activation is none of JK_LB_ACTIVATION_STOPPED, JK_LB_ACTIVATION_DISABLED
  */
-#define JK_WORKER_USABLE(w)   ((w)->s->state <= JK_LB_STATE_FORCE && (w)->activation == JK_LB_ACTIVATION_ACTIVE)
-#define JK_WORKER_USABLE_STICKY(w)   ((w)->s->state <= JK_LB_STATE_BUSY && (w)->activation != JK_LB_ACTIVATION_STOPPED)
+#define JK_WORKER_USABLE(s, activation)   ((s)->state <= JK_LB_STATE_FORCE && activation == JK_LB_ACTIVATION_ACTIVE)
+#define JK_WORKER_USABLE_STICKY(s, activation)   ((s)->state <= JK_LB_STATE_BUSY && activation != JK_LB_ACTIVATION_STOPPED)
 
 static const char *lb_locking_type[] = {
     JK_LB_LOCK_TEXT_OPTIMISTIC,
@@ -675,6 +675,7 @@
     jk_uint64_t curmin = 0;
 
     int candidate = -1;
+    int activation;
     lb_sub_worker_t wr;
 
     /* First try to see if we have available candidate */
@@ -687,7 +688,12 @@
         /* Take into calculation only the workers that are
          * not in error state, stopped, disabled or busy.
          */
-        if (JK_WORKER_USABLE(&wr)) {
+        activation = s->extension.activation ?
+                     s->extension.activation[i] :
+                     JK_LB_ACTIVATION_UNSET;
+        if (activation == JK_LB_ACTIVATION_UNSET)
+            activation = wr.activation;
+        if (JK_WORKER_USABLE(wr.s, activation)) {
             if (candidate < 0 || wr.distance < d ||
                 (wr.s->lb_value < curmin &&
                 wr.distance == d)) {
@@ -714,6 +720,7 @@
 
     /* find the least busy worker */
     int candidate = -1;
+    int activation;
     lb_sub_worker_t wr;
 
     offset = p->next_offset;
@@ -722,11 +729,16 @@
     for (j = offset; j < p->num_of_workers + offset; j++) {
         i = j % p->num_of_workers;
         wr = p->lb_workers[i];
+        activation = s->extension.activation ?
+                     s->extension.activation[i] :
+                     JK_LB_ACTIVATION_UNSET;
+        if (activation == JK_LB_ACTIVATION_UNSET)
+            activation = wr.activation;
 
         /* Take into calculation only the workers that are
          * not in error state, stopped, disabled or busy.
          */
-        if (JK_WORKER_USABLE(&wr)) {
+        if (JK_WORKER_USABLE(wr.s, activation)) {
             if (candidate < 0 || wr.distance < d ||
                 (wr.s->lb_value < curmin &&
                 wr.distance == d)) {
@@ -757,7 +769,12 @@
         lb_sub_worker_t wr = p->lb_workers[candidate];
         if (uses_domain)
             s->route = wr.domain;
-        if (!JK_WORKER_USABLE_STICKY(&wr)) {
+        int activation = s->extension.activation ?
+                         s->extension.activation[candidate] :
+                         JK_LB_ACTIVATION_UNSET;
+        if (activation == JK_LB_ACTIVATION_UNSET)
+            activation = wr.activation;
+        if (!JK_WORKER_USABLE_STICKY(wr.s, activation)) {
             /* We have a worker that is error state or stopped.
              * If it has a redirection set use that redirection worker.
              * This enables to safely remove the member from the
@@ -776,7 +793,12 @@
             }
             if (candidate >= 0) {
                 wr = p->lb_workers[candidate];
-                if (!JK_WORKER_USABLE_STICKY(&wr))
+                activation = s->extension.activation ?
+                             s->extension.activation[candidate] :
+                             JK_LB_ACTIVATION_UNSET;
+                if (activation == JK_LB_ACTIVATION_UNSET)
+                    activation = wr.activation;
+                if (!JK_WORKER_USABLE_STICKY(wr.s, activation))
                     candidate = -1;
             }
         }
@@ -829,8 +851,13 @@
         /* No need to find the best worker
          * if there is a single one
          */
-        if (JK_WORKER_USABLE_STICKY(&p->lb_workers[0])) {
-            if (p->lb_workers[0].activation != JK_LB_ACTIVATION_DISABLED) {
+        int activation = s->extension.activation ?
+                         s->extension.activation[0] :
+                         JK_LB_ACTIVATION_UNSET;
+        if (activation == JK_LB_ACTIVATION_UNSET)
+            activation = p->lb_workers[0].activation;
+        if (JK_WORKER_USABLE_STICKY(p->lb_workers[0].s, activation)) {
+            if (activation != JK_LB_ACTIVATION_DISABLED) {
                 JK_TRACE_EXIT(l);
                 return p->lb_workers;
             }



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