Exemplo n.º 1
0
static rstatus_t
stats_start_aggregator(struct stats *st)
{
    rstatus_t status;

    if (!stats_enabled) {
        return NC_OK;
    }

    status = stats_listen(st);
    if (status != NC_OK) {
        return status;
    }

    st->st_evb = evbase_create(1, NULL);
    if (st->st_evb == NULL) {
        log_error("stats aggregator create failed: %s", strerror(errno));
        return NC_ERROR;
    }

    ASSERT(st->st_evb != NULL);
    ASSERT(st->sd >= 0);

    status = event_add_st(st->st_evb, st->sd);
    if (status < 0) {
        log_error("stats aggregator create failed: %s", strerror(errno));
        evbase_destroy(st->st_evb);
        st->st_evb = NULL;
        return NC_ERROR;
    }

    status = pthread_create(&st->tid, NULL, stats_loop, st);
    if (status < 0) {
        log_error("stats aggregator create failed: %s", strerror(status));
        evbase_destroy(st->st_evb);
        st->st_evb = NULL;
        return NC_ERROR;
    }

    return NC_OK;
}
//stats状态信息专门起一个线程来处理
static rstatus_t
stats_start_aggregator(struct stats *st)
{
    rstatus_t status;

    if (!stats_enabled) {
        return NC_OK;
    }

    status = stats_listen(st);
    if (status != NC_OK) {
        return status;
    }

    status = pthread_create(&st->tid, NULL, stats_loop, st);
    if (status < 0) {
        log_error("stats aggregator create failed: %s", strerror(status));
        return NC_ERROR;
    }

    return NC_OK;
}
Exemplo n.º 3
0
static rstatus_t
stats_start_aggregator(struct stats *st)
{
    rstatus_t status;
    struct epoll_event ev;

    if (!stats_enabled) {
        return NC_OK;
    }

    status = stats_listen(st);
    if (status != NC_OK) {
        return status;
    }

    st->ep = epoll_create(10);
    if (st->ep < 0) {
        log_error("epoll create failed: %s", strerror(errno));
        return NC_ERROR;
    }

    ev.data.fd = st->sd;
    ev.events = EPOLLIN;

    status = epoll_ctl(st->ep, EPOLL_CTL_ADD, st->sd, &ev);
    if (status < 0) {
        log_error("epoll ctl on e %d sd %d failed: %s", st->ep, st->sd,
                  strerror(errno));
        return NC_ERROR;
    }

    status = pthread_create(&st->tid, NULL, stats_loop, st);
    if (status < 0) {
        log_error("stats aggregator create failed: %s", strerror(status));
        return NC_ERROR;
    }

    return NC_OK;
}