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/20 13:49:04 UTC

svn commit: r613546 - in /tomcat/connectors/trunk/jk: native/apache-1.3/ native/apache-2.0/ native/common/ xdocs/miscellaneous/

Author: rjung
Date: Sun Jan 20 04:49:03 2008
New Revision: 613546

URL: http://svn.apache.org/viewvc?rev=613546&view=rev
Log:
Add fail_on_status to uri worker map extension
attributes. No more attributes planned for now,
reply_timeout, activation and fail_on_status seem
to be the ones, where context individual configuration
could be useful.

Modified:
    tomcat/connectors/trunk/jk/native/apache-1.3/mod_jk.c
    tomcat/connectors/trunk/jk/native/apache-2.0/mod_jk.c
    tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c
    tomcat/connectors/trunk/jk/native/common/jk_service.h
    tomcat/connectors/trunk/jk/native/common/jk_status.c
    tomcat/connectors/trunk/jk/native/common/jk_uri_worker_map.c
    tomcat/connectors/trunk/jk/native/common/jk_uri_worker_map.h
    tomcat/connectors/trunk/jk/native/common/jk_util.c
    tomcat/connectors/trunk/jk/native/common/jk_util.h
    tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml

Modified: tomcat/connectors/trunk/jk/native/apache-1.3/mod_jk.c
URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/apache-1.3/mod_jk.c?rev=613546&r1=613545&r2=613546&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/native/apache-1.3/mod_jk.c (original)
+++ tomcat/connectors/trunk/jk/native/apache-1.3/mod_jk.c Sun Jan 20 04:49:03 2008
@@ -650,6 +650,10 @@
             s->extension.activation = ap_palloc(r->pool, e->activation_size * sizeof(int));
             memcpy(s->extension.activation, e->activation, e->activation_size * sizeof(int));
         }
+        if (e->fail_on_status_size > 0) {
+            s->extension.fail_on_status = ap_palloc(r->pool, e->fail_on_status_size * sizeof(int));
+            memcpy(s->extension.fail_on_status, e->fail_on_status, e->fail_on_status_size * sizeof(int));
+        }
     }
     reply_timeout = ap_table_get(r->subprocess_env, "JK_REPLY_TIMEOUT");
     if (reply_timeout) {

Modified: tomcat/connectors/trunk/jk/native/apache-2.0/mod_jk.c
URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/apache-2.0/mod_jk.c?rev=613546&r1=613545&r2=613546&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/native/apache-2.0/mod_jk.c (original)
+++ tomcat/connectors/trunk/jk/native/apache-2.0/mod_jk.c Sun Jan 20 04:49:03 2008
@@ -662,6 +662,10 @@
             s->extension.activation = apr_palloc(r->pool, e->activation_size * sizeof(int));
             memcpy(s->extension.activation, e->activation, e->activation_size * sizeof(int));
         }
+        if (e->fail_on_status_size > 0) {
+            s->extension.fail_on_status = apr_palloc(r->pool, e->fail_on_status_size * sizeof(int));
+            memcpy(s->extension.fail_on_status, e->fail_on_status, e->fail_on_status_size * sizeof(int));
+        }
     }
     reply_timeout = apr_table_get(r->subprocess_env, "JK_REPLY_TIMEOUT");
     if (reply_timeout) {

Modified: tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c
URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c?rev=613546&r1=613545&r2=613546&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c Sun Jan 20 04:49:03 2008
@@ -1602,20 +1602,6 @@
 }
 
 
-static int is_http_status_fail(ajp_worker_t *w, int status)
-{
-    unsigned int i;
-    int soft_status = -1 * status;
-    for (i = 0; i < w->http_status_fail_num; i++) {
-        if (w->http_status_fail[i] == status)
-            return 1;
-        else if (w->http_status_fail[i] == soft_status)
-            return -1;
-    }
-    return 0;
-}
-
-
 /*
  * What to do with incoming data (dispatcher)
  */
@@ -1641,7 +1627,12 @@
                 return JK_AJP13_ERROR;
             }
             r->http_response_status = res.status;
-            rc = is_http_status_fail(ae->worker, res.status);
+            if (r->extension.fail_on_status_size > 0)
+                rc = is_http_status_fail(r->extension.fail_on_status_size,
+                                         r->extension.fail_on_status, res.status);
+            else
+                rc = is_http_status_fail(ae->worker->http_status_fail_num,
+                                         ae->worker->http_status_fail, res.status);
             if (rc > 0) {
                 JK_TRACE_EXIT(l);
                 return JK_STATUS_FATAL_ERROR;

Modified: tomcat/connectors/trunk/jk/native/common/jk_service.h
URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_service.h?rev=613546&r1=613545&r2=613546&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_service.h (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_service.h Sun Jan 20 04:49:03 2008
@@ -82,6 +82,11 @@
     /* activation state overwrites for load balancers */
     /* Dynamically allocated array with one entry per lb member. */
     int *activation;
+    /* fail_on_status overwrites */
+    /* Number of elements in the array fail_on_status. */
+    int fail_on_status_size;
+    /* Dynamically allocated array with one entry per status. */
+    int *fail_on_status;
 };
 typedef struct svc_extension svc_extension_t;
 

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=613546&r1=613545&r2=613546&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_status.c (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_status.c Sun Jan 20 04:49:03 2008
@@ -209,10 +209,10 @@
 #define JK_STATUS_FORM_START               "<form method=\"%s\" action=\"%s\">\n"
 #define JK_STATUS_FORM_HIDDEN_INT          "<input type=\"hidden\" name=\"%s\" value=\"%d\"/>\n"
 #define JK_STATUS_FORM_HIDDEN_STRING       "<input type=\"hidden\" name=\"%s\" value=\"%s\"/>\n"
-#define JK_STATUS_URI_MAP_TABLE_HEAD       "<tr><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th></tr>\n"
-#define JK_STATUS_URI_MAP_TABLE_ROW        "<tr><td>%s</td><td>%s</td><td>%s</td><td>%d</td><td>%s</td><td>%s</td><td>%s</td></tr>\n"
-#define JK_STATUS_URI_MAP_TABLE_HEAD2      "<tr><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th></tr>\n"
-#define JK_STATUS_URI_MAP_TABLE_ROW2       "<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%d</td><td>%s</td><td>%s</td><td>%s</td></tr>\n"
+#define JK_STATUS_URI_MAP_TABLE_HEAD       "<tr><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th></tr>\n"
+#define JK_STATUS_URI_MAP_TABLE_ROW        "<tr><td>%s</td><td>%s</td><td>%s</td><td>%d</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>\n"
+#define JK_STATUS_URI_MAP_TABLE_HEAD2      "<tr><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th></tr>\n"
+#define JK_STATUS_URI_MAP_TABLE_ROW2       "<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%d</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>\n"
 #define JK_STATUS_SHOW_AJP_CONF_HEAD       "<tr>" \
                                            "<th>Type</th>" \
                                            "<th>Host</th><th>Addr</th>" \
@@ -1423,6 +1423,7 @@
                           uri_worker_map_get_match(uwr, buf, l),
                           uri_worker_map_get_source(uwr, l),
                           uwr->extensions.reply_timeout,
+                          uwr->extensions.fail_on_status_str ? uwr->extensions.fail_on_status_str : "-",
                           uwr->extensions.active ? uwr->extensions.active : "-",
                           uwr->extensions.disabled ? uwr->extensions.disabled : "-",
                           uwr->extensions.stopped ? uwr->extensions.stopped : "-");
@@ -1432,6 +1433,7 @@
                           uri_worker_map_get_match(uwr, buf, l),
                           uri_worker_map_get_source(uwr, l),
                           uwr->extensions.reply_timeout,
+                          uwr->extensions.fail_on_status_str ? uwr->extensions.fail_on_status_str : "-",
                           uwr->extensions.active ? uwr->extensions.active : "-",
                           uwr->extensions.disabled ? uwr->extensions.disabled : "-",
                           uwr->extensions.stopped ? uwr->extensions.stopped : "-");
@@ -1445,6 +1447,7 @@
             jk_print_xml_att_string(s, 8, "type", uri_worker_map_get_match(uwr, buf, l));
             jk_print_xml_att_string(s, 8, "source", uri_worker_map_get_source(uwr, l));
             jk_print_xml_att_int(s, 8, "reply_timeout", uwr->extensions.reply_timeout);
+            jk_print_xml_att_string(s, 8, "fail_on_status", uwr->extensions.fail_on_status_str);
             jk_print_xml_att_string(s, 8, "active", uwr->extensions.active);
             jk_print_xml_att_string(s, 8, "disabled", uwr->extensions.disabled);
             jk_print_xml_att_string(s, 8, "stopped", uwr->extensions.stopped);
@@ -1459,6 +1462,7 @@
             jk_printf(s, " type=\"%s\"", uri_worker_map_get_match(uwr, buf, l));
             jk_printf(s, " source=\"%s\"", uri_worker_map_get_source(uwr, l));
             jk_printf(s, " reply_timeout=\"%d\"", uwr->extensions.reply_timeout);
+            jk_printf(s, " fail_on_status=\"%s\"", uwr->extensions.fail_on_status_str ? uwr->extensions.fail_on_status_str : "");
             jk_printf(s, " active=\"%s\"", uwr->extensions.active);
             jk_printf(s, " disabled=\"%s\"", uwr->extensions.disabled);
             jk_printf(s, " stopped=\"%s\"", uwr->extensions.stopped);
@@ -1471,6 +1475,7 @@
             jk_print_prop_item_string(s, w, worker, "map", count, "type", uri_worker_map_get_match(uwr, buf, l));
             jk_print_prop_item_string(s, w, worker, "map", count, "source", uri_worker_map_get_source(uwr, l));
             jk_print_prop_item_int(s, w, worker, "map", count, "reply_timeout", uwr->extensions.reply_timeout);
+            jk_print_prop_item_string(s, w, worker, "map", count, "fail_on_status", uwr->extensions.fail_on_status_str);
             jk_print_prop_item_string(s, w, worker, "map", count, "active", uwr->extensions.active);
             jk_print_prop_item_string(s, w, worker, "map", count, "disabled", uwr->extensions.disabled);
             jk_print_prop_item_string(s, w, worker, "map", count, "stopped", uwr->extensions.stopped);
@@ -1523,10 +1528,10 @@
             jk_puts(s, "]</h3><table>\n");
             if (has_server_iterator)
                 jk_printf(s, JK_STATUS_URI_MAP_TABLE_HEAD2,
-                          "Server", "URI", "Match Type", "Source", "Reply Timeout", "Active", "Disabled", "Stopped");
+                          "Server", "URI", "Match Type", "Source", "Reply Timeout", "Fail on Status", "Active", "Disabled", "Stopped");
             else
                 jk_printf(s, JK_STATUS_URI_MAP_TABLE_HEAD,
-                          "URI", "Match Type", "Source", "Reply Timeout", "Active", "Disabled", "Stopped");
+                          "URI", "Match Type", "Source", "Reply Timeout", "Fail on Status", "Active", "Disabled", "Stopped");
         }
         count = 0;
         if (has_server_iterator) {

Modified: tomcat/connectors/trunk/jk/native/common/jk_uri_worker_map.c
URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_uri_worker_map.c?rev=613546&r1=613545&r2=613546&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_uri_worker_map.c (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_uri_worker_map.c Sun Jan 20 04:49:03 2008
@@ -39,10 +39,11 @@
 #define JK_STRNCMP  strncmp
 #endif
 
-#define JK_UWMAP_EXTENSION_REPLY_TIMEOUT "reply_timeout="
-#define JK_UWMAP_EXTENSION_ACTIVE        "active="
-#define JK_UWMAP_EXTENSION_DISABLED      "disabled="
-#define JK_UWMAP_EXTENSION_STOPPED       "stopped="
+#define JK_UWMAP_EXTENSION_REPLY_TIMEOUT  "reply_timeout="
+#define JK_UWMAP_EXTENSION_ACTIVE         "active="
+#define JK_UWMAP_EXTENSION_DISABLED       "disabled="
+#define JK_UWMAP_EXTENSION_STOPPED        "stopped="
+#define JK_UWMAP_EXTENSION_FAIL_ON_STATUS "fail_on_status="
 
 #define IND_THIS(x)                        ((x)[uw_map->index])
 #define IND_NEXT(x)                        ((x)[(uw_map->index+1) % 2])
@@ -391,6 +392,63 @@
 
 }
 
+static void extract_fail_on_status(jk_uri_worker_map_t *uw_map,
+                                   uri_worker_record_t *uwr,
+                                   jk_logger_t *l)
+{
+    unsigned int i;
+    int j;
+    int cnt = 1;
+    jk_pool_t *p;
+    char *status;
+#ifdef _MT_CODE_PTHREAD
+    char *lasts;
+#endif
+
+    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] == ' ')
+            cnt++;
+    }
+    uwr->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;
+    uwr->extensions.fail_on_status = (int *)jk_pool_alloc(p,
+                                            uwr->extensions.fail_on_status_size * sizeof(int));
+    if (!uwr->extensions.fail_on_status) {
+        jk_log(l, JK_LOG_ERROR,
+               "can't alloc extensions fail_on_status list");
+        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, uwr->worker_name);
+
+
+    for (j=0; j<uwr->extensions.activation_size; j++) {
+        uwr->extensions.activation[j] = JK_LB_ACTIVATION_UNSET;
+    }
+
+    cnt = 0;
+#ifdef _MT_CODE_PTHREAD
+    for (status = strtok_r(uwr->extensions.fail_on_status_str, ", ", &lasts);
+         status; status = strtok_r(NULL, "&", &lasts)) {
+#else
+    for (status = strtok(uwr->extensions.fail_on_status_str, ", "); status; status = strtok(NULL, ", ")) {
+#endif
+        uwr->extensions.fail_on_status[cnt] = atoi(status);
+        cnt++;
+    }
+
+    JK_TRACE_EXIT(l);
+
+}
+
 void uri_worker_map_ext(jk_uri_worker_map_t *uw_map, jk_logger_t *l)
 {
     unsigned int i;
@@ -458,6 +516,9 @@
                    JK_UWMAP_EXTENSION_STOPPED " for %s ignored",
                    uwr->worker_name, uwr->extensions.stopped);
         }
+        else if (uwr->extensions.fail_on_status_str) {
+            extract_fail_on_status(uw_map, uwr, l);
+        }
     }
     uw_map->index = (uw_map->index + 1) % 2;
     jk_reset_pool(&(IND_NEXT(uw_map->p_dyn)));
@@ -530,6 +591,9 @@
         uwr->extensions.stopped = NULL;
         uwr->extensions.activation_size = 0;
         uwr->extensions.activation = NULL;
+        uwr->extensions.fail_on_status_size = 0;
+        uwr->extensions.fail_on_status = NULL;
+        uwr->extensions.fail_on_status_str = NULL;
 
 #ifdef _MT_CODE_PTHREAD
         param = strtok_r(w, ";", &lasts);
@@ -568,6 +632,14 @@
                                JK_UWMAP_EXTENSION_STOPPED);
                     else
                         uwr->extensions.stopped = param + strlen(JK_UWMAP_EXTENSION_STOPPED);
+                }
+                else if (!strncmp(param, JK_UWMAP_EXTENSION_FAIL_ON_STATUS, strlen(JK_UWMAP_EXTENSION_FAIL_ON_STATUS))) {
+                    if (uwr->extensions.fail_on_status_str)
+                        jk_log(l, JK_LOG_WARNING,
+                               "extension '%s' in uri worker map only allowed once",
+                               JK_UWMAP_EXTENSION_ACTIVE);
+                    else
+                        uwr->extensions.fail_on_status_str = param + strlen(JK_UWMAP_EXTENSION_FAIL_ON_STATUS);
                 }
                 else {
                     jk_log(l, JK_LOG_WARNING,

Modified: tomcat/connectors/trunk/jk/native/common/jk_uri_worker_map.h
URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_uri_worker_map.h?rev=613546&r1=613545&r2=613546&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_uri_worker_map.h (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_uri_worker_map.h Sun Jan 20 04:49:03 2008
@@ -82,6 +82,13 @@
     char *active;
     char *disabled;
     char *stopped;
+    /* fail_on_status overwrites */
+    /* Number of elements in the array fail_on_status. */
+    int fail_on_status_size;
+    /* Dynamically allocated array with one entry per status. */
+    int *fail_on_status;
+    /* Temporary storage for the original extension strings. */
+    char *fail_on_status_str;
 };
 typedef struct rule_extension rule_extension_t;
 

Modified: tomcat/connectors/trunk/jk/native/common/jk_util.c
URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_util.c?rev=613546&r1=613545&r2=613546&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_util.c (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_util.c Sun Jan 20 04:49:03 2008
@@ -1760,6 +1760,20 @@
     return JK_FALSE;
 }
 
+int is_http_status_fail(unsigned int http_status_fail_num,
+                        int *http_status_fail, int status)
+{
+    unsigned int i;
+    int soft_status = -1 * status;
+    for (i = 0; i < http_status_fail_num; i++) {
+        if (http_status_fail[i] == status)
+            return 1;
+        else if (http_status_fail[i] == soft_status)
+            return -1;
+    }
+    return 0;
+}
+
 char **jk_parse_sysprops(jk_pool_t *p, const char *sysprops)
 {
     char **rc = NULL;

Modified: tomcat/connectors/trunk/jk/native/common/jk_util.h
URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_util.h?rev=613546&r1=613545&r2=613546&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_util.h (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_util.h Sun Jan 20 04:49:03 2008
@@ -206,8 +206,10 @@
 int jk_get_worker_fail_on_status(jk_map_t *m, const char *wname,
                                  int *list, unsigned int list_size);
 
-
 int jk_get_worker_user_case_insensitive(jk_map_t *m, const char *wname);
+
+int is_http_status_fail(unsigned int http_status_fail_num,
+                        int *http_status_fail, int status);
 
 #define TC32_BRIDGE_TYPE    32
 #define TC33_BRIDGE_TYPE    33

Modified: tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml?rev=613546&r1=613545&r2=613546&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml (original)
+++ tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml Sun Jan 20 04:49:03 2008
@@ -44,8 +44,9 @@
   <subsection name="Native">
     <changelog>
       <update>
-        URI Map: Add extension attribute parsing.
-        First uses are reply_timeout and activation status per mount.
+        URI Map: Add extension attributes to uri worker map.
+        Allowed are reply_timeout, active/disabled/stopped
+        and fail_on_status.
         Usage currently only implemented for httpd. (rjung)
       </update>
       <fix>



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