X-Git-Url: http://git.vrable.net/?a=blobdiff_plain;f=bluesky%2Fcloudlog.c;h=76776b48a37f36d558d40698bc7fb8200241f101;hb=3ef3101470ca56b40f80adc708ff5cb7e78beaee;hp=0fdbaacac33205cae73eb5039605dd430b4fd6a4;hpb=fb14012672cefd58f8aa7587152f918824ad8ea8;p=bluesky.git diff --git a/bluesky/cloudlog.c b/bluesky/cloudlog.c index 0fdbaac..76776b4 100644 --- a/bluesky/cloudlog.c +++ b/bluesky/cloudlog.c @@ -191,8 +191,10 @@ void bluesky_cloudlog_fetch(BlueSkyCloudLog *log) } BlueSkyCloudPointer bluesky_cloudlog_serialize(BlueSkyCloudLog *log, - BlueSkyCloudLogState *state) + BlueSkyFS *fs) { + BlueSkyCloudLogState *state = fs->log_state; + if (log->location_flags & CLOUDLOG_CLOUD) { return log->location; } @@ -201,7 +203,7 @@ BlueSkyCloudPointer bluesky_cloudlog_serialize(BlueSkyCloudLog *log, BlueSkyCloudLog *ref = g_array_index(log->links, BlueSkyCloudLog *, i); if (ref != NULL) - bluesky_cloudlog_serialize(ref, state); + bluesky_cloudlog_serialize(ref, fs); } g_mutex_lock(log->lock); @@ -226,19 +228,10 @@ BlueSkyCloudPointer bluesky_cloudlog_serialize(BlueSkyCloudLog *log, log->location_flags |= CLOUDLOG_CLOUD; g_mutex_unlock(log->lock); - return log->location; -} - -static void find_inodes(gpointer key, gpointer value, gpointer user_data) -{ - BlueSkyCloudLogState *state = (BlueSkyCloudLogState *)user_data; - BlueSkyCloudLog *item = (BlueSkyCloudLog *)value; - - if (item->type != LOGTYPE_INODE) - return; + if (state->data->len > CLOUDLOG_SEGMENT_SIZE) + bluesky_cloudlog_flush(fs); - bluesky_cloudlog_ref(item); - state->inode_list = g_list_prepend(state->inode_list, item); + return log->location; } /* Finish up a partially-written cloud log segment and flush it to storage. */ @@ -266,27 +259,3 @@ void bluesky_cloudlog_flush(BlueSkyFS *fs) state->location.offset = 0; state->data = g_string_new(""); } - -void bluesky_cloudlog_write_log(BlueSkyFS *fs) -{ - BlueSkyCloudLogState *state = fs->log_state; - if (state->data == NULL) - state->data = g_string_new(""); - - g_mutex_lock(fs->lock); - g_hash_table_foreach(fs->locations, find_inodes, state); - g_mutex_unlock(fs->lock); - - while (state->inode_list != NULL) { - BlueSkyCloudLog *log = (BlueSkyCloudLog *)state->inode_list->data; - bluesky_cloudlog_serialize(log, state); - bluesky_cloudlog_unref(log); - state->inode_list = g_list_delete_link(state->inode_list, - state->inode_list); - - if (state->data->len > CLOUDLOG_SEGMENT_SIZE) - bluesky_cloudlog_flush(fs); - } - - bluesky_cloudlog_flush(fs); -}