X-Git-Url: http://git.vrable.net/?a=blobdiff_plain;f=bluesky%2Flog.c;h=4cef5fde409170150706a5b226b3426dc83e13a3;hb=43b95b084f95a57e6a08ab986037c4d3a72d2052;hp=ad1dac1ece798a079ae13d07b7a8ca5efd830665;hpb=7f47ef48ce38ab71fc414bee592a9078ed1c0a7a;p=bluesky.git diff --git a/bluesky/log.c b/bluesky/log.c index ad1dac1..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) {