From 928c7f51d172222ae4c42abfafbb0ca052e5b9d7 Mon Sep 17 00:00:00 2001 From: garyschulte Date: Thu, 21 Dec 2023 15:21:07 -0800 Subject: [PATCH] trigger a BWS if we do not have a valid worldstate available during fcU raise log rolling failure loglevel to error from debug Signed-off-by: garyschulte --- .../merge/blockcreation/MergeCoordinator.java | 21 +++++++++++++------ .../trie/bonsai/BonsaiWorldStateProvider.java | 2 +- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/consensus/merge/src/main/java/org/hyperledger/besu/consensus/merge/blockcreation/MergeCoordinator.java b/consensus/merge/src/main/java/org/hyperledger/besu/consensus/merge/blockcreation/MergeCoordinator.java index 5773a468251a..e1fd8ee8a103 100644 --- a/consensus/merge/src/main/java/org/hyperledger/besu/consensus/merge/blockcreation/MergeCoordinator.java +++ b/consensus/merge/src/main/java/org/hyperledger/besu/consensus/merge/blockcreation/MergeCoordinator.java @@ -492,12 +492,21 @@ private boolean canRetryBlockCreation(final Throwable throwable) { @Override public Optional getOrSyncHeadByHash(final Hash headHash, final Hash finalizedHash) { final var chain = protocolContext.getBlockchain(); - final var maybeHeadHeader = chain.getBlockHeader(headHash); - - if (maybeHeadHeader.isPresent()) { + final var maybeHead = + chain + .getBlockHeader(headHash) + // ensure we have the corresponding worldstate also: + .filter( + headHeader -> + protocolContext + .getWorldStateArchive() + .isWorldStateAvailable( + headHeader.getStateRoot(), headHeader.getBlockHash())); + + if (maybeHead.isPresent()) { LOG.atDebug() - .setMessage("BlockHeader {} is already present in blockchain") - .addArgument(maybeHeadHeader.get()::toLogString) + .setMessage("BlockHeader and world state for {} is already present") + .addArgument(maybeHead.get()::toLogString) .log(); } else { LOG.atDebug() @@ -509,7 +518,7 @@ public Optional getOrSyncHeadByHash(final Hash headHash, final Hash .syncBackwardsUntil(headHash) .thenRun(() -> updateFinalized(finalizedHash)); } - return maybeHeadHeader; + return maybeHead; } private void updateFinalized(final Hash finalizedHash) { diff --git a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/trie/bonsai/BonsaiWorldStateProvider.java b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/trie/bonsai/BonsaiWorldStateProvider.java index 4c783888c09e..f3a4c7f57f10 100644 --- a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/trie/bonsai/BonsaiWorldStateProvider.java +++ b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/trie/bonsai/BonsaiWorldStateProvider.java @@ -252,7 +252,7 @@ Optional rollMutableStateToBlockHash( } catch (final Exception e) { // if we fail we must clean up the updater bonsaiUpdater.reset(); - LOG.debug( + LOG.error( "State rolling failed on " + mutableState.getWorldStateStorage().getClass().getSimpleName() + " for block hash "