/* ==================== session_handle_write() ==================== */ int session_handle_write(session_t *session, message_t *request) { msgidx_t msgidx; /** ---------------------------------------- * Parse request * ---------------------------------------- */ if ( parse_write_request(session, request, &msgidx) != 0 ){ error_log("parse_write_request() failed. key:%s", msgidx.key); return -1; } /** ---------------------------------------- * Write cache * ---------------------------------------- */ object_t *object = session_write_to_cache(session, &msgidx); if ( object == NULL ) { error_log("session_write_block() failed."); return -1; } /** ---------------------------------------- * Write to kvdb.. * ---------------------------------------- */ if ( session->total_writed >= msgidx.object_size ){ session_write_to_kvdb(session, object, &msgidx); /** ---------------------------------------- * Response to client * ---------------------------------------- */ session_response(session, RESULT_SUCCESS); /*pthread_yield();*/ sched_yield(); } return 0; }
/* ==================== server_handle_write() ==================== */ int server_handle_write(session_t *session, message_t *request) { int ret = 0; msgidx_t msgidx; msgidx_init(&msgidx); /** ---------------------------------------- * Parse request * ---------------------------------------- */ if ( parse_write_request(session, request, &msgidx) != 0 ){ error_log("parse_write_request() failed. key:%s", msgidx.key); ret = -1; } else { if ( session->total_writed == 0 ){ __sync_add_and_fetch(&session->running_tasks, 1); } /** ---------------------------------------- * Write cache * ---------------------------------------- */ object_t *object = server_write_to_cache(session, &msgidx); if ( object == NULL ) { error_log("session_write_to_cache() failed."); __sync_add_and_fetch(&session->finished_works, 1); session->total_writed = 0; ret = -1; } else { /** ---------------------------------------- * Write to storage & Response to client. * ---------------------------------------- */ if ( session->total_writed >= msgidx.object_size ){ /* FIXME 2014-10-23 15:49:37 */ /*vnode_t *vnode = get_vnode_by_key(SERVER(session), &object->key_md5);*/ /*vnode_enqueue_write_queue(vnode, session, object);*/ server_write_to_storage(SERVER(session), object); session_response(session, RESULT_SUCCESS); __sync_add_and_fetch(&session->finished_works, 1); __sync_sub_and_fetch(&session->running_tasks, 1); /*message_t *response = alloc_response_message(RESULT_SUCCESS);*/ /*listAddNodeTail(session->responseQueue, response);*/ session->total_writed = 0; /* FIXME */ /*vnode_write_queue_entry_t *entry = (vnode_write_queue_entry_t*)zmalloc(sizeof(vnode_write_queue_entry_t));*/ /*memset(entry, 0, sizeof(vnode_write_queue_entry_t));*/ /*entry->session = session;*/ /*entry->object = object;*/ /*enqueue_work(vnode->write_queue, entry);*/ /*pthread_yield();*/ /*sched_yield();*/ } } } return ret; }