in native/common/jk_status.c [4471:4592]
static int reset_worker(jk_ws_service_t *s,
status_endpoint_t *p,
jk_log_context_t *l)
{
unsigned int i;
const char *worker;
const char *sub_worker;
status_worker_t *w = p->worker;
jk_worker_t *jw = NULL;
lb_worker_t *lb = NULL;
lb_sub_worker_t *wr = NULL;
ajp_worker_t *aw = NULL;
time_t now = 0;
JK_TRACE_ENTER(l);
if (fetch_worker_and_sub_worker(p, "resetting", &worker, &sub_worker, l) == JK_FALSE ||
search_worker(s, p, &jw, worker, l) == JK_FALSE) {
JK_TRACE_EXIT(l);
return JK_FALSE;
}
now = time(NULL);
if (jw->type == JK_LB_WORKER_TYPE) {
if (check_valid_lb(s, p, jw, worker, &lb, 0, l) == JK_FALSE) {
JK_TRACE_EXIT(l);
return JK_FALSE;
}
if (!sub_worker || !sub_worker[0]) {
if (JK_IS_DEBUG_LEVEL(l))
jk_log(l, JK_LOG_DEBUG,
"Status worker '%s' %s lb worker '%s' with all sub workers",
w->name, "resetting", lb->name);
lb->s->max_busy = 0;
lb->s->last_reset = now;
for (i = 0; i < lb->num_of_workers; i++) {
wr = &(lb->lb_workers[i]);
aw = (ajp_worker_t *)wr->worker->worker_private;
wr->s->state = JK_LB_STATE_IDLE;
wr->s->elected_snapshot = 0;
wr->s->sessions = 0;
wr->s->first_error_time = 0;
wr->s->last_error_time = 0;
wr->s->errors = 0;
wr->s->lb_value = 0;
aw->s->used = 0;
aw->s->client_errors = 0;
aw->s->reply_timeouts = 0;
aw->s->transferred = 0;
aw->s->readed = 0;
aw->s->max_busy = 0;
aw->s->max_connected = 0;
aw->s->last_reset = now;
}
JK_TRACE_EXIT(l);
return JK_TRUE;
}
else {
if (search_sub_worker(s, p, jw, worker, &wr, sub_worker,
NULL, l) == JK_FALSE) {
JK_TRACE_EXIT(l);
return JK_FALSE;
}
if (JK_IS_DEBUG_LEVEL(l))
jk_log(l, JK_LOG_DEBUG,
"Status worker '%s' %s lb worker '%s' sub worker '%s'",
w->name, "resetting", lb->name, wr->name);
aw = (ajp_worker_t *)wr->worker->worker_private;
wr->s->state = JK_LB_STATE_IDLE;
wr->s->elected_snapshot = 0;
wr->s->sessions = 0;
wr->s->first_error_time = 0;
wr->s->last_error_time = 0;
wr->s->errors = 0;
wr->s->lb_value = 0;
aw->s->used = 0;
aw->s->client_errors = 0;
aw->s->reply_timeouts = 0;
aw->s->transferred = 0;
aw->s->readed = 0;
aw->s->max_busy = 0;
aw->s->max_connected = 0;
aw->s->last_reset = now;
JK_TRACE_EXIT(l);
return JK_TRUE;
}
}
else if (jw->type == JK_AJP13_WORKER_TYPE ||
jw->type == JK_AJP14_WORKER_TYPE) {
ajp_worker_t *aw = (ajp_worker_t *)jw->worker_private;
if (aw) {
if (JK_IS_DEBUG_LEVEL(l))
jk_log(l, JK_LOG_DEBUG,
"Status worker '%s' %s ajp worker '%s'",
w->name, "resetting", aw->name);
aw->s->errors = 0;
aw->s->used = 0;
aw->s->client_errors = 0;
aw->s->reply_timeouts = 0;
aw->s->transferred = 0;
aw->s->readed = 0;
aw->s->max_busy = 0;
aw->s->max_connected = 0;
aw->s->last_reset = now;
JK_TRACE_EXIT(l);
return JK_TRUE;
}
else {
jk_log(l, JK_LOG_WARNING,
"Status worker '%s' aw worker is (null)",
w->name);
}
}
else {
if (JK_IS_DEBUG_LEVEL(l))
jk_log(l, JK_LOG_DEBUG,
"Status worker '%s' worker type not implemented",
w->name);
}
JK_TRACE_EXIT(l);
return JK_FALSE;
}