コード例 #1
0
ファイル: vnode.c プロジェクト: uukuguy/legolas
/* ==================== vnode_write_to_kvdb() ==================== */ 
int vnode_write_to_kvdb(vnode_t *vnode, object_t *object)
{
    /* FIXME */
    /*object_put_into_kvdb(vnode->kvdb, object);*/
    object_put_into_kvdb(vnode->active_slicedb->kvdb, object);

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


    if ( vnode->storage_type >= STORAGE_KVDB ){
        md5_value_t *key_md5 = &object->key_md5;
        uint32_t slicedb_id = vnode_get_slicedb_id(vnode, key_md5);

        int try_to_write_full_db = 0;
        if ( kvenv_get_dbsize(vnode->active_slicedb->kvdb->kvenv) > 0.9 * vnode->active_slicedb->max_dbsize ){
            uint32_t active_slicedb_id = vnode->active_slicedb->id;
            if ( active_slicedb_id == slicedb_id ){
                try_to_write_full_db = 1;
            }
            slicedb_t *slicedb = vnode_open_slicedb(vnode, active_slicedb_id + 1);
            vnode->active_slicedb = slicedb;

            if ( kvdb_put_uint32(vnode->kvdb_metadata, "active_slicedb_id", active_slicedb_id) != 0 ){
                error_log("Save active_slicedb_id failed. vnode->id:%d active_slicedb_id:%d", vnode->id, active_slicedb_id + 1);
            }
        }

        slicedb_t *active_slicedb = vnode->active_slicedb;

        if ( slicedb_id < vnode->active_slicedb->id ){
            if ( try_to_write_full_db ){
                ret = object_del_from_kvdb(vnode->slicedbs[slicedb_id]->kvdb, *key_md5);
            } else {
                active_slicedb = vnode->slicedbs[slicedb_id];
            }
        }

        slice_metadata_t slice_metadata;
        memset(&slice_metadata, 0, sizeof(slice_metadata_t));
        slice_metadata.version = 0;
        slice_metadata.slicedb_id = active_slicedb->id;
        ret = kvdb_put(vnode->kvdb_metadata, (const char *)key_md5, sizeof(md5_value_t), (void*)&slice_metadata, sizeof(slice_metadata_t)); 
        if ( ret == 0 ){
            /*ret = vnode_write_to_kvdb(vnode, object);*/
            ret = object_put_into_kvdb(active_slicedb->kvdb, object);
        } else {
            error_log("Write metadata failed. vnode->id:%d object->key:%s", vnode->id, object->key);
        }
    } else if ( vnode->storage_type == STORAGE_LOGFILE ){
        ret = vnode_write_to_file(vnode, object);
    }

    if ( ret == 0 ) {
        object_queue_remove(vnode->caching_objects, object);
    }

    return ret;
}
コード例 #3
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;
}