mturk 2005/02/16 23:16:32 Modified: jk/native/common jk_lb_worker.c jk_lb_worker.h Log: Set service route to either worker name or worker domain, depending on how the worker has been elected. Revision Changes Path 1.57 +27 -19 jakarta-tomcat-connectors/jk/native/common/jk_lb_worker.c Index: jk_lb_worker.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_lb_worker.c,v retrieving revision 1.56 retrieving revision 1.57 diff -u -r1.56 -r1.57 --- jk_lb_worker.c 16 Feb 2005 15:09:21 -0000 1.56 +++ jk_lb_worker.c 17 Feb 2005 07:16:32 -0000 1.57 @@ -173,13 +173,13 @@ if (elapsed <= recover_wait_time) { if (JK_IS_DEBUG_LEVEL(l)) jk_log(l, JK_LOG_DEBUG, - "worker %s is in error state - will not yet recover (%d < %d)", - w->s->name, elapsed, recover_wait_time); + "worker %s will recover in %d seconds", + w->s->name, recover_wait_time - elapsed); } else { if (JK_IS_DEBUG_LEVEL(l)) jk_log(l, JK_LOG_DEBUG, - "worker %s is in error state - will recover", + "worker %s is marked for recover", w->s->name); w->s->in_recovering = JK_TRUE; w->s->in_error_state = JK_FALSE; @@ -247,6 +247,7 @@ if (candidate) { if (p->lbmethod == JK_LB_BYREQUESTS) candidate->s->lb_value -= total_factor; + candidate->r = &(candidate->s->domain[0]); } return candidate; @@ -286,6 +287,7 @@ if (candidate) { candidate->s->lb_value -= total_factor; + candidate->r = &(candidate->s->name[0]); } return candidate; @@ -337,6 +339,9 @@ rc = find_best_byrequests(p, l); else if (p->lbmethod == JK_LB_BYTRAFFIC) rc = find_best_bytraffic(p, l); + /* By default use worker name as session route */ + if (rc) + rc->r = &(rc->s->name[0]); return rc; } @@ -485,7 +490,7 @@ lb_endpoint_t *p = e->endpoint_private; int attempt = 0; int num_of_workers = p->worker->num_of_workers; - /* you can not recover on another load balancer */ + /* Set returned error to OK */ *is_error = JK_HTTP_OK; /* set the recovery post, for LB mode */ @@ -505,10 +510,15 @@ if (rec) { int is_service_error = JK_HTTP_OK; + int service_ok = JK_FALSE; jk_endpoint_t *end = NULL; - - s->jvm_route = jk_pool_strdup(s->pool, rec->s->name); - + + /* XXX: No need to strdup here ? */ +#if 0 + s->jvm_route = jk_pool_strdup(s->pool, rec->r); +#else + s->jvm_route = rec->r; +#endif rc = rec->w->get_endpoint(rec->w, &end, l); if (JK_IS_DEBUG_LEVEL(l)) @@ -517,17 +527,16 @@ rec->s->name, s->jvm_route, rc); rec->s->elected++; if (rc && end) { - int src; /* Reset endpoint read and write sizes for * this request. */ end->rd = end->wr = 0; - src = end->service(end, s, l, &is_service_error); + service_ok = end->service(end, s, l, &is_service_error); /* Update partial reads and writes if any */ rec->s->readed += end->rd; rec->s->transferred += end->wr; end->done(&end, l); - if (src) { + if (service_ok) { rec->s->in_error_state = JK_FALSE; rec->s->in_recovering = JK_FALSE; rec->s->error_time = 0; @@ -535,7 +544,7 @@ return JK_TRUE; } } - if (end) { + if (!service_ok) { /* * Service failed !!! * @@ -560,6 +569,9 @@ JK_TRACE_EXIT(l); return JK_FALSE; } + jk_log(l, JK_LOG_INFO, + "service failed, worker %s is in error state", + rec->s->name); } else { /* If we can not get the endpoint from the worker @@ -588,8 +600,7 @@ } } jk_log(l, JK_LOG_INFO, - "All tomcat instances are busy, no more endpoints left. " - "Rise cache_size to match the load"); + "All tomcat instances are busy or in error state"); JK_TRACE_EXIT(l); /* Set error to Server busy */ *is_error = JK_HTTP_SERVER_BUSY; @@ -675,14 +686,11 @@ strncpy(p->lb_workers[i].s->domain, s, JK_SHM_STR_SIZ); if ((s = jk_get_worker_redirect(props, worker_names[i], NULL))) strncpy(p->lb_workers[i].s->redirect, s, JK_SHM_STR_SIZ); - /* - * Allow using lb in fault-tolerant mode. - * A value of 0 means the worker will be used for all requests without - * sessions - */ + p->lb_workers[i].s->lb_value = p->lb_workers[i].s->lb_factor; p->lb_workers[i].s->in_error_state = JK_FALSE; p->lb_workers[i].s->in_recovering = JK_FALSE; + p->lb_workers[i].s->error_time = 0; /* Worker can be initaly disabled as hot standby */ p->lb_workers[i].s->is_disabled = jk_get_is_worker_disabled(props, worker_names[i]); if (!wc_create_worker(p->lb_workers[i].s->name, 1.13 +3 -1 jakarta-tomcat-connectors/jk/native/common/jk_lb_worker.h Index: jk_lb_worker.h =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_lb_worker.h,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- jk_lb_worker.h 16 Feb 2005 08:27:52 -0000 1.12 +++ jk_lb_worker.h 17 Feb 2005 07:16:32 -0000 1.13 @@ -47,6 +47,8 @@ jk_worker_t *w; /* Shared memory worker data */ jk_shm_worker_t *s; + /* Current jvmRoute. Can be name or domain */ + const char *r; }; typedef struct worker_record worker_record_t;
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]