Author: mturk Date: Wed Jun 11 22:57:00 2008 New Revision: 666963 URL: http://svn.apache.org/viewvc?rev=666963&view=rev Log: Allow wildchar names for updating lb subworkers.
Modified: tomcat/connectors/trunk/jk/native/common/jk_status.c 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?rev=666963&r1=666962&r2=666963&view=diff ============================================================================== --- tomcat/connectors/trunk/jk/native/common/jk_status.c (original) +++ tomcat/connectors/trunk/jk/native/common/jk_status.c Wed Jun 11 22:57:00 2008 @@ -1303,12 +1303,13 @@ const char *worker, lb_sub_worker_t **wrp, const char *sub_worker, + unsigned int *idx, jk_logger_t *l) { lb_worker_t *lb = NULL; lb_sub_worker_t *wr = NULL; status_worker_t *w = p->worker; - unsigned int i; + unsigned int i = 0; JK_TRACE_ENTER(l); if (JK_IS_DEBUG_LEVEL(l)) @@ -1328,13 +1329,21 @@ JK_TRACE_EXIT(l); return JK_FALSE; } - for (i = 0; i < (int)lb->num_of_workers; i++) { + if (*idx) + i = *idx; + for (; i < lb->num_of_workers; i++) { wr = &(lb->lb_workers[i]); - if (strcmp(sub_worker, wr->name) == 0) + if (idx) { + if (jk_wildchar_match(wr->name, sub_worker, 0) == 0) { + *idx = i + 1; + break; + } + } + else if (strcmp(sub_worker, wr->name) == 0) break; } *wrp = wr; - if (!wr || i == (int)lb->num_of_workers) { + if (!wr || i == 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)"); @@ -3335,7 +3344,8 @@ } if (sub_worker && sub_worker[0]) { - if(search_sub_worker(s, p, jw, worker, &wr, sub_worker, l) == JK_FALSE) { + if(search_sub_worker(s, p, jw, worker, &wr, sub_worker, + NULL, l) == JK_FALSE) { JK_TRACE_EXIT(l); return JK_FALSE; } @@ -3595,7 +3605,8 @@ return JK_TRUE; } else { - if(search_sub_worker(s, p, jw, worker, &wr, sub_worker, l) == JK_FALSE) { + if(search_sub_worker(s, p, jw, worker, &wr, sub_worker, + NULL, l) == JK_FALSE) { JK_TRACE_EXIT(l); return JK_FALSE; } @@ -3690,26 +3701,44 @@ return JK_TRUE; } else { - if(search_sub_worker(s, p, jw, worker, &wr, sub_worker, l) == JK_FALSE) { - JK_TRACE_EXIT(l); - return JK_FALSE; - } - if (JK_IS_DEBUG_LEVEL(l)) - jk_log(l, JK_LOG_DEBUG, + unsigned int idx = 0; + unsigned int *wi = NULL; + + if (strchr(sub_worker, '*') || strchr(sub_worker, '?')) { + /* We have a wildchar matching rule */ + wi = &idx; + } + for (;;) { + if (search_sub_worker(s, p, jw, worker, &wr, sub_worker, + wi, l) == JK_FALSE) { + if (!idx) { + JK_TRACE_EXIT(l); + return JK_FALSE; + } + else { + /* We have found at least one match previously */ + break; + } + } + if (JK_IS_DEBUG_LEVEL(l)) + jk_log(l, JK_LOG_DEBUG, "Status worker '%s' %s lb worker '%s' sub worker '%s'", w->name, "updating", lb->name, wr->name); - aw = (ajp_worker_t *)wr->worker->worker_private; - rc = commit_member(s, p, lb, wr, aw, l); - if (rc) { - wr->sequence++; - lb->sequence++; - jk_lb_push(lb, l); + aw = (ajp_worker_t *)wr->worker->worker_private; + rc = commit_member(s, p, lb, wr, aw, l); + if (rc) { + wr->sequence++; + lb->sequence++; + jk_lb_push(lb, l); + } + if (rc & 1) + reset_lb_values(lb, l); + if (rc & 2) + /* Recalculate the load multiplicators wrt. lb_factor */ + update_mult(lb, l); + if (!wi) + break; } - if (rc & 1) - reset_lb_values(lb, l); - if (rc & 2) - /* Recalculate the load multiplicators wrt. lb_factor */ - update_mult(lb, l); JK_TRACE_EXIT(l); return JK_TRUE; } @@ -3798,7 +3827,8 @@ return JK_TRUE; } else { - if(search_sub_worker(s, p, jw, worker, &wr, sub_worker, l) == JK_FALSE) { + if(search_sub_worker(s, p, jw, worker, &wr, sub_worker, + NULL, l) == JK_FALSE) { JK_TRACE_EXIT(l); return JK_FALSE; } @@ -3874,7 +3904,8 @@ return JK_FALSE; } - if(search_sub_worker(s, p, jw, worker, &wr, sub_worker, l) == JK_FALSE) { + if(search_sub_worker(s, p, jw, worker, &wr, sub_worker, + NULL, l) == JK_FALSE) { JK_TRACE_EXIT(l); return JK_FALSE; } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]