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