pero 2005/04/26 08:28:18 Modified: jk/native/common jk_lb_worker.c jk_shm.h jk_status.c jk_uri_worker_map.h jk_util.c jk_util.h Log: Add stopped flag for better cluster support to worker. Many thanks to Mladen :-> Revision Changes Path 1.79 +11 -9 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.78 retrieving revision 1.79 diff -u -r1.78 -r1.79 --- jk_lb_worker.c 24 Apr 2005 09:54:47 -0000 1.78 +++ jk_lb_worker.c 26 Apr 2005 15:28:18 -0000 1.79 @@ -40,8 +40,8 @@ /* * Time to wait before retry... */ -#define JK_WORKER_IN_ERROR(w) ((w)->in_error_state && !(w)->is_disabled && !(w)->is_busy) -#define JK_WORKER_USABLE(w) (!(w)->in_error_state && !(w)->is_disabled && !(w)->is_busy) +#define JK_WORKER_IN_ERROR(w) ((w)->in_error_state && !(w)->is_disabled && !(w)->is_busy) +#define JK_WORKER_USABLE(w) (!(w)->in_error_state && !(w)->is_stopped && !(w)->is_disabled && !(w)->is_busy) struct lb_endpoint { @@ -235,7 +235,7 @@ strcmp(p->lb_workers[i].s->domain, domain)) continue; /* Take into calculation only the workers that are - * not in error state or not disabled. + * not in error state, stopped or not disabled. */ if (JK_WORKER_USABLE(p->lb_workers[i].s)) { if (p->lbmethod == JK_LB_BYREQUESTS) { @@ -252,7 +252,7 @@ curmin = mytraffic; } } - } + } } if (candidate) { @@ -284,7 +284,7 @@ retry_worker(&p->lb_workers[i], p->s->recover_wait_time, l); } /* Take into calculation only the workers that are - * not in error state or not disabled. + * not in error state, stopped or not disabled. */ if (JK_WORKER_USABLE(p->lb_workers[i].s)) { p->lb_workers[i].s->lb_value += p->lb_workers[i].s->lb_factor; @@ -319,7 +319,7 @@ retry_worker(&p->lb_workers[i], p->s->recover_wait_time, l); } /* Take into calculation only the workers that are - * not in error state or not disabled. + * not in error state, stopped or not disabled. */ if (JK_WORKER_USABLE(p->lb_workers[i].s)) { mytraffic = (p->lb_workers[i].s->transferred/p->lb_workers[i].s->lb_factor) + @@ -351,8 +351,8 @@ if (JK_WORKER_IN_ERROR(candidate->s)) { retry_worker(candidate, p->s->recover_wait_time, l); } - if (candidate->s->in_error_state) { - /* We have a worker that is error state. + if (candidate->s->in_error_state || candidate->s->is_stopped ) { + /* We have a worker that is error state or stopped. * If it has a redirection set use that redirection worker. * This enables to safely remove the member from the * balancer. Of course you will need a some kind of @@ -780,6 +780,8 @@ 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]); + /* Worker can be initaly deactive as cold standby */ + p->lb_workers[i].s->is_stopped = jk_get_is_worker_stopped(props, worker_names[i]); if (!wc_create_worker(p->lb_workers[i].s->name, props, &(p->lb_workers[i].w), 1.19 +2 -1 jakarta-tomcat-connectors/jk/native/common/jk_shm.h Index: jk_shm.h =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_shm.h,v retrieving revision 1.18 retrieving revision 1.19 diff -u -r1.18 -r1.19 --- jk_shm.h 11 Apr 2005 06:36:02 -0000 1.18 +++ jk_shm.h 26 Apr 2005 15:28:18 -0000 1.19 @@ -64,6 +64,7 @@ char redirect[JK_SHM_STR_SIZ+1]; /* current status of the worker */ volatile int is_disabled; + volatile int is_stopped; volatile int is_busy; /* Current lb factor */ volatile int lb_factor; 1.38 +17 -6 jakarta-tomcat-connectors/jk/native/common/jk_status.c Index: jk_status.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_status.c,v retrieving revision 1.37 retrieving revision 1.38 diff -u -r1.37 -r1.38 --- jk_status.c 13 Apr 2005 11:03:37 -0000 1.37 +++ jk_status.c 26 Apr 2005 15:28:18 -0000 1.38 @@ -218,9 +218,11 @@ return "True"; } -static const char *status_val_status(int d, int e, int r, int b) +static const char *status_val_status(int s, int d, int e, int r, int b) { - if (d) + if (s) + return "Stopped"; + else if (d) return "Disabled"; else if (r) return "Recovering"; @@ -234,7 +236,9 @@ static const char *status_val_match(unsigned int match) { - if (match & MATCH_TYPE_DISABLED) + if (match & MATCH_TYPE_STOPPED) + return "Stopped"; + else if (match & MATCH_TYPE_DISABLED) return "Disabled"; else if (match & MATCH_TYPE_NO_MATCH) return "Unmount"; @@ -459,7 +463,8 @@ "</td>", NULL); /* TODO: descriptive status */ jk_putv(s, "<td>", - status_val_status(wr->s->is_disabled, + status_val_status(wr->s->is_stopped, + wr->s->is_disabled, wr->s->in_error_state, wr->s->in_recovering, wr->s->is_busy), @@ -512,6 +517,10 @@ if (wr->s->is_disabled) jk_puts(s, " checked=\"checked\""); jk_puts(s, "/></td></tr>\n"); + jk_puts(s, "<tr><td>Stopped:</td><td><input name=\"ws\" type=\"checkbox\""); + if (wr->s->is_stopped) + jk_puts(s, " checked=\"checked\""); + jk_puts(s, "/></td></tr>\n"); jk_puts(s, "</td></tr>\n</table>\n"); jk_puts(s, "<br/><input type=\"submit\" value=\"Update Worker\"/>\n</form>\n"); @@ -631,7 +640,8 @@ a->host, a->port, jk_dump_hinfo(&a->worker_inet_addr, buf), - status_val_status(wr->s->is_disabled, + status_val_status(wr->s->is_stopped, + wr->s->is_disabled, wr->s->in_error_state, wr->s->in_recovering, wr->s->is_busy) ); @@ -716,6 +726,7 @@ else memset(wr->s->domain, 0, JK_SHM_STR_SIZ); wr->s->is_disabled = status_bool("wd", s->query_string); + wr->s->is_stopped = status_bool("ws", s->query_string); i = status_int("wf", s->query_string, wr->s->lb_factor); if (i > 0) wr->s->lb_factor = i; 1.19 +2 -1 jakarta-tomcat-connectors/jk/native/common/jk_uri_worker_map.h Index: jk_uri_worker_map.h =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_uri_worker_map.h,v retrieving revision 1.18 retrieving revision 1.19 diff -u -r1.18 -r1.19 --- jk_uri_worker_map.h 13 Apr 2005 11:03:37 -0000 1.18 +++ jk_uri_worker_map.h 26 Apr 2005 15:28:18 -0000 1.19 @@ -50,6 +50,7 @@ #define MATCH_TYPE_WILDCHAR_PATH 0x0040 #define MATCH_TYPE_NO_MATCH 0x1000 #define MATCH_TYPE_DISABLED 0x2000 +#define MATCH_TYPE_STOPPED 0x4000 struct uri_worker_record { 1.63 +17 -1 jakarta-tomcat-connectors/jk/native/common/jk_util.c Index: jk_util.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_util.c,v retrieving revision 1.62 retrieving revision 1.63 diff -u -r1.62 -r1.63 --- jk_util.c 21 Apr 2005 10:36:58 -0000 1.62 +++ jk_util.c 26 Apr 2005 15:28:18 -0000 1.63 @@ -67,6 +67,7 @@ #define MOUNT_OF_WORKER ("mount") #define METHOD_OF_WORKER ("method") #define IS_WORKER_DISABLED ("disabled") +#define IS_WORKER_STOPPED ("stopped") #define WORKER_RECOVER_TIME ("recover_time") @@ -689,6 +690,20 @@ return rc; } +int jk_get_is_worker_stopped(jk_map_t *m, const char *wname) +{ + int rc = JK_TRUE; + char buf[1024]; + if (m && wname) { + int value; + sprintf(buf, PREFIX_OF_WORKER ".%s.%s", wname, IS_WORKER_STOPPED); + value = jk_map_get_bool(m, buf, 0); + if (!value) + rc = JK_FALSE; + } + return rc; +} + void jk_set_log_format(const char *logformat) { jk_log_fmt = (logformat) ? logformat : JK_TIME_FORMAT; @@ -1004,6 +1019,7 @@ MOUNT_OF_WORKER, METHOD_OF_WORKER, IS_WORKER_DISABLED, + IS_WORKER_STOPPED, WORKER_RECOVER_TIME, SECRET_KEY_OF_WORKER, RETRIES_OF_WORKER, 1.32 +3 -1 jakarta-tomcat-connectors/jk/native/common/jk_util.h Index: jk_util.h =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_util.h,v retrieving revision 1.31 retrieving revision 1.32 diff -u -r1.31 -r1.32 --- jk_util.h 21 Apr 2005 10:36:58 -0000 1.31 +++ jk_util.h 26 Apr 2005 15:28:18 -0000 1.32 @@ -84,6 +84,8 @@ int jk_get_is_worker_disabled(jk_map_t *m, const char *wname); +int jk_get_is_worker_stopped(jk_map_t *m, const char *wname); + void jk_set_log_format(const char *logformat); int jk_get_worker_list(jk_map_t *m, char ***list, unsigned *num_of_wokers);
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]