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/14 01:10:18 UTC

svn commit: r611685 - /tomcat/connectors/trunk/jk/native/common/jk_status.c

Author: rjung
Date: Sun Jan 13 16:10:17 2008
New Revision: 611685

URL: http://svn.apache.org/viewvc?rev=611685&view=rev
Log:
Prepare edit and update in status worker
for ajp workers.

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=611685&r1=611684&r2=611685&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_status.c (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_status.c Sun Jan 13 16:10:17 2008
@@ -1990,6 +1990,7 @@
 static void display_worker_ajp(jk_ws_service_t *s,
                                status_endpoint_t *p,
                                ajp_worker_t *aw,
+                               int type,
                                jk_logger_t *l)
 {
     int cmd;
@@ -2017,6 +2018,11 @@
         single = 1;
     }
 
+    jk_shm_lock();
+    if (aw->sequence != aw->s->h.sequence)
+        jk_ajp_pull(aw, l);
+    jk_shm_unlock();
+
     map_count = count_maps(s, name, l);
 
     if (mime == JK_STATUS_MIME_HTML) {
@@ -2081,7 +2087,7 @@
                 jk_log(l, JK_LOG_DEBUG,
                        "Status worker '%s' %s ajp worker '%s'",
                        w->name, "displaying", aw->name);
-            display_worker_ajp(s, p, aw, l);
+            display_worker_ajp(s, p, aw, jw->type, l);
         }
         else {
             jk_log(l, JK_LOG_WARNING,
@@ -2133,11 +2139,6 @@
         return;
     }
 
-    jk_shm_lock();
-    if (lb->sequence != lb->s->h.sequence)
-        jk_lb_pull(lb, l);
-    jk_shm_unlock();
-
     jk_putv(s, "<hr/><h3>Edit load balancer settings for ",
             name, "</h3>\n", NULL);
 
@@ -2439,9 +2440,6 @@
         return;
     }
 
-    if (lb->sequence != lb->s->h.sequence)
-        jk_lb_pull(lb, l);
-
     i = status_get_int(p, JK_STATUS_ARG_LB_RETRIES,
                        lb->retries, l);
     if (i != lb->retries && i > 0) {
@@ -2569,11 +2567,12 @@
 
 static int commit_member(jk_ws_service_t *s,
                          status_endpoint_t *p,
+                         lb_worker_t *lb,
                          lb_sub_worker_t *wr,
-                         const char *lb_name,
                          jk_logger_t *l)
 {
     const char *arg;
+    const char *lb_name = lb->name;
     status_worker_t *w = p->worker;
     int rc = 0;
     int rv;
@@ -2640,8 +2639,6 @@
     if (set_int_if_changed(p, wr->name, "distance", JK_STATUS_ARG_LBM_DISTANCE,
                            0, INT_MAX, &wr->distance, lb_name, l))
         rc |= 4;
-    if (rc)
-        wr->sequence++;
     return rc;
 }
 
@@ -3097,8 +3094,10 @@
 {
     const char *worker;
     const char *sub_worker;
-    jk_worker_t *jw = NULL;
     status_worker_t *w = p->worker;
+    jk_worker_t *jw = NULL;
+    lb_worker_t *lb = NULL;
+    lb_sub_worker_t *wr = NULL;
 
     JK_TRACE_ENTER(l);
     fetch_worker_and_sub_worker(p, "editing", &worker, &sub_worker, l);
@@ -3107,32 +3106,58 @@
         return JK_FALSE;
     }
 
-    if (!sub_worker || !sub_worker[0]) {
-        const char *arg;
-
-        if (status_get_string(p, JK_STATUS_ARG_ATTRIBUTE,
-                              NULL, &arg, l) == JK_TRUE)
-            form_all_members(s, p, jw, arg, l);
-        else
-            form_worker(s, p, jw, l);
-    }
-    else  {
-        lb_sub_worker_t *wr = NULL;
-        if (jw->type != JK_LB_WORKER_TYPE) {
-            jk_log(l, JK_LOG_WARNING,
-                   "Status worker '%s' worker type not implemented",
-                   w->name);
+    if (jw->type == JK_LB_WORKER_TYPE) {
+        if (check_valid_lb(s, p, jw, worker, &lb, 0, l) == JK_FALSE) {
             JK_TRACE_EXIT(l);
             return JK_FALSE;
         }
-        if(search_sub_worker(s, p, jw, worker, &wr, sub_worker, l) == JK_FALSE) {
+
+        jk_shm_lock();
+        if (lb->sequence != lb->s->h.sequence)
+            jk_lb_pull(lb, l);
+        jk_shm_unlock();
+        if (!sub_worker || !sub_worker[0]) {
+            const char *arg;
+            if (status_get_string(p, JK_STATUS_ARG_ATTRIBUTE,
+                                  NULL, &arg, l) == JK_TRUE) {
+                if (JK_IS_DEBUG_LEVEL(l))
+                    jk_log(l, JK_LOG_DEBUG,
+                           "Status worker '%s' %s lb worker '%s' with all sub workers",
+                           w->name, "editing", lb->name);
+                form_all_members(s, p, jw, arg, l);
+            }
+            else {
+                if (JK_IS_DEBUG_LEVEL(l))
+                    jk_log(l, JK_LOG_DEBUG,
+                           "Status worker '%s' %s lb worker '%s'",
+                           w->name, "editing", lb->name);
+                form_worker(s, p, jw, l);
+            }
             JK_TRACE_EXIT(l);
-            return JK_FALSE;
+            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,
+                       "Status worker '%s' %s lb worker '%s' sub worker '%s'",
+                       w->name, "editing", lb->name, wr->name);
+            form_member(s, p, wr, lb->name, l);
+            JK_TRACE_EXIT(l);
+            return JK_TRUE;
         }
-        form_member(s, p, wr, worker, l);
+    }
+    else {
+        if (JK_IS_DEBUG_LEVEL(l))
+            jk_log(l, JK_LOG_DEBUG,
+                   "Status worker '%s' worker type not implemented",
+                   w->name);
     }
     JK_TRACE_EXIT(l);
-    return JK_TRUE;
+    return JK_FALSE;
 }
 
 static int update_worker(jk_ws_service_t *s,
@@ -3141,7 +3166,11 @@
 {
     const char *worker;
     const char *sub_worker;
+    status_worker_t *w = p->worker;
     jk_worker_t *jw = NULL;
+    lb_worker_t *lb = NULL;
+    lb_sub_worker_t *wr = NULL;
+    int rc;
 
     JK_TRACE_ENTER(l);
     fetch_worker_and_sub_worker(p, "updating", &worker, &sub_worker, l);
@@ -3150,40 +3179,66 @@
         return JK_FALSE;
     }
 
-    if (!sub_worker || !sub_worker[0]) {
-        const char *arg;
-
-        if (status_get_string(p, JK_STATUS_ARG_ATTRIBUTE,
-                              NULL, &arg, l) == JK_TRUE)
-            commit_all_members(s, p, jw, arg, l);
-        else
-            commit_worker(s, p, jw, l);
-    }
-    else  {
-        lb_worker_t *lb = NULL;
-        lb_sub_worker_t *wr = NULL;
-        int rc = 0;
+    if (jw->type == JK_LB_WORKER_TYPE) {
         if (check_valid_lb(s, p, jw, worker, &lb, 0, l) == JK_FALSE) {
             JK_TRACE_EXIT(l);
             return JK_FALSE;
         }
-        if(search_sub_worker(s, p, jw, worker, &wr, sub_worker, l) == JK_FALSE) {
+
+        if (lb->sequence != lb->s->h.sequence)
+            jk_lb_pull(lb, l);
+        if (!sub_worker || !sub_worker[0]) {
+            const char *arg;
+            if (status_get_string(p, JK_STATUS_ARG_ATTRIBUTE,
+                                  NULL, &arg, l) == JK_TRUE) {
+                if (JK_IS_DEBUG_LEVEL(l))
+                    jk_log(l, JK_LOG_DEBUG,
+                           "Status worker '%s' %s lb worker '%s' with all sub workers",
+                           w->name, "updating", lb->name);
+                commit_all_members(s, p, jw, arg, l);
+            }
+            else {
+                if (JK_IS_DEBUG_LEVEL(l))
+                    jk_log(l, JK_LOG_DEBUG,
+                           "Status worker '%s' %s lb worker '%s'",
+                           w->name, "updating", lb->name);
+                commit_worker(s, p, jw, l);
+            }
             JK_TRACE_EXIT(l);
-            return JK_FALSE;
+            return JK_TRUE;
         }
-        rc = commit_member(s, p, wr, lb->name, l);
-        if (rc) {
-            lb->sequence++;
-            jk_lb_push(lb, l);
+        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,
+                       "Status worker '%s' %s lb worker '%s' sub worker '%s'",
+                       w->name, "updating", lb->name, wr->name);
+            rc = commit_member(s, p, lb, wr, 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);
+            JK_TRACE_EXIT(l);
+            return JK_TRUE;
         }
-        if (rc & 1)
-            reset_lb_values(lb, l);
-        if (rc & 2)
-            /* Recalculate the load multiplicators wrt. lb_factor */
-            update_mult(lb, l);
+    }
+    else {
+        if (JK_IS_DEBUG_LEVEL(l))
+            jk_log(l, JK_LOG_DEBUG,
+                   "Status worker '%s' worker type not implemented",
+                   w->name);
     }
     JK_TRACE_EXIT(l);
-    return JK_TRUE;
+    return JK_FALSE;
 }
 
 static int reset_worker(jk_ws_service_t *s,



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