cachefile->filename);
async->data = bluesky_string_dup(async->data);
bluesky_cloudlog_decrypt(async->data->data, async->data->len,
- cachefile->fs->keys);
+ cachefile->fs->keys, cachefile->items);
if (!g_file_set_contents(pathname, async->data->data, async->data->len,
NULL))
g_print("Error writing out fetched file to cache!\n");
map->log = log;
g_atomic_int_set(&map->mapcount, 0);
g_atomic_int_set(&map->refcount, 0);
+ map->items = bluesky_rangeset_new();
g_hash_table_insert(log->mmap_cache, map->filename, map);
return NULL;
}
+ /* Log segments fetched from the cloud might only be partially-fetched.
+ * Check whether the object we are interested in is available. */
+ if (log_dir >= 0) {
+ if (!bluesky_rangeset_lookup(map->items, log_offset)) {
+ g_warning("log-%d: Item at offset %d does not seem to be available\n", log_seq, log_offset);
+ }
+ }
+
if (map->addr == NULL) {
while (!map->ready && map->fetching) {
g_print("Waiting for log segment to be fetched from cloud...\n");