diff --git a/x-pack/plugin/blob-cache/src/main/java/org/elasticsearch/blobcache/shared/SharedBlobCacheService.java b/x-pack/plugin/blob-cache/src/main/java/org/elasticsearch/blobcache/shared/SharedBlobCacheService.java index 374897b30f038..5c0ba41c4e302 100644 --- a/x-pack/plugin/blob-cache/src/main/java/org/elasticsearch/blobcache/shared/SharedBlobCacheService.java +++ b/x-pack/plugin/blob-cache/src/main/java/org/elasticsearch/blobcache/shared/SharedBlobCacheService.java @@ -845,16 +845,21 @@ private int readMultiRegions( // nothing to read, skip continue; } - final CacheFileRegion fileRegion = get(cacheKey, length, region); - final long regionStart = getRegionStart(region); - fileRegion.populateAndRead( - mapSubRangeToRegion(rangeToWrite, region), - subRangeToRead, - readerWithOffset(reader, fileRegion, Math.toIntExact(rangeToRead.start() - regionStart)), - writerWithOffset(writer, fileRegion, Math.toIntExact(rangeToWrite.start() - regionStart)), - ioExecutor, - listeners.acquire(i -> bytesRead.updateAndGet(j -> Math.addExact(i, j))) - ); + ActionListener listener = listeners.acquire(i -> bytesRead.updateAndGet(j -> Math.addExact(i, j))); + try { + final CacheFileRegion fileRegion = get(cacheKey, length, region); + final long regionStart = getRegionStart(region); + fileRegion.populateAndRead( + mapSubRangeToRegion(rangeToWrite, region), + subRangeToRead, + readerWithOffset(reader, fileRegion, Math.toIntExact(rangeToRead.start() - regionStart)), + writerWithOffset(writer, fileRegion, Math.toIntExact(rangeToWrite.start() - regionStart)), + ioExecutor, + listener + ); + } catch (Exception e) { + listener.onFailure(e); + } } } readsComplete.get();