Exemplo n.º 1
0
/* set logger level */
void evbase_set_log_level(EVBASE *evbase, int level)
{
    if(evbase && evbase->logger)
    {
        LOGGER_SET_LEVEL(evbase->logger, level);
    }
    return ;
}
Exemplo n.º 2
0
/* set document basedir  */
int qindex_set_basedir(QINDEX *qindex, char *basedir)
{
    int i = 0, j = 0, taskid = 0;
    char path[Q_PATH_MAX];
    QTASK *tasks = NULL;
    struct stat st = {0};
    off_t size = 0;

    if(qindex)
    {
        strcpy(qindex->basedir, basedir);
        /* log */
        sprintf(path, "%s/%s", basedir, QINDEX_LOG_NAME);
        pmkdir(path);
        LOGGER_INIT(qindex->logger, path);
        LOGGER_SET_LEVEL(qindex->logger, qindex->log_level);
        /* xdict */
        sprintf(path, "%s/%s", basedir, QINDEX_XDICT_NAME);
        if((qindex->xdict = mmtrie_init(path)) == NULL)
        {
            fprintf(stderr, "Initialize xdict(%s) failed, %s\n", path, strerror(errno));
            _exit(-1);
            return -1;
        }
        /* mmqueue */
        sprintf(path, "%s/%s", basedir, QINDEX_MMQUEUE_NAME);
        qindex->mmqueue = mmqueue_init(path);
        /* db */
        sprintf(path, "%s/%s", basedir, QINDEX_DB_DIR);
        qindex->db = db_init(path, 0);
        /* update */
        sprintf(path, "%s/%s", basedir, QINDEX_UPDATE_DIR);
        qindex->update = db_init(path, 0);
        /* qstate */
        sprintf(path, "%s/%s", basedir, QINDEX_STATE_NAME);
        if((qindex->qstatefd = open(path, O_CREAT|O_RDWR, 0644)) <= 0)
        {
            fprintf(stderr, "open state file(%s) failed, %s\n", path, strerror(errno));
            _exit(-1);
        }
        else
        {
            fstat(qindex->qstatefd, &st);
            if(st.st_size < sizeof(QSTATE))
            {
                if(ftruncate(qindex->qstatefd, 0) != 0
                        || ftruncate(qindex->qstatefd, sizeof(QSTATE)) != 0)_exit(-1);
            }
            if((qindex->state = (QSTATE *)mmap(NULL, sizeof(QSTATE), PROT_READ|PROT_WRITE,
                    MAP_SHARED, qindex->qstatefd, 0)) == NULL || qindex->state == (void *)-1)
            {
                fprintf(stderr, "mmap state failed, %s\n", strerror(errno));
                _exit(-1);
            }
            if(st.st_size < sizeof(QSTATE)) memset(qindex->state, 0, sizeof(QSTATE));
            if(qindex->state->nnodes > 0)
            {
                for(i = 1; i < Q_NODE_MAX; i++)
                {
                    if(qindex->state->nodes[i].status > 0 && qindex->state->nodes[i].ntasks > 0
                            && (tasks = qindex->state->nodes[i].tasks))
                    {
                        for(j = 0; j < Q_TASKS_MAX; j++)
                        {
                            if(tasks[j].status > 0)
                            {
                                taskid = i * Q_TASKS_MAX + j;
                                iqueue_push(qindex->queue, taskid);
                            }
                        }
                    }
                }
            }
        }
        /* xpacket */
        sprintf(path, "%s/%s", basedir, QINDEX_XPACKET_NAME);
        if((qindex->xpacketio.fd = open(path, O_CREAT|O_RDWR, 0644)) > 0
                && fstat(qindex->xpacketio.fd, &st) == 0)
        {
            qindex->xpacketio.end = st.st_size;
            size = sizeof(XPACKET) * Q_XPACKET_MAX;
            if(st.st_size > size) size = st.st_size;
            if((qindex->xpacketio.map = (char *)mmap(NULL, size, PROT_READ|PROT_WRITE,
                            MAP_SHARED, qindex->xpacketio.fd, 0))
                    && qindex->xpacketio.map != (void *)-1)
            {
                qindex->xpacketio.size = size;
            }
            else
            {
                fprintf(stderr, "mmap xpacket file (%s) failed, %s\n", path, strerror(errno));
                _exit(-1);
            }
        }
        else
        {
            fprintf(stderr, "open xpacket file(%s) failed, %s\n", path, strerror(errno));
            _exit(-1);
        }
        /* block terms map */
        sprintf(path, "%s/%s", basedir, QINDEX_MAP_NAME);
        qindex->map = mmtrie_init(path);
        /* bsterm file */
        sprintf(path, "%s/%s", basedir, QINDEX_BSTERM_NAME);
        if((qindex->bstermio.fd = open(path, O_CREAT|O_RDWR, 0644)) > 0
                && fstat(qindex->bstermio.fd, &st) == 0)
        {
            qindex->bstermio.end = st.st_size;
            size = sizeof(BSTERM) * Q_BSTERM_MAX;
            if(st.st_size > size) size = st.st_size;
            if((qindex->bstermio.map = (char *)mmap(NULL, size, PROT_READ|PROT_WRITE,
                            MAP_SHARED, qindex->bstermio.fd, 0))
                    && qindex->bstermio.map != (void *)-1)
            {
                qindex->bstermio.size = size;
            }
            else
            {
                fprintf(stderr, "mmap bsterm file (%s) failed, %s\n", path, strerror(errno));
                _exit(-1);
            }
        }
        else
        {
            fprintf(stderr, "open bsterm file(%s) failed, %s\n", path, strerror(errno));
            _exit(-1);
        }
        /* name map */
        sprintf(path, "%s/%s", basedir, QINDEX_NODEMAP_NAME);
        qindex->namemap = mmtrie_init(path);
        /* id map */
        sprintf(path, "%s/%s", basedir, QINDEX_IDMAP_NAME);
        qindex->idmap = mmtree64_init(path);
        if(qindex->state->rootid == 0)
        {
            qindex->state->rootid = mmtree64_new_tree(qindex->idmap);
        }
        return 0;
    }
    return -1;
}