You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by rj...@apache.org on 2007/01/28 14:38:51 UTC
svn commit: r500791 - in /tomcat/connectors/trunk/jk:
native/common/jk_status.c xdocs/miscellaneous/changelog.xml
Author: rjung
Date: Sun Jan 28 05:38:50 2007
New Revision: 500791
URL: http://svn.apache.org/viewvc?view=rev&rev=500791
Log:
Refactoring searching for workers and sub workers in status worker.
Modified:
tomcat/connectors/trunk/jk/native/common/jk_status.c
tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml
Modified: tomcat/connectors/trunk/jk/native/common/jk_status.c
URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_status.c?view=diff&rev=500791&r1=500790&r2=500791
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_status.c (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_status.c Sun Jan 28 05:38:50 2007
@@ -1009,6 +1009,153 @@
return JK_TRUE;
}
+static int fetch_worker_and_sub_worker(status_endpoint_t *p,
+ const char *operation,
+ const char **worker,
+ const char **sub_worker,
+ jk_logger_t *l)
+{
+ status_worker_t *w = p->worker;
+
+ JK_TRACE_ENTER(l);
+ status_get_string(p, JK_STATUS_ARG_WORKER, NULL, worker, l);
+ status_get_string(p, JK_STATUS_ARG_SUB_WORKER, NULL, sub_worker, l);
+ if (JK_IS_DEBUG_LEVEL(l))
+ jk_log(l, JK_LOG_DEBUG,
+ "Status worker '%s' %s worker '%s' sub worker '%s'",
+ w->name, operation,
+ *worker ? *worker : "(null)", *sub_worker ? *sub_worker : "(null)");
+ JK_TRACE_EXIT(l);
+ return JK_TRUE;
+}
+
+static int check_valid_lb(jk_ws_service_t *s,
+ status_endpoint_t *p,
+ jk_worker_t *jw,
+ const char *worker,
+ lb_worker_t **lbp,
+ int implemented,
+ jk_logger_t *l)
+{
+ status_worker_t *w = p->worker;
+
+ JK_TRACE_ENTER(l);
+ if (jw->type != JK_LB_WORKER_TYPE) {
+ if (implemented) {
+ jk_log(l, JK_LOG_WARNING,
+ "Status worker '%s' worker type of worker '%s' has no sub workers",
+ w->name, worker);
+ p->msg = "worker type has no sub workers";
+ }
+ else {
+ jk_log(l, JK_LOG_WARNING,
+ "Status worker '%s' worker type of worker '%s' not implemented",
+ w->name, worker);
+ p->msg = "worker type not implemented";
+ }
+ JK_TRACE_EXIT(l);
+ return JK_FALSE;
+ }
+ *lbp = (lb_worker_t *)jw->worker_private;
+ if (!*lbp) {
+ jk_log(l, JK_LOG_WARNING,
+ "Status worker '%s' lb structure of worker '%s' is (null)",
+ w->name, worker);
+ p->msg = "lb structure is (null)";
+ JK_TRACE_EXIT(l);
+ return JK_FALSE;
+ }
+ p->msg = "OK";
+ JK_TRACE_EXIT(l);
+ return JK_TRUE;
+}
+
+static int search_worker(jk_ws_service_t *s,
+ status_endpoint_t *p,
+ jk_worker_t **jwp,
+ const char *worker,
+ jk_logger_t *l)
+{
+ status_worker_t *w = p->worker;
+
+ JK_TRACE_ENTER(l);
+ *jwp = NULL;
+ if (JK_IS_DEBUG_LEVEL(l))
+ jk_log(l, JK_LOG_DEBUG,
+ "Status worker '%s' searching worker '%s'",
+ w->name, worker ? worker : "(null)");
+ if (!worker || !worker[0]) {
+ jk_log(l, JK_LOG_WARNING,
+ "Status worker '%s' NULL or EMPTY worker param",
+ w->name);
+ p->msg = "NULL or EMPTY worker param";
+ JK_TRACE_EXIT(l);
+ return JK_FALSE;
+ }
+ *jwp = wc_get_worker_for_name(worker, l);
+ if (!*jwp) {
+ jk_log(l, JK_LOG_WARNING,
+ "Status worker '%s' could not find worker '%s'",
+ w->name, worker);
+ p->msg = "Could not find given worker";
+ JK_TRACE_EXIT(l);
+ return JK_FALSE;
+ }
+ p->msg = "OK";
+ JK_TRACE_EXIT(l);
+ return JK_TRUE;
+}
+
+static int search_sub_worker(jk_ws_service_t *s,
+ status_endpoint_t *p,
+ jk_worker_t *jw,
+ const char *worker,
+ worker_record_t **wrp,
+ const char *sub_worker,
+ jk_logger_t *l)
+{
+ lb_worker_t *lb = NULL;
+ worker_record_t *wr = NULL;
+ status_worker_t *w = p->worker;
+ unsigned int i;
+
+ JK_TRACE_ENTER(l);
+ if (JK_IS_DEBUG_LEVEL(l))
+ jk_log(l, JK_LOG_DEBUG,
+ "Status worker '%s' searching sub worker '%s' of worker '%s'",
+ w->name, sub_worker ? sub_worker : "(null)",
+ worker ? worker : "(null)");
+ if (!sub_worker || !sub_worker[0]) {
+ jk_log(l, JK_LOG_WARNING,
+ "Status worker '%s' NULL or EMPTY sub_worker param",
+ w->name);
+ p->msg = "NULL or EMPTY sub_worker param";
+ JK_TRACE_EXIT(l);
+ return JK_FALSE;
+ }
+ if (check_valid_lb(s, p, jw, worker, &lb, 1, l) == JK_FALSE) {
+ JK_TRACE_EXIT(l);
+ return JK_FALSE;
+ }
+ for (i = 0; i < (int)lb->num_of_workers; i++) {
+ wr = &(lb->lb_workers[i]);
+ if (strcmp(sub_worker, wr->s->name) == 0)
+ break;
+ }
+ *wrp = wr;
+ if (!wr || i == (int)lb->num_of_workers) {
+ jk_log(l, JK_LOG_WARNING,
+ "Status worker '%s' could not find sub worker '%s' of worker '%s'",
+ w->name, sub_worker, worker ? worker : "(null)");
+ p->msg = "could not find sub worker";
+ JK_TRACE_EXIT(l);
+ return JK_FALSE;
+ }
+ p->msg = "OK";
+ JK_TRACE_EXIT(l);
+ return JK_TRUE;
+}
+
static int count_maps(jk_ws_service_t *s,
const char *worker,
jk_logger_t *l)
@@ -2351,61 +2498,18 @@
{
const char *worker;
const char *sub_worker;
- unsigned int i;
jk_worker_t *jw = NULL;
+ worker_record_t *wr = NULL;
JK_TRACE_ENTER(l);
- status_get_string(p, JK_STATUS_ARG_WORKER, NULL, &worker, l);
- status_get_string(p, JK_STATUS_ARG_SUB_WORKER, NULL, &sub_worker, l);
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "checking worker '%s' sub worker '%s'",
- worker ? worker : "(null)", sub_worker ? sub_worker : "(null)");
- if (!worker || !worker[0]) {
- jk_log(l, JK_LOG_WARNING,
- "NULL or EMPTY worker param");
- p->msg = "NULL or EMPTY worker param";
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- jw = wc_get_worker_for_name(worker, l);
- if (!jw) {
- jk_log(l, JK_LOG_WARNING,
- "could not find worker '%s'",
- worker);
- p->msg = "Could not find given worker";
+ fetch_worker_and_sub_worker(p, "checking", &worker, &sub_worker, l);
+ if (search_worker(s, p, &jw, worker, l) == JK_FALSE) {
JK_TRACE_EXIT(l);
return JK_FALSE;
}
+
if (sub_worker && sub_worker[0]) {
- lb_worker_t *lb = NULL;
- worker_record_t *wr = NULL;
- if (jw->type != JK_LB_WORKER_TYPE) {
- jk_log(l, JK_LOG_WARNING,
- "worker type of worker '%s' has no sub workers",
- worker);
- p->msg = "worker type has no sub workers";
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- lb = (lb_worker_t *)jw->worker_private;
- if (!lb) {
- jk_log(l, JK_LOG_WARNING,
- "lb structure is (null)");
- p->msg = "lb structure is (null)";
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- for (i = 0; i < (int)lb->num_of_workers; i++) {
- wr = &(lb->lb_workers[i]);
- if (strcmp(sub_worker, wr->s->name) == 0)
- break;
- }
- if (!wr || i == (int)lb->num_of_workers) {
- jk_log(l, JK_LOG_WARNING,
- "could not find sub worker '%s'",
- sub_worker);
- p->msg = "could not find sub worker";
+ if(search_sub_worker(s, p, jw, worker, &wr, sub_worker, l) == JK_FALSE) {
JK_TRACE_EXIT(l);
return JK_FALSE;
}
@@ -2605,23 +2709,8 @@
jk_worker_t *jw = NULL;
JK_TRACE_ENTER(l);
- status_get_string(p, JK_STATUS_ARG_WORKER, "", &worker, l);
- status_get_string(p, JK_STATUS_ARG_SUB_WORKER, "", &sub_worker, l);
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "showing worker '%s' sub worker '%s'",
- worker ? worker : "(null)", sub_worker ? sub_worker : "(null)");
- if (!worker || !worker[0]) {
- jk_log(l, JK_LOG_WARNING,
- "NULL or EMPTY worker param");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- jw = wc_get_worker_for_name(worker, l);
- if (!jw) {
- jk_log(l, JK_LOG_WARNING,
- "could not find worker '%s'",
- worker);
+ fetch_worker_and_sub_worker(p, "showing", &worker, &sub_worker, l);
+ if (search_worker(s, p, &jw, worker, l) == JK_FALSE) {
JK_TRACE_EXIT(l);
return JK_FALSE;
}
@@ -2636,32 +2725,18 @@
status_endpoint_t *p,
jk_logger_t *l)
{
- unsigned int i;
const char *worker;
const char *sub_worker;
jk_worker_t *jw = NULL;
+ status_worker_t *w = p->worker;
JK_TRACE_ENTER(l);
- status_get_string(p, JK_STATUS_ARG_WORKER, "", &worker, l);
- status_get_string(p, JK_STATUS_ARG_SUB_WORKER, "", &sub_worker, l);
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "editing worker '%s' sub worker '%s'",
- worker ? worker : "(null)", sub_worker ? sub_worker : "(null)");
- if (!worker || !worker[0]) {
- jk_log(l, JK_LOG_WARNING,
- "NULL or EMPTY worker param");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- jw = wc_get_worker_for_name(worker, l);
- if (!jw) {
- jk_log(l, JK_LOG_WARNING,
- "could not find worker '%s'",
- worker);
+ fetch_worker_and_sub_worker(p, "editing", &worker, &sub_worker, l);
+ if (search_worker(s, p, &jw, worker, l) == JK_FALSE) {
JK_TRACE_EXIT(l);
return JK_FALSE;
}
+
if (!sub_worker || !sub_worker[0]) {
const char *arg;
@@ -2672,7 +2747,6 @@
form_worker(s, p, jw, l);
}
else {
- lb_worker_t *lb = NULL;
worker_record_t *wr = NULL;
if (jw->type != JK_LB_WORKER_TYPE) {
jk_log(l, JK_LOG_WARNING,
@@ -2680,26 +2754,11 @@
JK_TRACE_EXIT(l);
return JK_FALSE;
}
- lb = (lb_worker_t *)jw->worker_private;
- if (!lb) {
- jk_log(l, JK_LOG_WARNING,
- "lb structure is (null)");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- for (i = 0; i < (int)lb->num_of_workers; i++) {
- wr = &(lb->lb_workers[i]);
- if (strcmp(sub_worker, wr->s->name) == 0)
- break;
- }
- if (!wr || i == (int)lb->num_of_workers) {
- jk_log(l, JK_LOG_WARNING,
- "could not find worker '%s'",
- sub_worker);
+ if(search_sub_worker(s, p, jw, worker, &wr, sub_worker, l) == JK_FALSE) {
JK_TRACE_EXIT(l);
return JK_FALSE;
}
- form_member(s, p, wr, lb->s->name, l);
+ form_member(s, p, wr, worker, l);
}
JK_TRACE_EXIT(l);
return JK_TRUE;
@@ -2709,33 +2768,17 @@
status_endpoint_t *p,
jk_logger_t *l)
{
- unsigned int i;
const char *worker;
const char *sub_worker;
jk_worker_t *jw = NULL;
JK_TRACE_ENTER(l);
- status_get_string(p, JK_STATUS_ARG_WORKER, "", &worker, l);
- status_get_string(p, JK_STATUS_ARG_SUB_WORKER, "", &sub_worker, l);
-
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "updating worker '%s' sub worker '%s'",
- worker ? worker : "(null)", sub_worker ? sub_worker : "(null)");
- if (!worker || !worker[0]) {
- jk_log(l, JK_LOG_WARNING,
- "NULL or EMPTY worker param");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- jw = wc_get_worker_for_name(worker, l);
- if (!jw) {
- jk_log(l, JK_LOG_WARNING,
- "could not find worker '%s'",
- worker);
+ fetch_worker_and_sub_worker(p, "updating", &worker, &sub_worker, l);
+ if (search_worker(s, p, &jw, worker, l) == JK_FALSE) {
JK_TRACE_EXIT(l);
return JK_FALSE;
}
+
if (!sub_worker || !sub_worker[0]) {
const char *arg;
@@ -2749,28 +2792,11 @@
lb_worker_t *lb = NULL;
worker_record_t *wr = NULL;
int rc = 0;
- if (jw->type != JK_LB_WORKER_TYPE) {
- jk_log(l, JK_LOG_WARNING,
- "worker type not implemented");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- lb = (lb_worker_t *)jw->worker_private;
- if (!lb) {
- jk_log(l, JK_LOG_WARNING,
- "lb structure is (null)");
+ if (check_valid_lb(s, p, jw, worker, &lb, 0, l) == JK_FALSE) {
JK_TRACE_EXIT(l);
return JK_FALSE;
}
- for (i = 0; i < (int)lb->num_of_workers; i++) {
- wr = &(lb->lb_workers[i]);
- if (strcmp(sub_worker, wr->s->name) == 0)
- break;
- }
- if (!wr || i == (int)lb->num_of_workers) {
- jk_log(l, JK_LOG_WARNING,
- "could not find worker '%s'",
- sub_worker);
+ if(search_sub_worker(s, p, jw, worker, &wr, sub_worker, l) == JK_FALSE) {
JK_TRACE_EXIT(l);
return JK_FALSE;
}
@@ -2792,41 +2818,18 @@
unsigned int i;
const char *worker;
const char *sub_worker;
- lb_worker_t *lb;
jk_worker_t *jw = NULL;
+ lb_worker_t *lb = NULL;
worker_record_t *wr = NULL;
JK_TRACE_ENTER(l);
- status_get_string(p, JK_STATUS_ARG_WORKER, "", &worker, l);
- status_get_string(p, JK_STATUS_ARG_SUB_WORKER, "", &sub_worker, l);
- jk_log(l, JK_LOG_INFO,
- "resetting worker '%s' sub worker '%s'",
- worker ? worker : "(null)", sub_worker ? sub_worker : "(null)");
- if (!worker || !worker[0]) {
- jk_log(l, JK_LOG_WARNING,
- "NULL or EMPTY worker param");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- jw = wc_get_worker_for_name(worker, l);
- if (!jw) {
- jk_log(l, JK_LOG_WARNING,
- "could not find worker '%s'",
- worker);
+ fetch_worker_and_sub_worker(p, "resetting", &worker, &sub_worker, l);
+ if (search_worker(s, p, &jw, worker, l) == JK_FALSE) {
JK_TRACE_EXIT(l);
return JK_FALSE;
}
/* XXX Until now, we only have something to reset for lb workers or their members */
- if (jw->type != JK_LB_WORKER_TYPE) {
- jk_log(l, JK_LOG_WARNING,
- "worker type not implemented");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- lb = (lb_worker_t *)jw->worker_private;
- if (!lb) {
- jk_log(l, JK_LOG_WARNING,
- "lb structure is (null)");
+ if (check_valid_lb(s, p, jw, worker, &lb, 0, l) == JK_FALSE) {
JK_TRACE_EXIT(l);
return JK_FALSE;
}
@@ -2852,15 +2855,7 @@
return JK_TRUE;
}
else {
- for (i = 0; i < (int)lb->num_of_workers; i++) {
- wr = &(lb->lb_workers[i]);
- if (strcmp(sub_worker, wr->s->name) == 0)
- break;
- }
- if (!wr || i == (int)lb->num_of_workers) {
- jk_log(l, JK_LOG_WARNING,
- "could not find worker '%s'",
- sub_worker);
+ if(search_sub_worker(s, p, jw, worker, &wr, sub_worker, l) == JK_FALSE) {
JK_TRACE_EXIT(l);
return JK_FALSE;
}
@@ -2887,66 +2882,23 @@
status_endpoint_t *p,
jk_logger_t *l)
{
- unsigned int i;
const char *worker;
const char *sub_worker;
- lb_worker_t *lb;
jk_worker_t *jw = NULL;
worker_record_t *wr = NULL;
JK_TRACE_ENTER(l);
- status_get_string(p, JK_STATUS_ARG_WORKER, "", &worker, l);
- status_get_string(p, JK_STATUS_ARG_SUB_WORKER, "", &sub_worker, l);
- jk_log(l, JK_LOG_INFO,
- "recovering worker '%s' sub worker '%s'",
- worker ? worker : "(null)", sub_worker ? sub_worker : "(null)");
- if (!worker || !worker[0]) {
- jk_log(l, JK_LOG_WARNING,
- "NULL or EMPTY worker param");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- jw = wc_get_worker_for_name(worker, l);
- if (!jw) {
- jk_log(l, JK_LOG_WARNING,
- "could not find worker '%s'",
- worker);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- if (jw->type != JK_LB_WORKER_TYPE) {
- jk_log(l, JK_LOG_WARNING,
- "worker type not implemented");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- lb = (lb_worker_t *)jw->worker_private;
- if (!lb) {
- jk_log(l, JK_LOG_WARNING,
- "lb structure is (null)");
+ fetch_worker_and_sub_worker(p, "recovering", &worker, &sub_worker, l);
+ if (search_worker(s, p, &jw, worker, l) == JK_FALSE) {
JK_TRACE_EXIT(l);
return JK_FALSE;
}
- if (!sub_worker || !sub_worker[0]) {
- jk_log(l, JK_LOG_WARNING,
- "only lb sub workers can be recovered");
+ if(search_sub_worker(s, p, jw, worker, &wr, sub_worker, l) == JK_FALSE) {
JK_TRACE_EXIT(l);
return JK_FALSE;
}
- for (i = 0; i < (int)lb->num_of_workers; i++) {
- wr = &(lb->lb_workers[i]);
- if (strcmp(sub_worker, wr->s->name) == 0)
- break;
- }
- if (!wr || i == (int)lb->num_of_workers) {
- jk_log(l, JK_LOG_WARNING,
- "could not find worker '%s'",
- sub_worker);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
if (wr->s->state == JK_LB_STATE_ERROR) {
wr->s->state = JK_LB_STATE_RECOVER;
JK_TRACE_EXIT(l);
Modified: tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml?view=diff&rev=500791&r1=500790&r2=500791
==============================================================================
--- tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml (original)
+++ tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml Sun Jan 28 05:38:50 2007
@@ -27,6 +27,9 @@
<subsection name="Native">
<changelog>
<add>
+ JkStatus: Refactoring searching for workers and sub workers. (rjung)
+ </add>
+ <add>
<bug>41318</bug>: Add configuration to make status worker user
name checks case insensitive. (rjung)
</add>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org