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 bdc4c9f61df..50eca10ca02 100644 --- a/besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java +++ b/besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java @@ -587,10 +587,9 @@ void setBannedNodeIds(final List values) { @Option( names = {"--pruning-enabled"}, - hidden = true, description = - "Enable pruning of world state of blocks older than the retention period (default: ${DEFAULT-VALUE})") - private final Boolean isPruningEnabled = false; + "Enable pruning of world state of blocks older than the retention period (default: true if fast sync is enabled, false otherwise)") + private Boolean pruningOverride; @Option( names = {"--pruning-blocks-retained"}, @@ -1012,7 +1011,7 @@ private void issueOptionWarnings() { logger, commandLine, "--pruning-enabled", - !isPruningEnabled, + !isPruningEnabled(), asList("--pruning-block-confirmations", "--pruning-blocks-retained")); } @@ -1088,7 +1087,7 @@ public BesuControllerBuilder getControllerBuilder() { .clock(Clock.systemUTC()) .isRevertReasonEnabled(isRevertReasonEnabled) .storageProvider(keyStorageProvider(keyValueStorageName)) - .isPruningEnabled(isPruningEnabled) + .isPruningEnabled(isPruningEnabled()) .pruningConfiguration(buildPruningConfiguration()) .genesisConfigOverrides(genesisConfigOverrides) .targetGasLimit(targetGasLimit == null ? Optional.empty() : Optional.of(targetGasLimit)) @@ -1375,6 +1374,10 @@ private PruningConfiguration buildPruningConfiguration() { return new PruningConfiguration(pruningBlockConfirmations, pruningBlocksRetained); } + private boolean isPruningEnabled() { + return Optional.ofNullable(pruningOverride).orElse(syncMode == SyncMode.FAST); + } + // Blockchain synchronisation from peers. private void synchronize( final BesuController controller, diff --git a/besu/src/main/java/org/hyperledger/besu/controller/BesuControllerBuilder.java b/besu/src/main/java/org/hyperledger/besu/controller/BesuControllerBuilder.java index 9d9288063a4..270cbaf1a68 100644 --- a/besu/src/main/java/org/hyperledger/besu/controller/BesuControllerBuilder.java +++ b/besu/src/main/java/org/hyperledger/besu/controller/BesuControllerBuilder.java @@ -159,8 +159,8 @@ public BesuControllerBuilder isRevertReasonEnabled(final boolean isRevertReas return this; } - public BesuControllerBuilder isPruningEnabled(final boolean pruningEnabled) { - this.isPruningEnabled = pruningEnabled; + public BesuControllerBuilder isPruningEnabled(final boolean isPruningEnabled) { + this.isPruningEnabled = isPruningEnabled; return this; } diff --git a/besu/src/test/java/org/hyperledger/besu/cli/BesuCommandTest.java b/besu/src/test/java/org/hyperledger/besu/cli/BesuCommandTest.java index 5704da843e1..bbc0f75fbaf 100644 --- a/besu/src/test/java/org/hyperledger/besu/cli/BesuCommandTest.java +++ b/besu/src/test/java/org/hyperledger/besu/cli/BesuCommandTest.java @@ -2327,7 +2327,29 @@ public void miningParametersAreCaptured() throws Exception { } @Test - public void pruningIsEnabledWhenSpecified() throws Exception { + public void pruningIsEnabledIfSyncModeIsFast() { + parseCommand("--sync-mode", "FAST"); + + verify(mockControllerBuilder).isPruningEnabled(true); + verify(mockControllerBuilder).build(); + + assertThat(commandOutput.toString()).isEmpty(); + assertThat(commandErrorOutput.toString()).isEmpty(); + } + + @Test + public void pruningIsDisabledIfSyncModeIsFull() { + parseCommand("--sync-mode", "FULL"); + + verify(mockControllerBuilder).isPruningEnabled(false); + verify(mockControllerBuilder).build(); + + assertThat(commandOutput.toString()).isEmpty(); + assertThat(commandErrorOutput.toString()).isEmpty(); + } + + @Test + public void pruningEnabledExplicitly() { parseCommand("--pruning-enabled"); verify(mockControllerBuilder).isPruningEnabled(true); @@ -2337,6 +2359,17 @@ public void pruningIsEnabledWhenSpecified() throws Exception { assertThat(commandErrorOutput.toString()).isEmpty(); } + @Test + public void pruningDisabledExplicitly() { + parseCommand("--pruning-enabled=false"); + + verify(mockControllerBuilder).isPruningEnabled(false); + verify(mockControllerBuilder).build(); + + assertThat(commandOutput.toString()).isEmpty(); + assertThat(commandErrorOutput.toString()).isEmpty(); + } + @Test public void pruningOptionsRequiresServiceToBeEnabled() { diff --git a/besu/src/test/resources/everything_config.toml b/besu/src/test/resources/everything_config.toml index dfa3c032859..b480d4f1253 100644 --- a/besu/src/test/resources/everything_config.toml +++ b/besu/src/test/resources/everything_config.toml @@ -83,6 +83,9 @@ miner-coinbase="0x0000000000000000000000000000000000000002" miner-extra-data="0x444F4E27542050414E4943202120484F444C2C20484F444C2C20484F444C2021" min-gas-price=1 +# Pruning +pruning-enabled=true + # Permissioning permissions-nodes-config-file-enabled=false permissions-nodes-config-file="./permissions_config.toml"