/* ==================== 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; }
/* ==================== 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; }
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; }
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; }