fs->next_inum = BLUESKY_ROOT_INUM + 1;
fs->store = bluesky_store_new("file");
fs->flushd_lock = g_mutex_new();
+ fs->locations = g_hash_table_new(bluesky_cloudlog_hash,
+ bluesky_cloudlog_equal);
return fs;
}
char key[64];
sprintf(key, "inode-%016"PRIx64, inode->inum);
- BlueSkyLogItem *log_item = bluesky_log_item_new();
- log_item->key = g_strdup(key);
- log_item->data = data;
+ BlueSkyCloudLog *cloudlog = bluesky_cloudlog_new(fs);
+ cloudlog->type = LOGTYPE_INODE;
+ cloudlog->inum = inode->inum;
+ cloudlog->data = data;
bluesky_string_ref(data);
- bluesky_log_item_submit(log_item, fs->log);
- log_items = g_list_prepend(log_items, log_item);
+
+ if (inode->type == BLUESKY_REGULAR) {
+ for (int i = 0; i < inode->blocks->len; i++) {
+ BlueSkyBlock *b = &g_array_index(inode->blocks, BlueSkyBlock, i);
+ if (b->type == BLUESKY_BLOCK_CACHED
+ || b->type == BLUESKY_BLOCK_REF)
+ {
+ BlueSkyCloudID id = bluesky_cloudlog_id_from_string(b->ref);
+ g_array_append_val(cloudlog->pointers, id);
+ }
+ }
+ }
+
+ log_items = g_list_prepend(log_items, bluesky_cloudlog_sync(cloudlog));
+
+ bluesky_cloudlog_insert(cloudlog);
/* Wait for all log items to be committed to disk. */
while (log_items != NULL) {
- log_item = (BlueSkyLogItem *)log_items->data;
+ BlueSkyLogItem *log_item = (BlueSkyLogItem *)log_items->data;
bluesky_log_item_finish(log_item);
log_items = g_list_delete_link(log_items, log_items);
}