X-Git-Url: http://git.vrable.net/?a=blobdiff_plain;ds=sidebyside;f=bluesky%2Flog.c;h=4cef5fde409170150706a5b226b3426dc83e13a3;hb=43b95b084f95a57e6a08ab986037c4d3a72d2052;hp=94550584df9d3f826ce96e41373b392b9aac6a03;hpb=1ff95dce46dcb5b0358db1fd4fa9698daeb326d7;p=bluesky.git diff --git a/bluesky/log.c b/bluesky/log.c index 9455058..4cef5fd 100644 --- a/bluesky/log.c +++ b/bluesky/log.c @@ -616,8 +616,20 @@ BlueSkyRCStr *bluesky_log_map_object(BlueSkyCloudLog *item, gboolean map_data) if (rangeitem == NULL) { g_print("Item at offset 0x%zx not available, need to fetch.\n", file_offset); - if (range_request) - cloudlog_partial_fetch_start(map, file_offset, file_size); + if (range_request) { + uint64_t start = 0, length = 0, end; + if (map->prefetches != NULL) + bluesky_rangeset_get_extents(map->prefetches, + &start, &length); + start = MIN(start, file_offset); + end = MAX(start + length, file_offset + file_size); + length = end - start; + cloudlog_partial_fetch_start(map, start, length); + if (map->prefetches != NULL) { + bluesky_rangeset_free(map->prefetches); + map->prefetches = NULL; + } + } g_cond_wait(map->cond, map->lock); } else if (rangeitem->start == file_offset && rangeitem->length == file_size) { @@ -656,8 +668,6 @@ BlueSkyRCStr *bluesky_log_map_object(BlueSkyCloudLog *item, gboolean map_data) str = bluesky_string_new_from_mmap(map, file_offset, file_size); map->atime = bluesky_get_current_time(); - g_print("Returning item at offset 0x%zx.\n", file_offset); - exit2: bluesky_cachefile_unref(map); g_mutex_unlock(map->lock);