- g_print("Re-mapping log entry %d/%d/%d...\n",
- log->log_seq, log->log_offset, log->log_size);
-
- g_assert(log->location_flags & CLOUDLOG_JOURNAL);
-
- log->data = bluesky_log_map_object(log->fs->log, log->log_seq,
- log->log_offset, log->log_size);
-
- g_cond_broadcast(log->cond);
+ /* TODO: Append some type of commit record to the log segment? */
+
+ g_print("Serializing %zd bytes of data to cloud\n", state->data->len);
+ SerializedRecord *record = g_new0(SerializedRecord, 1);
+ record->data = bluesky_string_new_from_gstring(state->data);
+ record->items = state->writeback_list;
+ record->lock = g_mutex_new();
+ record->cond = g_cond_new();
+ state->writeback_list = NULL;
+
+ BlueSkyStoreAsync *async = bluesky_store_async_new(fs->store);
+ async->op = STORE_OP_PUT;
+ async->key = g_strdup_printf("log-%08d-%08d",
+ state->location.directory,
+ state->location.sequence);
+ async->data = record->data;
+ bluesky_string_ref(record->data);
+ bluesky_store_async_submit(async);
+ bluesky_store_async_add_notifier(async,
+ (GFunc)cloudlog_flush_complete,
+ record);
+ bluesky_store_async_unref(async);
+
+ state->pending_segments = g_list_prepend(state->pending_segments, record);
+
+ state->location.sequence++;
+ state->location.offset = 0;
+ state->data = g_string_new("");