Author: mturk Date: Fri Mar 23 08:35:18 2007 New Revision: 521770 URL: http://svn.apache.org/viewvc?view=rev&rev=521770 Log: Allow multiple status codes for fail_on_status directive.
Modified: tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c tomcat/connectors/trunk/jk/native/common/jk_ajp_common.h tomcat/connectors/trunk/jk/native/common/jk_map.c tomcat/connectors/trunk/jk/native/common/jk_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/common/jk_ajp_common.c URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c?view=diff&rev=521770&r1=521769&r2=521770 ============================================================================== --- tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c (original) +++ tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c Fri Mar 23 08:35:18 2007 @@ -1443,7 +1443,7 @@ if (r->flush) r->flush(r); } - else { + else { if (!r->write(r, msg->buf + msg->pos, len)) { jk_log(l, JK_LOG_INFO, "Writing to client aborted or client network problems"); @@ -1526,6 +1526,17 @@ return JK_AJP13_NO_RESPONSE; } +static int is_http_status_fail(ajp_worker_t *w, int status) +{ + unsigned int i; + for (i = 0; i < w->http_status_fail_num; i++) { + if (w->http_status_fail[i] == status) + return 1; + } + return 0; +} + + /* * get replies from Tomcat via Ajp13/Ajp14 * We will know only at read time if the remote host closed @@ -1641,8 +1652,7 @@ return JK_TRUE; } else if (JK_AJP13_SEND_HEADERS == rc) { - if (p->worker->http_status_fail && - (p->worker->http_status_fail == s->http_response_status)) { + if (is_http_status_fail(p->worker, s->http_response_status)) { JK_TRACE_EXIT(l); return JK_STATUS_ERROR; } @@ -1868,7 +1878,7 @@ "because of response status %d, " "recoverable operation attempt=%d", p->worker->name, - p->worker->http_status_fail, i); + s->http_response_status, i); JK_TRACE_EXIT(l); if (i >= JK_RETRIES) { jk_sleep(JK_SLEEP_DEF); @@ -2096,7 +2106,10 @@ p->max_packet_size = jk_get_max_packet_size(props, p->name); - p->http_status_fail = jk_get_worker_fail_on_status(props, p->name); + p->http_status_fail_num = jk_get_worker_fail_on_status(props, p->name, + &p->http_status_fail[0], + JK_MAX_HTTP_STATUS_FAILS); + pThis->retries = jk_get_worker_retries(props, p->name, @@ -2237,7 +2250,7 @@ int i; jk_sock_t sock = JK_INVALID_SOCKET; - /* If we are going to close the connection, then park the socket so + /* If we are going to close the connection, then park the socket so we can shut it down nicely rather than letting ajp_reset_endpoint kill it */ if (IS_VALID_SOCKET(p->sd) && !p->reuse) { if (JK_IS_DEBUG_LEVEL(l)) Modified: tomcat/connectors/trunk/jk/native/common/jk_ajp_common.h URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_ajp_common.h?view=diff&rev=521770&r1=521769&r2=521770 ============================================================================== --- tomcat/connectors/trunk/jk/native/common/jk_ajp_common.h (original) +++ tomcat/connectors/trunk/jk/native/common/jk_ajp_common.h Fri Mar 23 08:35:18 2007 @@ -201,7 +201,7 @@ #define RECOVER_ABORT_IF_TCSENDHEADER 0x0002 /* DONT RECOVER IF TOMCAT FAIL AFTER SENDING HEADERS */ #define RECOVER_ABORT_IF_CLIENTERROR 0x0004 /* CLOSE THE SOCKET IN CASE OF CLIENT ERROR */ - +#define JK_MAX_HTTP_STATUS_FAILS 32 /* Should be enough for most 400 and 500 statuses */ struct jk_res_data { @@ -291,7 +291,8 @@ /* * HTTP status that will cause failover (0 means disabled) */ - int http_status_fail; + unsigned int http_status_fail_num; + int http_status_fail[JK_MAX_HTTP_STATUS_FAILS]; }; Modified: tomcat/connectors/trunk/jk/native/common/jk_map.c URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_map.c?view=diff&rev=521770&r1=521769&r2=521770 ============================================================================== --- tomcat/connectors/trunk/jk/native/common/jk_map.c (original) +++ tomcat/connectors/trunk/jk/native/common/jk_map.c Fri Mar 23 08:35:18 2007 @@ -244,7 +244,7 @@ char **jk_map_get_string_list(jk_map_t *m, const char *name, - unsigned *list_len, const char *def) + unsigned int *list_len, const char *def) { const char *l = jk_map_get_string(m, name, def); char **ar = NULL; @@ -295,6 +295,55 @@ } return ar; +} + +int jk_map_get_int_list(jk_map_t *m, + const char *name, + int *list, + unsigned int list_len, + const char *def) +{ + const char *l = jk_map_get_string(m, name, def); + +#if defined(AS400) || defined(_REENTRANT) + char *lasts; +#endif + + if (!list_len) + return 0; + + if (l) { + unsigned int capacity = list_len; + unsigned int index = 0; + char *p; + char *v = jk_pool_strdup(&m->p, l); + + if (!v) { + return 0; + } + + /* + * GS, in addition to VG's patch, we now need to + * strtok also by a "*" + */ +#if defined(AS400) || defined(_REENTRANT) + for (p = strtok_r(v, " \t,", &lasts); + p; p = strtok_r(NULL, " \t,", &lasts)) +#else + for (p = strtok(v, " \t,"); p; p = strtok(NULL, " \t,")) +#endif + + { + if (index < capacity) { + list[index] = atoi(p); + index++; + } + else + break; + } + return index; + } + return 0; } int jk_map_add(jk_map_t *m, const char *name, const void *value) Modified: tomcat/connectors/trunk/jk/native/common/jk_map.h URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_map.h?view=diff&rev=521770&r1=521769&r2=521770 ============================================================================== --- tomcat/connectors/trunk/jk/native/common/jk_map.h (original) +++ tomcat/connectors/trunk/jk/native/common/jk_map.h Fri Mar 23 08:35:18 2007 @@ -58,6 +58,11 @@ const char *name, unsigned *list_len, const char *def); +int jk_map_get_int_list(jk_map_t *m, + const char *name, + int *list, unsigned int list_len, + const char *def); + int jk_map_add(jk_map_t *m, const char *name, const void *value); int jk_map_put(jk_map_t *m, const char *name, const void *value, void **old); 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?view=diff&rev=521770&r1=521769&r2=521770 ============================================================================== --- tomcat/connectors/trunk/jk/native/common/jk_util.c (original) +++ tomcat/connectors/trunk/jk/native/common/jk_util.c Fri Mar 23 08:35:18 2007 @@ -1080,17 +1080,21 @@ return sz; } -int jk_get_worker_fail_on_status(jk_map_t *m, const char *wname) +int jk_get_worker_fail_on_status(jk_map_t *m, const char *wname, + int *list, unsigned int list_size) { char buf[1024]; - - if (!m || !wname) { + if (!m || !wname || !list) { return 0; } - MAKE_WORKER_PARAM(STATUS_FAIL_OF_WORKER); - return jk_map_get_int(m, buf, 0); + if (list_size) { + return jk_map_get_int_list(m, buf, + list, list_size, + NULL); + } + return 0; } int jk_get_worker_user_case_insensitive(jk_map_t *m, const char *wname) 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?view=diff&rev=521770&r1=521769&r2=521770 ============================================================================== --- tomcat/connectors/trunk/jk/native/common/jk_util.h (original) +++ tomcat/connectors/trunk/jk/native/common/jk_util.h Fri Mar 23 08:35:18 2007 @@ -199,7 +199,9 @@ const char *jk_get_worker_prop_prefix(jk_map_t *m, const char *wname, const char *def); -int jk_get_worker_fail_on_status(jk_map_t *m, const char *wname); +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); Modified: tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml?view=diff&rev=521770&r1=521769&r2=521770 ============================================================================== --- tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml (original) +++ tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml Fri Mar 23 08:35:18 2007 @@ -27,6 +27,10 @@ <subsection name="Native"> <changelog> <update> + Allow multiple status codes for fail_on_status directive. + The status codes can be delimited by space or coma characters. (mturk) + </update> + <update> IIS. Added pcre like regular expressions for url rewrite rules. (mturk) </update> <fix> --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]