diff --git a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/trie/diffbased/common/trielog/TrieLogPruner.java b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/trie/diffbased/common/trielog/TrieLogPruner.java index cea5c1a327d..42715aae106 100644 --- a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/trie/diffbased/common/trielog/TrieLogPruner.java +++ b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/trie/diffbased/common/trielog/TrieLogPruner.java @@ -95,20 +95,22 @@ private int preloadQueue() { try (final Stream trieLogKeys = rootWorldStateStorage.streamTrieLogKeys(loadingLimit)) { final AtomicLong count = new AtomicLong(); final AtomicLong orphansPruned = new AtomicLong(); - trieLogKeys.forEach( - blockHashAsBytes -> { - final Hash blockHash = Hash.wrap(Bytes32.wrap(blockHashAsBytes)); - final Optional header = blockchain.getBlockHeader(blockHash); - if (header.isPresent()) { - addToPruneQueue(header.get().getNumber(), blockHash); - count.getAndIncrement(); - } else { - // prune orphaned blocks (sometimes created during block production) - rootWorldStateStorage.pruneTrieLog(blockHash); - orphansPruned.getAndIncrement(); - prunedOrphanCounter.inc(); - } - }); + trieLogKeys + .parallel() + .forEach( + blockHashAsBytes -> { + final Hash blockHash = Hash.wrap(Bytes32.wrap(blockHashAsBytes)); + final Optional header = blockchain.getBlockHeader(blockHash); + if (header.isPresent()) { + addToPruneQueue(header.get().getNumber(), blockHash); + count.getAndIncrement(); + } else { + // prune orphaned blocks (sometimes created during block production) + rootWorldStateStorage.pruneTrieLog(blockHash); + orphansPruned.getAndIncrement(); + prunedOrphanCounter.inc(); + } + }); LOG.atDebug().log("Pruned {} orphaned trie logs from database...", orphansPruned.intValue()); LOG.atInfo().log("Loaded {} trie logs from database", count); return pruneFromQueue() + orphansPruned.intValue(); diff --git a/plugins/rocksdb/src/main/java/org/hyperledger/besu/plugin/services/storage/rocksdb/segmented/RocksDBColumnarKeyValueStorage.java b/plugins/rocksdb/src/main/java/org/hyperledger/besu/plugin/services/storage/rocksdb/segmented/RocksDBColumnarKeyValueStorage.java index 647dc7019f7..caeb4316a3f 100644 --- a/plugins/rocksdb/src/main/java/org/hyperledger/besu/plugin/services/storage/rocksdb/segmented/RocksDBColumnarKeyValueStorage.java +++ b/plugins/rocksdb/src/main/java/org/hyperledger/besu/plugin/services/storage/rocksdb/segmented/RocksDBColumnarKeyValueStorage.java @@ -394,7 +394,8 @@ public Stream> streamFromKey( @Override public Stream streamKeys(final SegmentIdentifier segmentIdentifier) { - final RocksIterator rocksIterator = getDB().newIterator(safeColumnHandle(segmentIdentifier)); + final RocksIterator rocksIterator = + getDB().newIterator(safeColumnHandle(segmentIdentifier), readOptions); rocksIterator.seekToFirst(); return RocksDbIterator.create(rocksIterator).toStreamKeys(); }