Author: mturk
Date: Sun Oct 5 01:13:50 2008
New Revision: 701758
URL: http://svn.apache.org/viewvc?rev=701758&view=rev
Log:
For getting the free endpoint from the worker in load balancer, use that
workers retries/retry_interval setting.
Modified:
tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c
tomcat/connectors/trunk/jk/native/common/jk_lb_worker.c
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=701758&r1=701757&r2=701758&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c Sun Oct 5
01:13:50 2008
@@ -2212,6 +2212,11 @@
"retry %d, sleeping for %d ms before retrying",
i, retry_interval);
jk_sleep(retry_interval);
+ /* Pull shared memory if something changed during sleep */
+ jk_shm_lock();
+ if (aw->sequence != aw->s->h.sequence)
+ jk_ajp_pull(aw, l);
+ jk_shm_unlock();
}
/*
* We're using op->request which hold initial request
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=701758&r1=701757&r2=701758&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 01:13:50
2008
@@ -1094,8 +1094,8 @@
int is_service_error = JK_HTTP_OK;
ajp_worker_t *aw = (ajp_worker_t *)rec->worker->worker_private;
jk_endpoint_t *end = NULL;
- int retry = 0;
- int retry_interval = JK_LB_MIN_RETRY_INTERVAL;
+ int ge_retry = 0;
+ int ge_retry_interval = aw->retry_interval;
if (!s->route)
s->route = rec->route;
@@ -1115,23 +1115,20 @@
if (p->worker->lblock == JK_LB_LOCK_PESSIMISTIC)
jk_shm_unlock();
- while ((!(r=rec->worker->get_endpoint(rec->worker, &end, l)) ||
!end) && (retry < p->worker->retries)) {
- retry++;
- retry_interval *=2;
-
- if (p->worker->lblock == JK_LB_LOCK_PESSIMISTIC)
- jk_shm_lock();
- if (retry_interval > JK_LB_MAX_RETRY_INTERVAL)
- retry_interval = JK_LB_MAX_RETRY_INTERVAL;
- if (p->worker->lblock == JK_LB_LOCK_PESSIMISTIC)
- jk_shm_unlock();
-
+ while ((!(r=rec->worker->get_endpoint(rec->worker, &end, l)) ||
!end) &&
+ (ge_retry < aw->retries)) {
+ ge_retry++;
if (JK_IS_DEBUG_LEVEL(l))
jk_log(l, JK_LOG_DEBUG,
"could not get free endpoint for worker"
" (retry %d, sleeping for %d ms)",
- retry, retry_interval);
- jk_sleep(retry_interval);
+ ge_retry, ge_retry_interval);
+ jk_sleep(ge_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();
}
if (!r || !end) {
/* If we can not get the endpoint
@@ -1330,13 +1327,13 @@
rec->s->error_time = time(NULL);
rc = JK_FALSE;
}
+ if (p->worker->lblock == JK_LB_LOCK_PESSIMISTIC)
+ jk_shm_unlock();
if (p->states[rec->i] == JK_LB_STATE_ERROR)
jk_log(l, JK_LOG_INFO,
"service failed, worker %s is in %serror state",
rec->name,
rec->s->state == JK_LB_STATE_ERROR ? "" : "local ");
- if (p->worker->lblock == JK_LB_LOCK_PESSIMISTIC)
- jk_shm_unlock();
}
if (recoverable == JK_TRUE) {
/*
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]