Author: mturk
Date: Sun Oct 5 04:28:58 2008
New Revision: 701777
URL: http://svn.apache.org/viewvc?rev=701777&view=rev
Log:
Add and use retry_interval for load balancer. Like with ajp worker retries and
retry_interval are used to create multiple calls to get_worker. On retry the
internal tables are reset and everything goes again like with new request
Modified:
tomcat/connectors/trunk/jk/native/common/jk_lb_worker.c
tomcat/connectors/trunk/jk/native/common/jk_lb_worker.h
Modified: tomcat/connectors/trunk/jk/native/common/jk_lb_worker.c
URL:
http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_lb_worker.c?rev=701777&r1=701776&r2=701777&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_lb_worker.c (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_lb_worker.c Sun Oct 5 04:28:58
2008
@@ -1016,7 +1016,7 @@
jk_logger_t *l, int *is_error)
{
lb_endpoint_t *p;
- int attempt = 1;
+ int attempt = 0;
lb_sub_worker_t *prec = NULL;
int num_of_workers;
int first = 1;
@@ -1025,6 +1025,7 @@
int rc = JK_UNSET;
char *sessionid = NULL;
int i;
+ int retry;
JK_TRACE_ENTER(l);
@@ -1081,9 +1082,31 @@
"service sticky_session=%d id='%s'",
p->worker->sticky_session, sessionid ? sessionid : "empty");
- while (attempt <= num_of_workers && recoverable == JK_TRUE) {
- lb_sub_worker_t *rec =
- get_most_suitable_worker(s, p->worker, sessionid, p->states, l);
+ while (recoverable == JK_TRUE) {
+ lb_sub_worker_t *rec;
+ if (attempt >= num_of_workers) {
+ retry++;
+ if (retry > p->worker->retries) {
+ /* Done with retrying */
+ break;
+ }
+ if (JK_IS_DEBUG_LEVEL(l))
+ jk_log(l, JK_LOG_DEBUG,
+ "retry %d, sleeping for %d ms before retrying",
+ retry, p->worker->retry_interval);
+ jk_sleep(p->worker->retry_interval);
+ /* Pull shared memory if something changed during sleep */
+ jk_shm_lock();
+ if (p->worker->sequence != p->worker->s->h.sequence)
+ jk_lb_pull(p->worker, l);
+ jk_shm_unlock();
+ for (i = 0; i < num_of_workers; i++) {
+ /* Copy the shared state info */
+ p->states[i] = p->worker->lb_workers[i].s->state;
+ }
+ attempt = 0;
+ }
+ rec = get_most_suitable_worker(s, p->worker, sessionid, p->states, l);
rc = JK_FALSE;
*is_error = JK_HTTP_SERVER_BUSY;
/* Do not reuse previous worker, because
@@ -1594,8 +1617,11 @@
p->retries = jk_get_worker_retries(props, p->name,
JK_RETRIES);
+ p->retry_interval =
+ jk_get_worker_retry_interval(props, p->name,
+ JK_SLEEP_DEF);
p->recover_wait_time = jk_get_worker_recover_timeout(props, p->name,
-
WAIT_BEFORE_RECOVER);
+ WAIT_BEFORE_RECOVER);
if (p->recover_wait_time < 1)
p->recover_wait_time = 1;
p->max_reply_timeouts = jk_get_worker_max_reply_timeouts(props, p->name,
Modified: tomcat/connectors/trunk/jk/native/common/jk_lb_worker.h
URL:
http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_lb_worker.h?rev=701777&r1=701776&r2=701777&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_lb_worker.h (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_lb_worker.h Sun Oct 5 04:28:58
2008
@@ -189,6 +189,7 @@
int recover_wait_time;
int max_reply_timeouts;
int retries;
+ int retry_interval;
int lbmethod;
int lblock;
int maintain_time;
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]