@@ -1312,13 +1312,11 @@ private int readSingleRegion(
13121312 mapSubRangeToRegion (rangeToWrite , region ),
13131313 mapSubRangeToRegion (rangeToRead , region ),
13141314 readerWithOffset (reader , fileRegion , Math .toIntExact (rangeToRead .start () - regionStart )),
1315- writerWithOffset (writer , fileRegion , Math .toIntExact (rangeToWrite .start () - regionStart )),
1315+ metricRecordingWriter ( writerWithOffset (writer , fileRegion , Math .toIntExact (rangeToWrite .start () - regionStart ) )),
13161316 ioExecutor ,
13171317 readFuture
13181318 );
1319- int result = readFuture .get ();
1320- blobCacheMetrics .recordWrite ();
1321- return result ;
1319+ return readFuture .get ();
13221320 }
13231321
13241322 private int readMultiRegions (
@@ -1346,7 +1344,9 @@ private int readMultiRegions(
13461344 mapSubRangeToRegion (rangeToWrite , region ),
13471345 subRangeToRead ,
13481346 readerWithOffset (reader , fileRegion , Math .toIntExact (rangeToRead .start () - regionStart )),
1349- writerWithOffset (writer , fileRegion , Math .toIntExact (rangeToWrite .start () - regionStart )),
1347+ metricRecordingWriter (
1348+ writerWithOffset (writer , fileRegion , Math .toIntExact (rangeToWrite .start () - regionStart ))
1349+ ),
13501350 ioExecutor ,
13511351 listener
13521352 );
@@ -1357,7 +1357,6 @@ private int readMultiRegions(
13571357 }
13581358 }
13591359 readsComplete .get ();
1360- blobCacheMetrics .recordWrites (endRegion - startRegion + 1 );
13611360 return bytesRead .get ();
13621361 }
13631362
@@ -1422,6 +1421,16 @@ public void fillCacheRange(
14221421 return adjustedWriter ;
14231422 }
14241423
1424+ private RangeMissingHandler metricRecordingWriter (RangeMissingHandler writer ) {
1425+ return new DelegatingRangeMissingHandler (writer ) {
1426+ @ Override
1427+ public SourceInputStreamFactory sharedInputStreamFactory (List <SparseFileTracker .Gap > gaps ) {
1428+ blobCacheMetrics .recordWrite ();
1429+ return super .sharedInputStreamFactory (gaps );
1430+ }
1431+ };
1432+ }
1433+
14251434 private RangeAvailableHandler readerWithOffset (RangeAvailableHandler reader , CacheFileRegion <KeyType > fileRegion , int readOffset ) {
14261435 final RangeAvailableHandler adjustedReader = (channel , channelPos , relativePos , len ) -> reader .onRangeAvailable (
14271436 channel ,
0 commit comments