diff --git a/besu/src/main/java/org/hyperledger/besu/cli/subcommands/operator/TrieLogSubCommand.java b/besu/src/main/java/org/hyperledger/besu/cli/subcommands/operator/TrieLogSubCommand.java index f82e4487bc5..e14e16e8521 100644 --- a/besu/src/main/java/org/hyperledger/besu/cli/subcommands/operator/TrieLogSubCommand.java +++ b/besu/src/main/java/org/hyperledger/besu/cli/subcommands/operator/TrieLogSubCommand.java @@ -127,13 +127,14 @@ public void run() { out.println("Subcommand only works with Bonsai"); } - // KeyValueStorage trieLogStorage = + // KeyValueStorage trieLogStorage = + // // besuController.getStorageProvider().getStorageBySegmentIdentifier(KeyValueSegmentIdentifier.TRIE_LOG_STORAGE); - // Optional bytes = - // trieLogStorage.get(Bytes.fromHexString(targetBlockHash.toString()).toArrayUnsafe()); - // LOG.atInfo().setMessage("result: {}") - // .addArgument(HexFormat.of().formatHex(bytes.orElse(new byte[0]))) - // .log(); + // Optional bytes = + // trieLogStorage.get(Bytes.fromHexString(targetBlockHash.toString()).toArrayUnsafe()); + // LOG.atInfo().setMessage("result: {}") + // .addArgument(HexFormat.of().formatHex(bytes.orElse(new byte[0]))) + // .log(); } catch (final Exception e) { LOG.error("TODO SLD", e); spec.commandLine().usage(System.out); @@ -415,7 +416,7 @@ public void run() { Hash hash = Hash.wrap(Bytes32.wrap(hashAsBytes)); final Optional header = blockchain.getBlockHeader(hash); - if (header.isEmpty()) { + if (header.isEmpty()) { // TODO SLD what if we're still producing this block? // Orphaned trie logs are neither in the canonical blockchain nor forks. // Likely created during block production recordResult(trieLogStorage.tryDelete(hashAsBytes), prunedCount, hash); diff --git a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/bonsai/BonsaiWorldStateProvider.java b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/bonsai/BonsaiWorldStateProvider.java index 299b826369c..0cc9162ae91 100644 --- a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/bonsai/BonsaiWorldStateProvider.java +++ b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/bonsai/BonsaiWorldStateProvider.java @@ -153,6 +153,12 @@ public boolean isWorldStateAvailable(final Hash rootHash, final Hash blockHash) || worldStateStorage.isWorldStateAvailable(rootHash, blockHash); } + // TODO SLD protection against pruned trie logs when rolling back/forward etc so we're not relying + // on 512 max layers config. + + // TODO SLD during reorg, prune trie logs, then another reorg -> roll forward - could be a problem + // with roll forward? + @Override public Optional getMutable( final BlockHeader blockHeader, final boolean shouldPersistState) { diff --git a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/bonsai/trielog/AbstractTrieLogManager.java b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/bonsai/trielog/AbstractTrieLogManager.java index 43b3d465df0..6db2d0cbba5 100644 --- a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/bonsai/trielog/AbstractTrieLogManager.java +++ b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/bonsai/trielog/AbstractTrieLogManager.java @@ -154,6 +154,7 @@ public long getMaxLayersToLoad() { @Override public Optional getTrieLogLayer(final Hash blockHash) { + // TODO SLD check CACHE1 first? return rootWorldStateStorage.getTrieLog(blockHash).map(trieLogFactory::deserialize); } diff --git a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/bonsai/worldview/BonsaiWorldState.java b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/bonsai/worldview/BonsaiWorldState.java index ed81c90f439..4015caf5399 100644 --- a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/bonsai/worldview/BonsaiWorldState.java +++ b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/bonsai/worldview/BonsaiWorldState.java @@ -393,6 +393,8 @@ public void persist(final BlockHeader blockHeader) { verifyWorldStateRoot(newWorldStateRootHash, blockHeader); saveTrieLog = () -> { + // TODO SLD if isFrozen pushTo CACHE1 else persist ? To avoid persisting when + // producing block (cache to keep optimisation between build and newPayload import) trieLogManager.saveTrieLog(localCopy, newWorldStateRootHash, blockHeader, this); // not save a frozen state in the cache if (!isFrozen) {