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]