From 01b9286c3f26753856f23de4cbbff0a5b6614aa4 Mon Sep 17 00:00:00 2001 From: garyschulte Date: Fri, 3 May 2024 16:52:55 -0700 Subject: [PATCH] Default bonsai to fully flat db and code storage by codehash (#6894) * change to full flat db and code stored by code hash by default * deprecate --Xsnapsync-synchronizer-flat-db-healing-enabled, add DataStorageOption for --Xbonsai-full-flat-db-enabled Signed-off-by: garyschulte --- CHANGELOG.md | 1 + .../org/hyperledger/besu/cli/BesuCommand.java | 4 +- .../options/stable/DataStorageOptions.java | 16 +++++++ .../options/unstable/SynchronizerOptions.java | 43 ++++------------- .../hyperledger/besu/cli/BesuCommandTest.java | 37 ++++++++++---- .../cli/options/SynchronizerOptionsTest.java | 1 + .../src/test/resources/everything_config.toml | 2 + .../storage/flat/FlatDbStrategyProvider.java | 30 +++++++++++- .../worldstate/DataStorageConfiguration.java | 18 ++++++- .../bonsai/AbstractIsolationTests.java | 5 +- .../BonsaiWorldStateKeyValueStorageTest.java | 48 ++++++++----------- .../flat/FlatDbStrategyProviderTest.java | 10 ++-- .../sync/snapsync/SnapSyncConfiguration.java | 7 --- .../snapsync/SnapWorldStateDownloader.java | 10 ---- .../snapsync/SnapWorldDownloadStateTest.java | 2 +- 15 files changed, 135 insertions(+), 99 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1f64e16851d7..a9909ef9d6c6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -45,6 +45,7 @@ - Allow users to specify which plugins are registered [#6700](https://github.com/hyperledger/besu/pull/6700) - Layered txpool tuning for blob transactions [#6940](https://github.com/hyperledger/besu/pull/6940) - Update Gradle to 7.6.4 [#7030](https://github.com/hyperledger/besu/pull/7030) +- Default bonsai to use full-flat db and code-storage-by-code-hash [#6984](https://github.com/hyperledger/besu/pull/6894) ### Bug fixes - Fix txpool dump/restore race condition [#6665](https://github.com/hyperledger/besu/pull/6665) diff --git a/besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java b/besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java index e3419f594c49..07058883bb0e 100644 --- a/besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java +++ b/besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java @@ -1706,8 +1706,8 @@ && isOptionSet(commandLine, "--sync-min-peers")) { CommandLineUtils.failIfOptionDoesntMeetRequirement( commandLine, - "--Xsnapsync-synchronizer-flat option can only be used when -Xsnapsync-synchronizer-flat-db-healing-enabled is true", - unstableSynchronizerOptions.isSnapsyncFlatDbHealingEnabled(), + "--Xsnapsync-synchronizer-flat option can only be used when --Xbonsai-full-flat-db-enabled is true", + dataStorageOptions.toDomainObject().getUnstable().getBonsaiFullFlatDbEnabled(), asList( "--Xsnapsync-synchronizer-flat-account-healed-count-per-request", "--Xsnapsync-synchronizer-flat-slot-healed-count-per-request")); diff --git a/besu/src/main/java/org/hyperledger/besu/cli/options/stable/DataStorageOptions.java b/besu/src/main/java/org/hyperledger/besu/cli/options/stable/DataStorageOptions.java index c380fb6c2cf1..779a88115ca0 100644 --- a/besu/src/main/java/org/hyperledger/besu/cli/options/stable/DataStorageOptions.java +++ b/besu/src/main/java/org/hyperledger/besu/cli/options/stable/DataStorageOptions.java @@ -17,6 +17,7 @@ import static org.hyperledger.besu.ethereum.worldstate.DataStorageConfiguration.DEFAULT_BONSAI_MAX_LAYERS_TO_LOAD; import static org.hyperledger.besu.ethereum.worldstate.DataStorageConfiguration.DEFAULT_RECEIPT_COMPACTION_ENABLED; import static org.hyperledger.besu.ethereum.worldstate.DataStorageConfiguration.Unstable.DEFAULT_BONSAI_CODE_USING_CODE_HASH_ENABLED; +import static org.hyperledger.besu.ethereum.worldstate.DataStorageConfiguration.Unstable.DEFAULT_BONSAI_FULL_FLAT_DB_ENABLED; import static org.hyperledger.besu.ethereum.worldstate.DataStorageConfiguration.Unstable.DEFAULT_BONSAI_LIMIT_TRIE_LOGS_ENABLED; import static org.hyperledger.besu.ethereum.worldstate.DataStorageConfiguration.Unstable.DEFAULT_BONSAI_TRIE_LOG_PRUNING_WINDOW_SIZE; import static org.hyperledger.besu.ethereum.worldstate.DataStorageConfiguration.Unstable.MINIMUM_BONSAI_TRIE_LOG_RETENTION_LIMIT; @@ -93,6 +94,18 @@ public static class Unstable { "The max number of blocks to load and prune trie logs for at startup. (default: ${DEFAULT-VALUE})") private int bonsaiTrieLogPruningWindowSize = DEFAULT_BONSAI_TRIE_LOG_PRUNING_WINDOW_SIZE; + // TODO: --Xsnapsync-synchronizer-flat-db-healing-enabled is deprecated, remove it in a future + // release + @CommandLine.Option( + hidden = true, + names = { + "--Xbonsai-full-flat-db-enabled", + "--Xsnapsync-synchronizer-flat-db-healing-enabled" + }, + arity = "1", + description = "Enables bonsai full flat database strategy. (default: ${DEFAULT-VALUE})") + private Boolean bonsaiFullFlatDbEnabled = DEFAULT_BONSAI_FULL_FLAT_DB_ENABLED; + @CommandLine.Option( hidden = true, names = {"--Xbonsai-code-using-code-hash-enabled"}, @@ -161,6 +174,8 @@ public static DataStorageOptions fromConfig(final DataStorageConfiguration domai domainObject.getUnstable().getBonsaiLimitTrieLogsEnabled(); dataStorageOptions.unstableOptions.bonsaiTrieLogPruningWindowSize = domainObject.getUnstable().getBonsaiTrieLogPruningWindowSize(); + dataStorageOptions.unstableOptions.bonsaiFullFlatDbEnabled = + domainObject.getUnstable().getBonsaiFullFlatDbEnabled(); dataStorageOptions.unstableOptions.bonsaiCodeUsingCodeHashEnabled = domainObject.getUnstable().getBonsaiCodeStoredByCodeHashEnabled(); @@ -177,6 +192,7 @@ public DataStorageConfiguration toDomainObject() { ImmutableDataStorageConfiguration.Unstable.builder() .bonsaiLimitTrieLogsEnabled(unstableOptions.bonsaiLimitTrieLogsEnabled) .bonsaiTrieLogPruningWindowSize(unstableOptions.bonsaiTrieLogPruningWindowSize) + .bonsaiFullFlatDbEnabled(unstableOptions.bonsaiFullFlatDbEnabled) .bonsaiCodeStoredByCodeHashEnabled(unstableOptions.bonsaiCodeUsingCodeHashEnabled) .build()) .build(); diff --git a/besu/src/main/java/org/hyperledger/besu/cli/options/unstable/SynchronizerOptions.java b/besu/src/main/java/org/hyperledger/besu/cli/options/unstable/SynchronizerOptions.java index 1adf7080582e..e52839cceb4c 100644 --- a/besu/src/main/java/org/hyperledger/besu/cli/options/unstable/SynchronizerOptions.java +++ b/besu/src/main/java/org/hyperledger/besu/cli/options/unstable/SynchronizerOptions.java @@ -81,9 +81,6 @@ public class SynchronizerOptions implements CLIOptions