Author: rjung Date: Fri Oct 3 12:37:13 2008 New Revision: 701507 URL: http://svn.apache.org/viewvc?rev=701507&view=rev Log: Add retry_wait for AJP13 workers. If a request fails, sleep a configurable time before each following retry. Remember: this has nothing to do with the lb retries.
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_util.c tomcat/connectors/trunk/jk/native/common/jk_util.h 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=701507&r1=701506&r2=701507&view=diff ============================================================================== --- tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c (original) +++ tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c Fri Oct 3 12:37:13 2008 @@ -2097,7 +2097,8 @@ ajp_worker_t *aw; int log_error; int rc = JK_UNSET; - char *msg; + char *msg = ""; + int retry_wait; JK_TRACE_ENTER(l); @@ -2200,8 +2201,22 @@ aw->s->state = JK_AJP_STATE_PROBE; if (aw->s->busy > aw->s->max_busy) aw->s->max_busy = aw->s->busy; + retry_wait = p->worker->retry_wait; for (i = 0; i < aw->retries; i++) { /* + * ajp_send_request() already locally handles + * reconnecting and broken connection detection. + * So if we already failed in it, wait a bit before + * retrying the same backend. + */ + if (i > 0 && retry_wait >= 0) { + if (JK_IS_DEBUG_LEVEL(l)) + jk_log(l, JK_LOG_DEBUG, + "retry %d, sleeping for %d ms before retrying", + i, retry_wait); + jk_sleep(retry_wait); + } + /* * We're using op->request which hold initial request * if Tomcat is stopped or restarted, we will pass op->request * to next valid tomcat. @@ -2303,9 +2318,6 @@ *is_error = JK_HTTP_SERVER_BUSY; msg = "because of response status"; rc = err; - if (i >= JK_RETRIES) { - jk_sleep(JK_SLEEP_DEF); - } } /* This should only be the cases err == JK_FALSE */ else { @@ -2317,10 +2329,6 @@ *is_error = JK_HTTP_BAD_GATEWAY; msg = ""; rc = JK_FALSE; - /* Check for custom retries */ - if (i >= JK_RETRIES) { - jk_sleep(JK_SLEEP_DEF); - } } } else { @@ -2549,6 +2557,10 @@ p->socket_buf = jk_get_worker_socket_buffer(props, p->name, p->max_packet_size); + p->retry_wait = + jk_get_worker_retry_wait(props, p->name, + JK_SLEEP_DEF); + p->http_status_fail_num = jk_get_worker_fail_on_status(props, p->name, &p->http_status_fail[0], JK_MAX_HTTP_STATUS_FAILS); @@ -2613,6 +2625,10 @@ jk_log(l, JK_LOG_DEBUG, "max packet size: %d", p->max_packet_size); + + jk_log(l, JK_LOG_DEBUG, + "retry wait time: %d", + p->retry_wait); } /* * Need to initialize secret here since we could return from inside 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?rev=701507&r1=701506&r2=701507&view=diff ============================================================================== --- tomcat/connectors/trunk/jk/native/common/jk_ajp_common.h (original) +++ tomcat/connectors/trunk/jk/native/common/jk_ajp_common.h Fri Oct 3 12:37:13 2008 @@ -318,12 +318,12 @@ int connect_timeout; /* connect cping/cpong delay in ms (0 means disabled) */ int reply_timeout; /* reply timeout delay in ms (0 means disabled) */ int prepost_timeout; /* before sending a request cping/cpong timeout delay in ms (0 means disabled) */ - int conn_ping_interval; /* interval for sending cping packets on + int conn_ping_interval; /* interval for sending keepalive cping packets on * unused connection */ int ping_timeout; /* generic cping/cpong timeout. Used for keepalive packets or * as default for boolean valued connect and prepost timeouts. */ - unsigned int ping_mode; /* Ping mode flags */ + unsigned int ping_mode; /* Ping mode flags (which types of cpings should be used) */ /* * Recovery options */ @@ -337,6 +337,8 @@ unsigned int max_packet_size; /* Maximum AJP Packet size */ + int retry_wait; /* Number of milliseconds to sleep before doing a retry */ + /* * HTTP status that will cause failover (0 means disabled) */ 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=701507&r1=701506&r2=701507&view=diff ============================================================================== --- tomcat/connectors/trunk/jk/native/common/jk_util.c (original) +++ tomcat/connectors/trunk/jk/native/common/jk_util.c Fri Oct 3 12:37:13 2008 @@ -86,6 +86,7 @@ #define ACTIVATION_OF_WORKER ("activation") #define WORKER_RECOVER_TIME ("recover_time") #define MAX_REPLY_TIMEOUTS_OF_WORKER ("max_reply_timeouts") +#define RETRY_WAIT_OF_WORKER ("retry_wait") #define WORKER_MAX_PACKET_SIZE ("max_packet_size") #define STYLE_SHEET_OF_WORKER ("css") #define NAMESPACE_OF_WORKER ("ns") @@ -201,6 +202,7 @@ ACTIVATION_OF_WORKER, WORKER_RECOVER_TIME, MAX_REPLY_TIMEOUTS_OF_WORKER, + RETRY_WAIT_OF_WORKER, WORKER_MAX_PACKET_SIZE, STYLE_SHEET_OF_WORKER, READ_ONLY_OF_WORKER, @@ -293,6 +295,7 @@ ACTIVATION_OF_WORKER, WORKER_RECOVER_TIME, MAX_REPLY_TIMEOUTS_OF_WORKER, + RETRY_WAIT_OF_WORKER, WORKER_MAX_PACKET_SIZE, STYLE_SHEET_OF_WORKER, NAMESPACE_OF_WORKER, @@ -362,8 +365,8 @@ Sleep(ms); #else struct timeval tv; - tv.tv_usec = ms * 1000; - tv.tv_sec = 0; + tv.tv_usec = (ms % 1000) * 1000; + tv.tv_sec = ms / 1000; select(0, NULL, NULL, NULL, &tv); #endif } @@ -967,6 +970,19 @@ return jk_map_get_int(m, buf, def); } +int jk_get_worker_retry_wait(jk_map_t *m, const char *wname, int def) +{ + char buf[1024]; + + if (!m || !wname) { + return -1; + } + + MAKE_WORKER_PARAM(RETRY_WAIT_OF_WORKER); + + return jk_map_get_int(m, buf, def); +} + int jk_get_worker_socket_buffer(jk_map_t *m, const char *wname, int def) { char buf[1024]; 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=701507&r1=701506&r2=701507&view=diff ============================================================================== --- tomcat/connectors/trunk/jk/native/common/jk_util.h (original) +++ tomcat/connectors/trunk/jk/native/common/jk_util.h Fri Oct 3 12:37:13 2008 @@ -98,6 +98,8 @@ int jk_get_worker_max_reply_timeouts(jk_map_t *m, const char *wname, int def); +int jk_get_worker_retry_wait(jk_map_t *m, const char *wname, int def); + const char *jk_get_worker_route(jk_map_t *m, const char *wname, const char *def); const char *jk_get_worker_domain(jk_map_t *m, const char *wname, const char *def); --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]