Author: mturk
Date: Wed Jun 11 22:57:00 2008
New Revision: 666963

URL: http://svn.apache.org/viewvc?rev=666963&view=rev
Log:
Allow wildchar names for updating lb subworkers.

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

Modified: tomcat/connectors/trunk/jk/native/common/jk_status.c
URL: 
http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_status.c?rev=666963&r1=666962&r2=666963&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_status.c (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_status.c Wed Jun 11 22:57:00 
2008
@@ -1303,12 +1303,13 @@
                              const char *worker,
                              lb_sub_worker_t **wrp,
                              const char *sub_worker,
+                             unsigned int *idx,
                              jk_logger_t *l)
 {
     lb_worker_t *lb = NULL;
     lb_sub_worker_t *wr = NULL;
     status_worker_t *w = p->worker;
-    unsigned int i;
+    unsigned int i = 0;
 
     JK_TRACE_ENTER(l);
     if (JK_IS_DEBUG_LEVEL(l))
@@ -1328,13 +1329,21 @@
         JK_TRACE_EXIT(l);
         return JK_FALSE;
     }
-    for (i = 0; i < (int)lb->num_of_workers; i++) {
+    if (*idx)
+        i = *idx;
+    for (; i < lb->num_of_workers; i++) {
         wr = &(lb->lb_workers[i]);
-        if (strcmp(sub_worker, wr->name) == 0)
+        if (idx) {
+            if (jk_wildchar_match(wr->name, sub_worker, 0) == 0) {
+                *idx = i + 1;
+                break;    
+            }
+        }
+        else if (strcmp(sub_worker, wr->name) == 0)
             break;
     }
     *wrp = wr;
-    if (!wr || i == (int)lb->num_of_workers) {
+    if (!wr || i == lb->num_of_workers) {
         jk_log(l, JK_LOG_WARNING,
                "Status worker '%s' could not find sub worker '%s' of worker 
'%s'",
                w->name, sub_worker, worker ? worker : "(null)");
@@ -3335,7 +3344,8 @@
     }
 
     if (sub_worker && sub_worker[0]) {
-        if(search_sub_worker(s, p, jw, worker, &wr, sub_worker, l) == 
JK_FALSE) {
+        if(search_sub_worker(s, p, jw, worker, &wr, sub_worker,
+                             NULL, l) == JK_FALSE) {
             JK_TRACE_EXIT(l);
             return JK_FALSE;
         }
@@ -3595,7 +3605,8 @@
             return JK_TRUE;
         }
         else  {
-            if(search_sub_worker(s, p, jw, worker, &wr, sub_worker, l) == 
JK_FALSE) {
+            if(search_sub_worker(s, p, jw, worker, &wr, sub_worker,
+                                 NULL, l) == JK_FALSE) {
                 JK_TRACE_EXIT(l);
                 return JK_FALSE;
             }
@@ -3690,26 +3701,44 @@
             return JK_TRUE;
         }
         else  {
-            if(search_sub_worker(s, p, jw, worker, &wr, sub_worker, l) == 
JK_FALSE) {
-                JK_TRACE_EXIT(l);
-                return JK_FALSE;
-            }
-            if (JK_IS_DEBUG_LEVEL(l))
-                jk_log(l, JK_LOG_DEBUG,
+            unsigned int idx = 0;
+            unsigned int *wi = NULL;
+
+            if (strchr(sub_worker, '*') || strchr(sub_worker, '?')) {
+                /* We have a wildchar matching rule */
+                wi = &idx;
+            }
+            for (;;) {
+                if (search_sub_worker(s, p, jw, worker, &wr, sub_worker,
+                                      wi, l) == JK_FALSE) {
+                    if (!idx) {
+                        JK_TRACE_EXIT(l);
+                        return JK_FALSE;
+                    }
+                    else {
+                        /* We have found at least one match previously */
+                        break;
+                    }
+                }
+                if (JK_IS_DEBUG_LEVEL(l))
+                    jk_log(l, JK_LOG_DEBUG,
                        "Status worker '%s' %s lb worker '%s' sub worker '%s'",
                        w->name, "updating", lb->name, wr->name);
-            aw = (ajp_worker_t *)wr->worker->worker_private;
-            rc = commit_member(s, p, lb, wr, aw, l);
-            if (rc) {
-                wr->sequence++;
-                lb->sequence++;
-                jk_lb_push(lb, l);
+                aw = (ajp_worker_t *)wr->worker->worker_private;
+                rc = commit_member(s, p, lb, wr, aw, l);
+                if (rc) {
+                    wr->sequence++;
+                    lb->sequence++;
+                    jk_lb_push(lb, l);
+                }
+                if (rc & 1)
+                    reset_lb_values(lb, l);
+                if (rc & 2)
+                    /* Recalculate the load multiplicators wrt. lb_factor */
+                    update_mult(lb, l);
+                if (!wi)
+                    break;
             }
-            if (rc & 1)
-                reset_lb_values(lb, l);
-            if (rc & 2)
-                /* Recalculate the load multiplicators wrt. lb_factor */
-                update_mult(lb, l);
             JK_TRACE_EXIT(l);
             return JK_TRUE;
         }
@@ -3798,7 +3827,8 @@
             return JK_TRUE;
         }
         else  {
-            if(search_sub_worker(s, p, jw, worker, &wr, sub_worker, l) == 
JK_FALSE) {
+            if(search_sub_worker(s, p, jw, worker, &wr, sub_worker,
+                                 NULL, l) == JK_FALSE) {
                 JK_TRACE_EXIT(l);
                 return JK_FALSE;
             }
@@ -3874,7 +3904,8 @@
         return JK_FALSE;
     }
 
-    if(search_sub_worker(s, p, jw, worker, &wr, sub_worker, l) == JK_FALSE) {
+    if(search_sub_worker(s, p, jw, worker, &wr, sub_worker,
+                         NULL, l) == JK_FALSE) {
         JK_TRACE_EXIT(l);
         return JK_FALSE;
     }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to