diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java index 016d503f5eab..424392f6f189 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java @@ -25,6 +25,7 @@ import java.util.Optional; import java.util.concurrent.CountDownLatch; import java.util.concurrent.locks.ReentrantLock; +import java.util.function.IntConsumer; import org.apache.hadoop.hbase.Cell; import org.apache.hadoop.hbase.CellComparator; import org.apache.hadoop.hbase.CellUtil; @@ -588,6 +589,13 @@ public boolean next(List outResult, ScannerContext scanner Optional rpcCall = matcher.isUserScan() ? RpcServer.getCurrentCall() : Optional.empty(); + // re-useable closure to avoid allocations + IntConsumer recordBlockSize = blockSize -> { + if (rpcCall.isPresent()) { + rpcCall.get().incrementBlockBytesScanned(blockSize); + } + scannerContext.incrementBlockProgress(blockSize); + }; int count = 0; long totalBytesRead = 0; @@ -629,12 +637,7 @@ public boolean next(List outResult, ScannerContext scanner scannerContext.returnImmediately(); } - heap.recordBlockSize(blockSize -> { - if (rpcCall.isPresent()) { - rpcCall.get().incrementBlockBytesScanned(blockSize); - } - scannerContext.incrementBlockProgress(blockSize); - }); + heap.recordBlockSize(recordBlockSize); prevCell = cell; scannerContext.setLastPeekedCell(cell);