コード例 #1
0
/* ==================== session_write_to_kvdb() ==================== */ 
int session_write_to_kvdb(session_t *session, object_t *object, msgidx_t *msgidx)
{
    vnode_t *vnode = get_vnode_by_key(SERVER(session), msgidx->key_md5);
    assert(vnode != NULL);

    object_put_into_kvdb(vnode->kvdb, object);

    object_queue_remove(vnode->caching_objects, object);
    session->total_writed = 0;

    return 0;
}
コード例 #2
0
ファイル: server_handle_write.c プロジェクト: uukuguy/legolas
/* ==================== server_write_to_storage() ==================== */ 
int server_write_to_storage(server_t *server, object_t *object)
{
    int ret = 0;


    if ( object != NULL ) {
        UNUSED vnode_t *vnode = get_vnode_by_key(server, &object->key_md5);
        assert(vnode != NULL);

        ret = vnode_write_to_storage(vnode, object);

    } else {
        ret = -1;
    }

    return ret;
}
コード例 #3
0
ファイル: server_handle_write.c プロジェクト: uukuguy/legolas
object_t *server_write_to_cache(session_t *session, msgidx_t *msgidx)
{

    vnode_t *vnode = get_vnode_by_key(SERVER(session), msgidx->key_md5);
    assert(vnode != NULL);
    object_queue_t *caching_objects = vnode->caching_objects;

    int blockid = msgidx->message->id;
    uint32_t object_size = msgidx->object_size; 
    const char *write_buf = msgidx->data;
    uint32_t write_bytes = msgidx->data_size;;

    object_t obj;
    memset(&obj, 0, sizeof(object_t));
    memcpy(&obj.key_md5, msgidx->key_md5, sizeof(md5_value_t));
    object_t *object = object_queue_find(caching_objects, &obj);
    /*object_t *object = object_queue_find(caching_objects, &msgidx->key_md5);*/

    if ( object == NULL ){
        object = object_new(msgidx->key, msgidx->keylen);
        object->object_size = object_size;

        if ( check_md5(&object->key_md5, msgidx->key_md5) != 0 ){
            error_log("Check md5 error. session(%d), block_id:%d, key:%s object->key:%s", session->id, blockid, msgidx->key, object->key);
            /*assert(1==0);*/
            object_free(object);
            return NULL;
        }

        object_queue_insert(caching_objects, object);
    }

    object_add_slice(object, write_buf, write_bytes);
    /*slice_t *slice = slice_new(); */
    /*slice->seq_num = blockid;*/
    /*byte_block_write(&slice->byteblock, write_buf, write_bytes);*/
    /*listAddNodeTail(object->slices, slice);*/

    session->total_writed += msgidx->data_size;

    return object;

}
コード例 #4
0
object_t *session_write_to_cache(session_t *session, msgidx_t *msgidx){

    vnode_t *vnode = get_vnode_by_key(SERVER(session), msgidx->key_md5);
    assert(vnode != NULL);
    object_queue_t *caching_objects = vnode->caching_objects;

    int blockid = msgidx->message->id;
    uint32_t object_size = msgidx->object_size; 
    const char *write_buf = msgidx->data;
    uint32_t write_bytes = msgidx->data_size;;

    object_t obj;
    memcpy(&obj.key_md5, msgidx->key_md5, sizeof(md5_value_t));

    object_t *object = object_queue_find(caching_objects, &obj);
    if ( object == NULL ){
        object = object_new(msgidx->key, msgidx->keylen);
        object->object_size = object_size;

        assert(check_md5(&object->key_md5, msgidx->key_md5) == 0 );

        pthread_mutex_lock(&caching_objects->queue_lock);
        object_queue_insert(caching_objects, object);
        pthread_mutex_unlock(&caching_objects->queue_lock);
    }

    slice_t *slice = slice_new(); 
    slice->seq_num = blockid;
    byte_block_write(&slice->byteblock, write_buf, write_bytes);

    listAddNodeTail(object->slices, slice);

    session->total_writed += msgidx->data_size;

    return object;

}