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 2011/10/23 20:52:24 UTC

svn commit: r1187948 - in /tomcat/jk/trunk/native/common: jk_uri_worker_map.c jk_uri_worker_map.h

Author: rjung
Date: Sun Oct 23 18:52:24 2011
New Revision: 1187948

URL: http://svn.apache.org/viewvc?rev=1187948&view=rev
Log:
Refactor extension rule handling after
config fixing to make it available from
outside of the uri worker map.

Modified:
    tomcat/jk/trunk/native/common/jk_uri_worker_map.c
    tomcat/jk/trunk/native/common/jk_uri_worker_map.h

Modified: tomcat/jk/trunk/native/common/jk_uri_worker_map.c
URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_uri_worker_map.c?rev=1187948&r1=1187947&r2=1187948&view=diff
==============================================================================
--- tomcat/jk/trunk/native/common/jk_uri_worker_map.c (original)
+++ tomcat/jk/trunk/native/common/jk_uri_worker_map.c Sun Oct 23 18:52:24 2011
@@ -361,8 +361,7 @@ static int uri_worker_map_clear(jk_uri_w
     return JK_TRUE;
 }
 
-static void extract_activation(jk_uri_worker_map_t *uw_map,
-                               uri_worker_record_t *uwr,
+static void extract_activation(jk_pool_t *p,
                                lb_worker_t *lb,
                                int *activations,
                                char *workers,
@@ -370,7 +369,6 @@ static void extract_activation(jk_uri_wo
                                jk_logger_t *l)
 {
     unsigned int i;
-    jk_pool_t *p;
     char *worker;
 #ifdef _MT_CODE_PTHREAD
     char *lasts;
@@ -378,10 +376,6 @@ static void extract_activation(jk_uri_wo
 
     JK_TRACE_ENTER(l);
 
-    if (uwr->source_type == SOURCE_TYPE_URIMAP)
-        p = &IND_NEXT(uw_map->p_dyn);
-    else
-        p = &uw_map->p;
     worker = jk_pool_strdup(p, workers);
 
 #ifdef _MT_CODE_PTHREAD
@@ -413,14 +407,14 @@ static void extract_activation(jk_uri_wo
 
 }
 
-static void extract_fail_on_status(jk_uri_worker_map_t *uw_map,
-                                   uri_worker_record_t *uwr,
-                                   jk_logger_t *l)
+static void extension_fix_fail_on_status(jk_pool_t *p,
+                                         const char *name,
+                                         rule_extension_t *extensions,
+                                         jk_logger_t *l)
 {
     unsigned int i;
     int j;
     int cnt = 1;
-    jk_pool_t *p;
     char *status;
 #ifdef _MT_CODE_PTHREAD
     char *lasts;
@@ -428,33 +422,30 @@ static void extract_fail_on_status(jk_ur
 
     JK_TRACE_ENTER(l);
 
-    for (i=0; i<strlen(uwr->extensions.fail_on_status_str); i++) {
-        if (uwr->extensions.fail_on_status_str[i] == ',' ||
-            uwr->extensions.fail_on_status_str[i] == ' ')
+    for (i=0; i<strlen(extensions->fail_on_status_str); i++) {
+        if (extensions->fail_on_status_str[i] == ',' ||
+            extensions->fail_on_status_str[i] == ' ')
             cnt++;
     }
-    uwr->extensions.fail_on_status_size = cnt;
+    extensions->fail_on_status_size = cnt;
 
-    if (uwr->source_type == SOURCE_TYPE_URIMAP)
-        p = &IND_NEXT(uw_map->p_dyn);
-    else
-        p = &uw_map->p;
-    status = jk_pool_strdup(p, uwr->extensions.fail_on_status_str);
-    uwr->extensions.fail_on_status = (int *)jk_pool_alloc(p,
-                                            uwr->extensions.fail_on_status_size * sizeof(int));
-    if (!uwr->extensions.fail_on_status) {
+    status = jk_pool_strdup(p, extensions->fail_on_status_str);
+    extensions->fail_on_status = (int *)jk_pool_alloc(p,
+                                            extensions->fail_on_status_size * sizeof(int));
+    if (!extensions->fail_on_status) {
         jk_log(l, JK_LOG_ERROR,
-               "can't alloc extensions fail_on_status list");
+               "can't alloc extensions fail_on_status list for worker (%s)",
+               name);
         JK_TRACE_EXIT(l);
         return;
     } else if (JK_IS_DEBUG_LEVEL(l))
         jk_log(l, JK_LOG_DEBUG,
-               "Allocated fail_on_status array of size %d for worker %s",
-               uwr->extensions.fail_on_status_size, uwr->worker_name);
+               "Allocated fail_on_status array of size %d for worker (%s)",
+               extensions->fail_on_status_size, name);
 
 
-    for (j=0; j<uwr->extensions.fail_on_status_size; j++) {
-        uwr->extensions.fail_on_status[j] = 0;
+    for (j=0; j<extensions->fail_on_status_size; j++) {
+        extensions->fail_on_status[j] = 0;
     }
 
     cnt = 0;
@@ -464,7 +455,7 @@ static void extract_fail_on_status(jk_ur
 #else
     for (status = strtok(status, ", "); status; status = strtok(NULL, ", ")) {
 #endif
-        uwr->extensions.fail_on_status[cnt] = atoi(status);
+        extensions->fail_on_status[cnt] = atoi(status);
         cnt++;
     }
 
@@ -472,6 +463,79 @@ static void extract_fail_on_status(jk_ur
 
 }
 
+static void extension_fix_activation(jk_pool_t *p, const char *name, jk_worker_t *jw,
+                                      rule_extension_t *extensions, jk_logger_t *l)
+{
+    if (JK_IS_DEBUG_LEVEL(l))
+        jk_log(l, JK_LOG_DEBUG,
+               "Checking extension for worker %s of type %s (%d)",
+               name, wc_get_name_for_type(jw->type,l), jw->type);
+
+    if (jw->type == JK_LB_WORKER_TYPE &&
+        (extensions->active || extensions->disabled || extensions->stopped)) {
+        int j;
+        lb_worker_t *lb = (lb_worker_t *)jw->worker_private;
+        if (!extensions->activation) {
+            extensions->activation_size = lb->num_of_workers;
+            extensions->activation = (int *)jk_pool_alloc(p,
+                                                    extensions->activation_size * sizeof(int));
+            if (!extensions->activation) {
+                jk_log(l, JK_LOG_ERROR,
+                       "can't alloc extensions activation list");
+                return;
+            } else if (JK_IS_DEBUG_LEVEL(l))
+                jk_log(l, JK_LOG_DEBUG,
+                       "Allocated activations array of size %d for lb worker %s",
+                       extensions->activation_size, name);
+            for (j=0; j<extensions->activation_size; j++) {
+                extensions->activation[j] = JK_LB_ACTIVATION_UNSET;
+            }
+        }
+        if (extensions->active)
+            extract_activation(p, lb, extensions->activation,
+                               extensions->active, JK_LB_ACTIVATION_ACTIVE, l);
+        if (extensions->disabled)
+            extract_activation(p, lb, extensions->activation,
+                               extensions->disabled, JK_LB_ACTIVATION_DISABLED, l);
+        if (extensions->stopped)
+            extract_activation(p, lb, extensions->activation,
+                               extensions->stopped, JK_LB_ACTIVATION_STOPPED, l);
+    }
+    else if (extensions->active) {
+        jk_log(l, JK_LOG_WARNING,
+               "Worker %s is not of type lb, activation extension "
+               JK_UWMAP_EXTENSION_ACTIVE " for %s ignored",
+               name, extensions->active);
+    }
+    else if (extensions->disabled) {
+        jk_log(l, JK_LOG_WARNING,
+               "Worker %s is not of type lb, activation extension "
+               JK_UWMAP_EXTENSION_DISABLED " for %s ignored",
+               name, extensions->disabled);
+    }
+    else if (extensions->stopped) {
+        jk_log(l, JK_LOG_WARNING,
+               "Worker %s is not of type lb, activation extension "
+               JK_UWMAP_EXTENSION_STOPPED " for %s ignored",
+               name, extensions->stopped);
+    }
+}
+
+void extension_fix(jk_pool_t *p, const char *name,
+                   rule_extension_t *extensions, jk_logger_t *l)
+{
+    jk_worker_t *jw = wc_get_worker_for_name(name, l);
+    if(!jw) {
+        jk_log(l, JK_LOG_ERROR,
+               "Could not find worker with name '%s' in uri map post processing.",
+               name);
+    }
+    extension_fix_activation(p, name, jw, extensions, l);
+    if (extensions->fail_on_status_str) {
+        extension_fix_fail_on_status(p, name, extensions, l);
+    }
+}
+
 void uri_worker_map_switch(jk_uri_worker_map_t *uw_map, jk_logger_t *l)
 {
     int new_index;
@@ -500,77 +564,14 @@ void uri_worker_map_ext(jk_uri_worker_ma
 
     for (i = 0; i < IND_NEXT(uw_map->size); i++) {
         uri_worker_record_t *uwr = IND_NEXT(uw_map->maps)[i];
-        jk_worker_t *jw;
+        jk_pool_t *p;
         if(uwr->match_type & MATCH_TYPE_NO_MATCH)
             continue;
-        jw = wc_get_worker_for_name(uwr->worker_name, l);
-        if(!jw) {
-            jk_log(l, JK_LOG_ERROR,
-                   "Could not find worker with name '%s' in uri map post processing.",
-                   uwr->worker_name);
-            continue;
-        }
-        if (JK_IS_DEBUG_LEVEL(l))
-            jk_log(l, JK_LOG_DEBUG,
-                   "Checking extension for worker %d: %s of type %s (%d)",
-                   i, uwr->worker_name, wc_get_name_for_type(jw->type,l), jw->type);
-
-        if (jw->type == JK_LB_WORKER_TYPE &&
-            (uwr->extensions.active || uwr->extensions.disabled || uwr->extensions.stopped)) {
-            int j;
-            lb_worker_t *lb = (lb_worker_t *)jw->worker_private;
-            jk_pool_t *p;
-            if (!uwr->extensions.activation) {
-                uwr->extensions.activation_size = lb->num_of_workers;
-                if (uwr->source_type == SOURCE_TYPE_URIMAP)
-                    p = &IND_NEXT(uw_map->p_dyn);
-                else
-                    p = &uw_map->p;
-                uwr->extensions.activation = (int *)jk_pool_alloc(p,
-                                                        uwr->extensions.activation_size * sizeof(int));
-                if (!uwr->extensions.activation) {
-                    jk_log(l, JK_LOG_ERROR,
-                           "can't alloc extensions activation list");
-                    continue;
-                } else if (JK_IS_DEBUG_LEVEL(l))
-                    jk_log(l, JK_LOG_DEBUG,
-                           "Allocated activations array of size %d for lb worker %s",
-                           uwr->extensions.activation_size, uwr->worker_name);
-                for (j=0; j<uwr->extensions.activation_size; j++) {
-                    uwr->extensions.activation[j] = JK_LB_ACTIVATION_UNSET;
-                }
-            }
-            if (uwr->extensions.active)
-                extract_activation(uw_map, uwr, lb, uwr->extensions.activation,
-                                   uwr->extensions.active, JK_LB_ACTIVATION_ACTIVE, l);
-            if (uwr->extensions.disabled)
-                extract_activation(uw_map, uwr, lb, uwr->extensions.activation,
-                                   uwr->extensions.disabled, JK_LB_ACTIVATION_DISABLED, l);
-            if (uwr->extensions.stopped)
-                extract_activation(uw_map, uwr, lb, uwr->extensions.activation,
-                                   uwr->extensions.stopped, JK_LB_ACTIVATION_STOPPED, l);
-        }
-        else if (uwr->extensions.active) {
-            jk_log(l, JK_LOG_WARNING,
-                   "Worker %s is not of type lb, activation extension "
-                   JK_UWMAP_EXTENSION_ACTIVE " for %s ignored",
-                   uwr->worker_name, uwr->extensions.active);
-        }
-        else if (uwr->extensions.disabled) {
-            jk_log(l, JK_LOG_WARNING,
-                   "Worker %s is not of type lb, activation extension "
-                   JK_UWMAP_EXTENSION_DISABLED " for %s ignored",
-                   uwr->worker_name, uwr->extensions.disabled);
-        }
-        else if (uwr->extensions.stopped) {
-            jk_log(l, JK_LOG_WARNING,
-                   "Worker %s is not of type lb, activation extension "
-                   JK_UWMAP_EXTENSION_STOPPED " for %s ignored",
-                   uwr->worker_name, uwr->extensions.stopped);
-        }
-        if (uwr->extensions.fail_on_status_str) {
-            extract_fail_on_status(uw_map, uwr, l);
-        }
+        if (uwr->source_type == SOURCE_TYPE_URIMAP)
+            p = &IND_NEXT(uw_map->p_dyn);
+        else
+            p = &uw_map->p;
+        extension_fix(p, uwr->worker_name, &uwr->extensions, l);
     }
     if (JK_IS_DEBUG_LEVEL(l))
         uri_worker_map_dump(uw_map, "after extension stripping", l);

Modified: tomcat/jk/trunk/native/common/jk_uri_worker_map.h
URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_uri_worker_map.h?rev=1187948&r1=1187947&r2=1187948&view=diff
==============================================================================
--- tomcat/jk/trunk/native/common/jk_uri_worker_map.h (original)
+++ tomcat/jk/trunk/native/common/jk_uri_worker_map.h Sun Oct 23 18:52:24 2011
@@ -168,6 +168,12 @@ struct jk_uri_worker_map
 };
 typedef struct jk_uri_worker_map jk_uri_worker_map_t;
 
+void extension_fix(jk_pool_t *p, const char *name,
+                                      rule_extension_t *extensions, jk_logger_t *l);
+
+void parse_rule_extensions(char *rule, rule_extension_t *extensions,
+                           jk_logger_t *l);
+
 const char *uri_worker_map_get_source(uri_worker_record_t *uwr, jk_logger_t *l);
 
 char *uri_worker_map_get_match(uri_worker_record_t *uwr, char *buf, jk_logger_t *l);
@@ -184,9 +190,6 @@ void uri_worker_map_switch(jk_uri_worker
 
 void uri_worker_map_ext(jk_uri_worker_map_t *uw_map, jk_logger_t *l);
 
-void parse_rule_extensions(char *rule, rule_extension_t *extensions,
-                           jk_logger_t *l);
-
 int uri_worker_map_add(jk_uri_worker_map_t *uw_map,
                        const char *puri, const char *worker,
                        unsigned int source_type, jk_logger_t *l);



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