Esempio n. 1
0
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;

}
Esempio n. 2
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;

}