Author: mturk
Date: Tue Oct 7 01:01:27 2008
New Revision: 702376
URL: http://svn.apache.org/viewvc?rev=702376&view=rev
Log:
Move get_endpoint retries to the get_endpoint function
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=702376&r1=702375&r2=702376&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c Tue Oct 7
01:01:27 2008
@@ -2815,62 +2815,70 @@
if (pThis && pThis->worker_private && je) {
ajp_worker_t *aw = pThis->worker_private;
ajp_endpoint_t *ae = NULL;
- time_t now = 0;
int rc;
- /* Obtain current time only if needed */
- if (aw->cache_timeout > 0)
- now = time(NULL);
+ int retry = 0;
+
*je = NULL;
+ /* Obtain current time only if needed */
+ while (retry < aw->retries) {
- JK_ENTER_CS(&aw->cs, rc);
- if (rc) {
- unsigned int slot;
- /* Try to find connected socket cache entry */
- for (slot = 0; slot < aw->ep_cache_sz; slot++) {
- if (aw->ep_cache[slot] &&
- IS_VALID_SOCKET(aw->ep_cache[slot]->sd)) {
- ae = aw->ep_cache[slot];
- aw->ep_cache[slot] = NULL;
- break;
- }
- }
- if (!ae) {
- /* No connected cache entry found.
- * Use the first free one.
- */
+ JK_ENTER_CS(&aw->cs, rc);
+ if (rc) {
+ unsigned int slot;
+ /* Try to find connected socket cache entry */
for (slot = 0; slot < aw->ep_cache_sz; slot++) {
- if (aw->ep_cache[slot]) {
+ if (aw->ep_cache[slot] &&
+ IS_VALID_SOCKET(aw->ep_cache[slot]->sd)) {
ae = aw->ep_cache[slot];
aw->ep_cache[slot] = NULL;
break;
}
}
- }
- JK_LEAVE_CS(&aw->cs, rc);
- if (ae) {
- ae->last_access = now;
- *je = &ae->endpoint;
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "acquired connection pool slot=%u",
- slot);
- JK_TRACE_EXIT(l);
- return JK_TRUE;
+ if (!ae) {
+ /* No connected cache entry found.
+ * Use the first free one.
+ */
+ for (slot = 0; slot < aw->ep_cache_sz; slot++) {
+ if (aw->ep_cache[slot]) {
+ ae = aw->ep_cache[slot];
+ aw->ep_cache[slot] = NULL;
+ break;
+ }
+ }
+ }
+ JK_LEAVE_CS(&aw->cs, rc);
+ if (ae) {
+ if (aw->cache_timeout > 0)
+ ae->last_access = time(NULL);
+ *je = &ae->endpoint;
+ if (JK_IS_DEBUG_LEVEL(l))
+ jk_log(l, JK_LOG_DEBUG,
+ "acquired connection pool slot=%u",
+ slot);
+ JK_TRACE_EXIT(l);
+ return JK_TRUE;
+ }
+ else {
+ retry++;
+ if (JK_IS_DEBUG_LEVEL(l))
+ jk_log(l, JK_LOG_DEBUG,
+ "could not get free endpoint for worker %s"
+ " (retry %d, sleeping for %d ms)",
+ aw->name, retry, aw->retry_interval);
+ jk_sleep(aw->retry_interval);
+ }
}
else {
- jk_log(l, JK_LOG_WARNING,
- "Unable to get the free endpoint for worker %s from %u
slots",
- aw->name, aw->ep_cache_sz);
- }
- }
- else {
- jk_log(l, JK_LOG_ERROR,
- "locking thread (errno=%d)",
- errno);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
+ jk_log(l, JK_LOG_ERROR,
+ "locking thread (errno=%d)", errno);
+ JK_TRACE_EXIT(l);
+ return JK_FALSE;
+ }
}
+ jk_log(l, JK_LOG_WARNING,
+ "Unable to get the free endpoint for worker %s from %u slots",
+ aw->name, aw->ep_cache_sz);
}
else {
JK_LOG_NULL_PARAMS(l);
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=702376&r1=702375&r2=702376&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_lb_worker.c (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_lb_worker.c Tue Oct 7 01:01:27
2008
@@ -1119,8 +1119,6 @@
int is_service_error = JK_HTTP_OK;
ajp_worker_t *aw = (ajp_worker_t *)rec->worker->worker_private;
jk_endpoint_t *end = NULL;
- int ge_retry = 0;
- int ge_retry_interval = aw->retry_interval;
if (!s->route)
s->route = rec->route;
@@ -1140,21 +1138,7 @@
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)",
- 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();
- }
+ r = rec->worker->get_endpoint(rec->worker, &end, l);
if (!r || !end) {
/* If we can not get the endpoint
* mark the worker as busy rather then
@@ -1171,7 +1155,7 @@
jk_shm_unlock();
jk_log(l, JK_LOG_INFO,
"could not get free endpoint for worker %s (%d
retries)",
- rec->name, ge_retry);
+ rec->name, retry);
}
else {
int service_stat = JK_UNSET;
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]