Skip to content

Commit e67792b

Browse files
committed
Share state privisoning logic between ParallelBlockTransactionProcessor implementations
Signed-off-by: Miroslav Kovar <miroslavkovar@protonmail.com>
1 parent 7d0b4af commit e67792b

3 files changed

Lines changed: 28 additions & 35 deletions

File tree

ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/parallelization/BalConcurrentTransactionProcessor.java

Lines changed: 5 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import org.hyperledger.besu.ethereum.mainnet.block.access.list.BlockAccessList.BlockAccessListBuilder;
2828
import org.hyperledger.besu.ethereum.processing.TransactionProcessingResult;
2929
import org.hyperledger.besu.ethereum.trie.pathbased.bonsai.worldview.BonsaiWorldState;
30-
import org.hyperledger.besu.ethereum.trie.pathbased.common.provider.WorldStateQueryParams;
3130
import org.hyperledger.besu.ethereum.trie.pathbased.common.worldview.PathBasedWorldState;
3231
import org.hyperledger.besu.ethereum.trie.pathbased.common.worldview.accumulator.PathBasedWorldStateUpdateAccumulator;
3332
import org.hyperledger.besu.evm.blockhash.BlockHashLookup;
@@ -70,26 +69,10 @@ protected ParallelizedTransactionContext runTransaction(
7069
final Wei blobGasPrice,
7170
final Optional<BlockAccessListBuilder> blockAccessListBuilder) {
7271

73-
final BlockHeader parentHeader =
74-
protocolContext
75-
.getBlockchain()
76-
.getBlockHeader(blockHeader.getParentHash())
77-
.orElseThrow(
78-
() ->
79-
new IllegalStateException(
80-
"Parent header not found for block " + blockHeader.getHash()));
81-
82-
try (BonsaiWorldState ws =
83-
(BonsaiWorldState)
84-
protocolContext
85-
.getWorldStateArchive()
86-
.getWorldState(
87-
WorldStateQueryParams.withBlockHeaderAndNoUpdateNodeHead(parentHeader))
88-
.orElseThrow(
89-
() ->
90-
new IllegalStateException(
91-
"World state not found for parent block " + parentHeader.getHash()))) {
72+
final BonsaiWorldState ws = getWorldState(protocolContext, blockHeader);
73+
if (ws == null) return null;
9274

75+
try {
9376
ws.disableCacheMerkleTrieLoader();
9477
final ParallelizedTransactionContext.Builder ctxBuilder =
9578
new ParallelizedTransactionContext.Builder();
@@ -126,6 +109,8 @@ protected ParallelizedTransactionContext runTransaction(
126109
ctxBuilder.transactionAccumulator(blockUpdater).transactionProcessingResult(result);
127110

128111
return ctxBuilder.build();
112+
} finally {
113+
ws.close();
129114
}
130115
}
131116

ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/parallelization/ParallelBlockTransactionProcessor.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
import org.hyperledger.besu.ethereum.core.Transaction;
2323
import org.hyperledger.besu.ethereum.mainnet.block.access.list.BlockAccessList.BlockAccessListBuilder;
2424
import org.hyperledger.besu.ethereum.processing.TransactionProcessingResult;
25+
import org.hyperledger.besu.ethereum.trie.pathbased.bonsai.worldview.BonsaiWorldState;
26+
import org.hyperledger.besu.ethereum.trie.pathbased.common.provider.WorldStateQueryParams;
2527
import org.hyperledger.besu.evm.blockhash.BlockHashLookup;
2628
import org.hyperledger.besu.plugin.services.metrics.Counter;
2729

@@ -67,6 +69,22 @@ public void runAsyncBlock(
6769
}
6870
}
6971

72+
protected BonsaiWorldState getWorldState(
73+
final ProtocolContext protocolContext, final BlockHeader blockHeader) {
74+
75+
final BlockHeader chainHeadHeader = protocolContext.getBlockchain().getChainHeadHeader();
76+
if (!chainHeadHeader.getHash().equals(blockHeader.getParentHash())) {
77+
return null;
78+
}
79+
80+
return (BonsaiWorldState)
81+
protocolContext
82+
.getWorldStateArchive()
83+
.getWorldState(
84+
WorldStateQueryParams.withBlockHeaderAndNoUpdateNodeHead(chainHeadHeader))
85+
.orElse(null);
86+
}
87+
7088
protected abstract ParallelizedTransactionContext runTransaction(
7189
ProtocolContext protocolContext,
7290
BlockHeader blockHeader,

ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/parallelization/ParallelizedConcurrentTransactionProcessor.java

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import org.hyperledger.besu.ethereum.mainnet.block.access.list.BlockAccessList.BlockAccessListBuilder;
2727
import org.hyperledger.besu.ethereum.processing.TransactionProcessingResult;
2828
import org.hyperledger.besu.ethereum.trie.pathbased.bonsai.worldview.BonsaiWorldState;
29-
import org.hyperledger.besu.ethereum.trie.pathbased.common.provider.WorldStateQueryParams;
3029
import org.hyperledger.besu.ethereum.trie.pathbased.common.worldview.PathBasedWorldState;
3130
import org.hyperledger.besu.ethereum.trie.pathbased.common.worldview.accumulator.PathBasedWorldStateUpdateAccumulator;
3231
import org.hyperledger.besu.evm.account.MutableAccount;
@@ -85,22 +84,11 @@ protected ParallelizedTransactionContext runTransaction(
8584
final BlockHashLookup blockHashLookup,
8685
final Wei blobGasPrice,
8786
final Optional<BlockAccessListBuilder> blockAccessListBuilder) {
88-
final BlockHeader chainHeadHeader = protocolContext.getBlockchain().getChainHeadHeader();
89-
if (!chainHeadHeader.getHash().equals(blockHeader.getParentHash())) {
90-
return null;
91-
}
9287

93-
try (BonsaiWorldState ws =
94-
(BonsaiWorldState)
95-
protocolContext
96-
.getWorldStateArchive()
97-
.getWorldState(
98-
WorldStateQueryParams.withBlockHeaderAndNoUpdateNodeHead(chainHeadHeader))
99-
.orElse(null)) {
100-
if (ws == null) {
101-
return null;
102-
}
88+
final BonsaiWorldState ws = getWorldState(protocolContext, blockHeader);
89+
if (ws == null) return null;
10390

91+
try {
10492
ws.disableCacheMerkleTrieLoader();
10593
final ParallelizedTransactionContext.Builder contextBuilder =
10694
new ParallelizedTransactionContext.Builder();
@@ -165,6 +153,8 @@ public void traceBeforeRewardTransaction(
165153
} catch (Exception ex) {
166154
// no op as failing to get worldstate
167155
return null;
156+
} finally {
157+
ws.close();
168158
}
169159
}
170160

0 commit comments

Comments
 (0)