コード例 #1
0
ファイル: spx_module.c プロジェクト: alxbean/dfs
spx_private err_t spx_thread_context_free(void **arg){/*{{{*/
    struct spx_thread_context **tc = (struct spx_thread_context **) arg;
    ev_break((*tc)->loop,EVBREAK_ALL);
    ev_loop_destroy((*tc)->loop);
    SpxClose((*tc)->pipe[0]);
    SpxClose((*tc)->pipe[1]);
    SpxFree(*tc);
    return 0;
}/*}}}*/
コード例 #2
0
ファイル: spx_nio_threadpool.c プロジェクト: alxbean/dfs
spx_private err_t spx_nio_thread_context_free(void **arg){
    struct spx_nio_thread_context **context = (struct spx_nio_thread_context **) arg;
    ev_break((*context)->loop,EVBREAK_ALL);
    ev_loop_destroy((*context)->loop);
    SpxClose((*context)->pipe[0]);
    SpxClose((*context)->pipe[1]);
    SpxFree(*context);
    return 0;
}
コード例 #3
0
ファイル: ydb_storage_syncquery.c プロジェクト: xvhfeng/ydb
spx_private err_t ydb_storage_query_remote(SpxLogDelegate *log,
        struct ydb_tracker *t,string_t groupname,
        string_t machineid,string_t syncgroup){/*{{{*/
    err_t err = 0;
    struct spx_job_context *sjc = t->sjc;
    int fd = spx_socket_new(&err);
    if(0 >= fd){
        SpxLog2(log,SpxLogError,err,"create query sync socket fd is fail.");
        return err;
    }
    if(0 != (err = spx_set_nb(fd))){
        SpxLog2(log,SpxLogError,err,"set socket nonblacking is fail.");
        goto r1;
    }
    if(0 != (err = spx_socket_set(fd,SpxKeepAlive,SpxAliveTimeout,\
                    SpxDetectTimes,SpxDetectTimeout,\
                    SpxLinger,SpxLingerTimeout,\
                    SpxNodelay,\
                    true,30))){
        SpxLog2(log,SpxLogError,err,"set socket operator is fail.");
        goto r1;
    }
    if(0 != (err = spx_socket_connect(fd,t->host.ip,t->host.port))){
        SpxLogFmt2(log,SpxLogError,err,\
                "conntect to tracker:%s:%d is fail.",\
                t->host.ip,t->host.port);

        goto r1;
    }

    struct spx_msg_header *writer_header = NULL;
    writer_header = spx_alloc_alone(sizeof(*writer_header),&err);
    if(NULL == writer_header){
        SpxLog2(log,SpxLogError,err,\
                "alloc writer header is fail.");
        goto r1;
    }
    sjc->writer_header = writer_header;
    writer_header->version = YDB_VERSION;
    writer_header->protocol = YDB_QUERY_SYNC_STORAGES;
    writer_header->bodylen = YDB_GROUPNAME_LEN + YDB_MACHINEID_LEN \
                             + YDB_SYNCGROUP_LEN ;
    struct spx_msg *ctx = spx_msg_new(writer_header->bodylen,&err);
    if(NULL == ctx){
        SpxLog2(log,SpxLogError,err,\
                "alloc writer body is fail.");
        goto r1;
    }
    sjc->writer_body_ctx = ctx;
    spx_msg_pack_fixed_string(ctx,groupname,YDB_GROUPNAME_LEN);
    spx_msg_pack_fixed_string(ctx,machineid,YDB_MACHINEID_LEN);
    spx_msg_pack_fixed_string(ctx,syncgroup,YDB_SYNCGROUP_LEN);

    sjc->fd = fd;
    spx_nio_regedit_writer(sloop,sjc->fd,sjc);
    return err;
r1:
    SpxClose(fd);
    return err;
}/*}}}*/
コード例 #4
0
ファイル: logdb_server.c プロジェクト: alxbean/dfs
spx_private void CloseCTX(struct server_context *ctx){
        if (NULL == ctx){
            printf("ctx is NULL\n");
            return;
        }

        SpxClose(ctx->fd);
        CTXPush(ctx);
}
コード例 #5
0
spx_private void idcreatorServerContextClear(struct IdcreatorServerContext *isc){/*{{{*/
    if(NULL != isc->client_ip){
        SpxStringFree(isc->client_ip);
    }

    isc->err = 0;
    isc->moore = SpxNioMooreNormal;
    isc->loop = NULL;
    memset(isc->inbuf,0,SpxMsgHeaderSize + sizeof(i32_t));
    memset(isc->outbuf,0,SpxMsgHeaderSize + sizeof(u64_t));
    memset(&(isc->inheader),0,sizeof(isc->inheader));
    memset(&(isc->outheader),0,sizeof(isc->outheader));
    isc->offset = 0;
    if(0 < isc->fd){
        SpxClose(isc->fd);
    }
}/*}}}*/
コード例 #6
0
ファイル: logdb_server.c プロジェクト: alxbean/dfs
spx_private void * CreateMainSocket(void *arg){/*{{{*/
    struct server_config * conf = (struct server_config *) arg;
    SpxLogDelegate *log = conf->log;
    err_t err = 0;
    
    main_socket_loop = ev_loop_new(0);
    if(NULL == main_socket_loop){
        SpxLog2(log, SpxLogError, err, "create main socket loop is fail.");
        goto r1;
    }

    int mainsocket = spx_socket_new(&err);
    if(0 == mainsocket){
        SpxLog2(log, SpxLogError, err, "create main socket is fail.");
        goto r1;
    }

    if( 0 != (err = spx_set_nb(mainsocket))){
        SpxLog2(log, SpxLogError, err, "set main socket nonblock is fail.");
    }

    if( 0 != (err = spx_socket_start(mainsocket, conf->ip, conf->port,\
                                     true, conf->timeout,\
                                     3, conf->timeout,\
                                     false, 0,\
                                     true,\
                                     true, conf->timeout,
                                     1024))){
        SpxLog2(log, SpxLogError, err, "start main socket is fail.");
        goto r1;
    }

    SpxLogFmt1(log, SpxLogMark,
               "main socket fd: %d"
               "and accepting...",
               mainsocket);

    RegisterIOWatcher(&monitor_watcher, mainsocket, Reciver, EV_READ, log);
    ev_io_start(main_socket_loop, &monitor_watcher); 

    ev_run(main_socket_loop, 0);
r1:
    SpxClose(mainsocket);
    return NULL;
}/*}}}*/
コード例 #7
0
ファイル: ydb_storage_delete.c プロジェクト: xvhfeng/ydb
err_t ydb_storage_dio_delete_context_from_chunkfile(
        struct ydb_storage_configurtion *c,
        string_t fname,
        u64_t cbegin,
        u64_t ctotalsize,
        u32_t copver,
        u32_t cver,
        u64_t clastmodifytime,
        u64_t crealsize,
        u64_t lastmodifytime){/*{{{*/
    err_t err = 0;
    struct spx_msg *ioctx = NULL;
    int fd = 0;
    char *mptr = NULL;
    string_t io_suffix = NULL;
    string_t io_hashcode = NULL;

    bool_t io_isdelete = false;
    u32_t io_opver = 0;
    u32_t io_ver = 0;
    u64_t io_createtime = 0;
    u64_t io_lastmodifytime = 0;
    u64_t io_totalsize = 0;
    u64_t io_realsize = 0;


    u32_t unit = (int) cbegin / c->pagesize;
    u64_t begin = unit * c->pagesize;
    u64_t offset = cbegin - begin;
    u64_t len = offset + ctotalsize;

    fd = open(fname,O_RDWR,SpxFileMode);
    if(0 == fd){
        err = errno;
        SpxLogFmt2(c->log,SpxLogError,err,\
                "open chunkfile:%s is fail.",
                fname);
        goto r1;
    }

    mptr = mmap(NULL,\
            len,PROT_READ | PROT_WRITE ,\
            MAP_SHARED,fd,begin);
    if(MAP_FAILED == mptr){
        err = errno;
        SpxLogFmt2(c->log,SpxLogError,err,\
                "mmap chunkfile:%s with begin:%lld,length:%lld is fail.",
                fname,begin,len);
        goto r1;
    }

    ioctx = spx_msg_new(YDB_CHUNKFILE_MEMADATA_SIZE,&err);
    if(NULL == ioctx){
        SpxLog2(c->log,SpxLogError,err,\
                "alloc metedata ioctx is fail.");
        goto r1;
    }

    if(0 != (err = spx_msg_pack_ubytes(ioctx,
                    ((ubyte_t *) (mptr+ offset)),
                    YDB_CHUNKFILE_MEMADATA_SIZE))){
        SpxLog2(c->log,SpxLogError,err,\
                "read metedata to ioctx is fail.");
        goto r1;
    }

    spx_msg_seek(ioctx,0,SpxMsgSeekSet);

    err = ydb_storage_dio_parser_metadata(c->log,ioctx,
            &io_isdelete,&io_opver,
            &io_ver,&io_createtime,
            &io_lastmodifytime,&io_totalsize,&io_realsize,
            &io_suffix,&io_hashcode);
    if(0 != err){
        SpxLog2(c->log,SpxLogError,err,\
                "unpack metedate ioctx is fail.");
        goto r1;
    }

    if(io_isdelete){
        SpxLogFmt1(c->log,SpxLogError,
                "the file in the chunkfile:%s "
                "with begin:%lld totalsize:%lld is deleted.",
                fname,cbegin,ctotalsize);
        err = ENOENT;
        goto r1;
    }
    if(copver != io_opver || cver != io_ver
            || clastmodifytime != io_lastmodifytime
            || ctotalsize != io_totalsize
            || crealsize != io_realsize){
        SpxLogFmt1(c->log,SpxLogError,
                "the file in the chunkfile:%s "
                "with begin:%lld totalsize:%lld is not the deleting-file.",
                fname,cbegin,ctotalsize);
        err = ENOENT;
        goto r1;
    }

    spx_msg_seek(ioctx,0,SpxMsgSeekSet);
    spx_msg_pack_true(ioctx);//isdelete
    spx_msg_pack_u32(ioctx,copver + 1);
    spx_msg_pack_u32(ioctx,YDB_VERSION);
    spx_msg_seek(ioctx,sizeof(u64_t),SpxMsgSeekCurrent);//jump createtime
    spx_msg_pack_u64(ioctx,lastmodifytime);

    memcpy(mptr + offset,ioctx->buf,YDB_CHUNKFILE_MEMADATA_SIZE);

r1:
    if(NULL != ioctx){
        SpxMsgFree(ioctx);
    }
    if(NULL != mptr){
        munmap(mptr,len);
    }
    if(0 < fd){
        SpxClose(fd);
    }
    if(NULL != io_hashcode){
        SpxStringFree(io_hashcode);
    }
    if(NULL != io_suffix){
        SpxStringFree(io_suffix);
    }
    return err;
}/*}}}*/
コード例 #8
0
ファイル: spx_web_server.c プロジェクト: alxbean/dfs
spx_private void CloseCTX(struct server_context *ctx){
        SpxClose(ctx->fd);
        CTXPush(ctx);
}