Skip to content

Commit d9e52af

Browse files
Gabriel-Trintinaliamacfarla
authored andcommitted
Reset ws before retrying block processing (besu-eth#9113)
Signed-off-by: Gabriel-Trintinalia <gabriel.trintinalia@consensys.net> Co-authored-by: Sally MacFarlane <macfarla.github@gmail.com> Signed-off-by: georgereuben <reubengeorge101@gmail.com>
1 parent 4dd8413 commit d9e52af

File tree

2 files changed

+23
-6
lines changed

2 files changed

+23
-6
lines changed

ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/AbstractBlockProcessor.java

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,9 @@ public BlockProcessingResult processBlock(
259259
"block did not consume expected blob gas: header %d, transactions %d",
260260
headerBlobGasUsed, currentBlobGasUsed);
261261
LOG.error(errorMessage);
262+
if (worldState instanceof BonsaiWorldState) {
263+
((BonsaiWorldStateUpdateAccumulator) worldState.updater()).reset();
264+
}
262265
return new BlockProcessingResult(Optional.empty(), errorMessage);
263266
}
264267
}
@@ -271,6 +274,9 @@ public BlockProcessingResult processBlock(
271274
.processWithdrawals(maybeWithdrawals.get(), worldState.updater());
272275
} catch (final Exception e) {
273276
LOG.error("failed processing withdrawals", e);
277+
if (worldState instanceof BonsaiWorldState) {
278+
((BonsaiWorldStateUpdateAccumulator) worldState.updater()).reset();
279+
}
274280
return new BlockProcessingResult(Optional.empty(), e);
275281
}
276282
}
@@ -287,6 +293,9 @@ public BlockProcessingResult processBlock(
287293
}
288294
} catch (final Exception e) {
289295
LOG.error("failed processing requests", e);
296+
if (worldState instanceof BonsaiWorldState) {
297+
((BonsaiWorldStateUpdateAccumulator) worldState.updater()).reset();
298+
}
290299
return new BlockProcessingResult(Optional.empty(), e);
291300
}
292301

@@ -296,12 +305,15 @@ public BlockProcessingResult processBlock(
296305
final Hash headerRequestsHash = optionalRequestsHash.get();
297306
Hash calculatedRequestHash = BodyValidation.requestsHash(requests);
298307
if (!calculatedRequestHash.equals(headerRequestsHash)) {
299-
return new BlockProcessingResult(
300-
Optional.empty(),
301-
"Requests hash mismatch, calculated: "
302-
+ calculatedRequestHash.toHexString()
303-
+ " header: "
304-
+ headerRequestsHash.toHexString());
308+
String errorMessage =
309+
String.format(
310+
"Requests hash mismatch, calculated: %s header: %s",
311+
calculatedRequestHash.toHexString(), headerRequestsHash.toHexString());
312+
LOG.error(errorMessage);
313+
if (worldState instanceof BonsaiWorldState) {
314+
((BonsaiWorldStateUpdateAccumulator) worldState.updater()).reset();
315+
}
316+
return new BlockProcessingResult(Optional.empty(), errorMessage);
305317
}
306318
}
307319

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030
import org.hyperledger.besu.ethereum.mainnet.ProtocolSpecBuilder;
3131
import org.hyperledger.besu.ethereum.mainnet.systemcall.BlockProcessingContext;
3232
import org.hyperledger.besu.ethereum.processing.TransactionProcessingResult;
33+
import org.hyperledger.besu.ethereum.trie.pathbased.bonsai.worldview.BonsaiWorldState;
34+
import org.hyperledger.besu.ethereum.trie.pathbased.bonsai.worldview.BonsaiWorldStateUpdateAccumulator;
3335
import org.hyperledger.besu.evm.blockhash.BlockHashLookup;
3436
import org.hyperledger.besu.evm.worldstate.WorldUpdater;
3537
import org.hyperledger.besu.metrics.BesuMetricCategory;
@@ -147,6 +149,9 @@ public BlockProcessingResult processBlock(
147149
"Parallel transaction processing failure. Falling back to non-parallel processing for block #{} ({})",
148150
block.getHeader().getNumber(),
149151
block.getHash());
152+
if (worldState instanceof BonsaiWorldState) {
153+
((BonsaiWorldStateUpdateAccumulator) worldState.updater()).reset();
154+
}
150155
return super.processBlock(protocolContext, blockchain, worldState, block);
151156
}
152157
return blockProcessingResult;

0 commit comments

Comments
 (0)