static int reset_worker()

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;
}