mturk 2005/02/25 23:16:54 Modified: jk/native/common jk_lb_worker.c Log: Add failover for hot standby. This allows new sessions to use failover worker or worker group. Limit is that you can not have two different failover workers or workers groups. Revision Changes Path 1.72 +37 -23 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.71 retrieving revision 1.72 diff -u -r1.71 -r1.72 --- jk_lb_worker.c 22 Feb 2005 08:59:57 -0000 1.71 +++ jk_lb_worker.c 26 Feb 2005 07:16:54 -0000 1.72 @@ -281,11 +281,8 @@ } } - if (candidate) { + if (candidate) candidate->s->lb_value -= total_factor; - candidate->r = &(candidate->s->name[0]); - } - return candidate; } @@ -320,27 +317,9 @@ } } } - if (candidate) - candidate->r = &(candidate->s->name[0]); return candidate; } -static worker_record_t *find_best_worker(lb_worker_t * p, - jk_logger_t *l) -{ - worker_record_t *rc = NULL; - - if (p->lbmethod == JK_LB_BYREQUESTS) - 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; -} - static worker_record_t *find_bysession_route(lb_worker_t *p, const char *name, jk_logger_t *l) @@ -395,6 +374,41 @@ return candidate; } +static worker_record_t *find_failover_worker(lb_worker_t * p, + jk_logger_t *l) +{ + worker_record_t *rc = NULL; + unsigned int i; + const char *redirect = NULL; + + for (i = 0; i < p->num_of_workers; i++) { + if (strlen(p->lb_workers[i].s->redirect)) { + redirect = &(p->lb_workers[i].s->redirect[0]); + break; + } + } + if (redirect) + rc = find_bysession_route(p, redirect, l); + return rc; +} + +static worker_record_t *find_best_worker(lb_worker_t * p, + jk_logger_t *l) +{ + worker_record_t *rc = NULL; + + if (p->lbmethod == JK_LB_BYREQUESTS) + 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]); + else + rc = find_failover_worker(p, l); + return rc; +} + static worker_record_t *get_most_suitable_worker(lb_worker_t * p, jk_ws_service_t *s, int attempt,
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]