From dcf291dc28258ccd9c435f6c0a6b15b8633a842f Mon Sep 17 00:00:00 2001 From: Ratan Rai Sur Date: Tue, 24 Sep 2019 01:02:48 +0300 Subject: [PATCH 1/7] test new pruning default Signed-off-by: Ratan Rai Sur --- .../hyperledger/besu/cli/BesuCommandTest.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) 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 4e71e52149a..2d34ad6142b 100644 --- a/besu/src/test/java/org/hyperledger/besu/cli/BesuCommandTest.java +++ b/besu/src/test/java/org/hyperledger/besu/cli/BesuCommandTest.java @@ -2316,6 +2316,28 @@ public void miningParametersAreCaptured() throws Exception { .isEqualTo(BytesValue.fromHexString(extraDataString)); } + @Test + 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 pruningIsEnabledWhenSpecified() throws Exception { parseCommand("--pruning-enabled"); From 063d0e1a5033d93b0fbdb4cb0d61017a428c8f42 Mon Sep 17 00:00:00 2001 From: Ratan Rai Sur Date: Thu, 24 Oct 2019 12:48:03 -0400 Subject: [PATCH 2/7] enable pruning for fast sync Signed-off-by: Ratan Rai Sur --- .../java/org/hyperledger/besu/cli/BesuCommand.java | 13 ++++++++----- .../besu/controller/BesuControllerBuilder.java | 2 +- .../org/hyperledger/besu/cli/BesuCommandTest.java | 6 +++--- .../hyperledger/besu/cli/CommandTestAbstract.java | 2 +- besu/src/test/resources/everything_config.toml | 3 +++ 5 files changed, 16 insertions(+), 10 deletions(-) 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 ffa21237ec8..1a1d63fb8de 100644 --- a/besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java +++ b/besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java @@ -583,10 +583,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"}, @@ -1020,7 +1019,7 @@ private void issueOptionWarnings() { logger, commandLine, "--pruning-enabled", - !isPruningEnabled, + !getPruningDefault(), asList("--pruning-block-confirmations", "--pruning-blocks-retained")); } @@ -1096,7 +1095,7 @@ public BesuControllerBuilder getControllerBuilder() { .clock(Clock.systemUTC()) .isRevertReasonEnabled(isRevertReasonEnabled) .storageProvider(keyStorageProvider(keyValueStorageName)) - .isPruningEnabled(isPruningEnabled) + .pruningEnabled(getPruningDefault()) .pruningConfiguration(buildPruningConfiguration()) .genesisConfigOverrides(genesisConfigOverrides) .targetGasLimit(targetGasLimit == null ? Optional.empty() : Optional.of(targetGasLimit)) @@ -1383,6 +1382,10 @@ private PruningConfiguration buildPruningConfiguration() { return new PruningConfiguration(pruningBlockConfirmations, pruningBlocksRetained); } + private boolean getPruningDefault() { + return pruningOverride == null ? syncMode == SyncMode.FAST : pruningOverride; + } + // 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 b4baacbf6c9..4dd85e5c300 100644 --- a/besu/src/main/java/org/hyperledger/besu/controller/BesuControllerBuilder.java +++ b/besu/src/main/java/org/hyperledger/besu/controller/BesuControllerBuilder.java @@ -167,7 +167,7 @@ public BesuControllerBuilder isRevertReasonEnabled(final boolean isRevertReas return this; } - public BesuControllerBuilder isPruningEnabled(final boolean pruningEnabled) { + public BesuControllerBuilder pruningEnabled(final boolean pruningEnabled) { this.isPruningEnabled = pruningEnabled; 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 2d34ad6142b..2d21249cab2 100644 --- a/besu/src/test/java/org/hyperledger/besu/cli/BesuCommandTest.java +++ b/besu/src/test/java/org/hyperledger/besu/cli/BesuCommandTest.java @@ -2320,7 +2320,7 @@ public void miningParametersAreCaptured() throws Exception { public void pruningIsEnabledIfSyncModeIsFast() { parseCommand("--sync-mode", "FAST"); - verify(mockControllerBuilder).isPruningEnabled(true); + verify(mockControllerBuilder).pruningEnabled(true); verify(mockControllerBuilder).build(); assertThat(commandOutput.toString()).isEmpty(); @@ -2331,7 +2331,7 @@ public void pruningIsEnabledIfSyncModeIsFast() { public void pruningIsDisabledIfSyncModeIsFull() { parseCommand("--sync-mode", "FULL"); - verify(mockControllerBuilder).isPruningEnabled(false); + verify(mockControllerBuilder).pruningEnabled(false); verify(mockControllerBuilder).build(); assertThat(commandOutput.toString()).isEmpty(); @@ -2342,7 +2342,7 @@ public void pruningIsDisabledIfSyncModeIsFull() { public void pruningIsEnabledWhenSpecified() throws Exception { parseCommand("--pruning-enabled"); - verify(mockControllerBuilder).isPruningEnabled(true); + verify(mockControllerBuilder).pruningEnabled(true); verify(mockControllerBuilder).build(); assertThat(commandOutput.toString()).isEmpty(); diff --git a/besu/src/test/java/org/hyperledger/besu/cli/CommandTestAbstract.java b/besu/src/test/java/org/hyperledger/besu/cli/CommandTestAbstract.java index 4de6e11bfd7..b5607a178f5 100644 --- a/besu/src/test/java/org/hyperledger/besu/cli/CommandTestAbstract.java +++ b/besu/src/test/java/org/hyperledger/besu/cli/CommandTestAbstract.java @@ -166,7 +166,7 @@ public void initMocks() throws Exception { when(mockControllerBuilder.clock(any())).thenReturn(mockControllerBuilder); when(mockControllerBuilder.isRevertReasonEnabled(false)).thenReturn(mockControllerBuilder); when(mockControllerBuilder.storageProvider(any())).thenReturn(mockControllerBuilder); - when(mockControllerBuilder.isPruningEnabled(anyBoolean())).thenReturn(mockControllerBuilder); + when(mockControllerBuilder.pruningEnabled(anyBoolean())).thenReturn(mockControllerBuilder); when(mockControllerBuilder.pruningConfiguration(any())).thenReturn(mockControllerBuilder); when(mockControllerBuilder.genesisConfigOverrides(any())).thenReturn(mockControllerBuilder); when(mockControllerBuilder.targetGasLimit(any())).thenReturn(mockControllerBuilder); diff --git a/besu/src/test/resources/everything_config.toml b/besu/src/test/resources/everything_config.toml index d77d6bb25bd..c36a5983665 100644 --- a/besu/src/test/resources/everything_config.toml +++ b/besu/src/test/resources/everything_config.toml @@ -82,6 +82,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" From 977a7da4529c241404df0ab5d6f8fa5b95ebcfb9 Mon Sep 17 00:00:00 2001 From: Ratan Rai Sur Date: Thu, 24 Oct 2019 15:23:00 -0400 Subject: [PATCH 3/7] wrap null in Optional.ofNullable Signed-off-by: Ratan Rai Sur --- besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 1a1d63fb8de..49a6af91f38 100644 --- a/besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java +++ b/besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java @@ -1383,7 +1383,7 @@ private PruningConfiguration buildPruningConfiguration() { } private boolean getPruningDefault() { - return pruningOverride == null ? syncMode == SyncMode.FAST : pruningOverride; + return Optional.ofNullable(pruningOverride).orElse(syncMode == SyncMode.FAST); } // Blockchain synchronisation from peers. From a04117f59b16d4cd5121d1201de83a4a7379cb42 Mon Sep 17 00:00:00 2001 From: Ratan Rai Sur Date: Thu, 24 Oct 2019 15:24:33 -0400 Subject: [PATCH 4/7] fix missed rename Signed-off-by: Ratan Rai Sur --- .../hyperledger/besu/controller/BesuControllerBuilder.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 4dd85e5c300..0f77ba44b7a 100644 --- a/besu/src/main/java/org/hyperledger/besu/controller/BesuControllerBuilder.java +++ b/besu/src/main/java/org/hyperledger/besu/controller/BesuControllerBuilder.java @@ -88,7 +88,7 @@ public abstract class BesuControllerBuilder { GasLimitCalculator gasLimitCalculator; private StorageProvider storageProvider; private final List shutdownActions = new ArrayList<>(); - private boolean isPruningEnabled; + private boolean pruningEnabled; private PruningConfiguration pruningConfiguration; Map genesisConfigOverrides; private Map requiredBlocks = Collections.emptyMap(); @@ -168,7 +168,7 @@ public BesuControllerBuilder isRevertReasonEnabled(final boolean isRevertReas } public BesuControllerBuilder pruningEnabled(final boolean pruningEnabled) { - this.isPruningEnabled = pruningEnabled; + this.pruningEnabled = pruningEnabled; return this; } @@ -225,7 +225,7 @@ public BesuController build() { final MutableBlockchain blockchain = protocolContext.getBlockchain(); Optional maybePruner = Optional.empty(); - if (isPruningEnabled) { + if (pruningEnabled) { checkState( storageProvider.isWorldStateIterable(), "Cannot enable pruning with current database version. Resync to get the latest version."); From e2cd7dacfa58762d0b13eb51b36dcdcacc382607 Mon Sep 17 00:00:00 2001 From: Ratan Rai Sur Date: Mon, 4 Nov 2019 16:31:53 -0500 Subject: [PATCH 5/7] rename Signed-off-by: Ratan Rai Sur --- .../main/java/org/hyperledger/besu/cli/BesuCommand.java | 2 +- .../besu/controller/BesuControllerBuilder.java | 8 ++++---- .../java/org/hyperledger/besu/cli/BesuCommandTest.java | 6 +++--- .../org/hyperledger/besu/cli/CommandTestAbstract.java | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) 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 78189102b72..f7d79cc9f77 100644 --- a/besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java +++ b/besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java @@ -1087,7 +1087,7 @@ public BesuControllerBuilder getControllerBuilder() { .clock(Clock.systemUTC()) .isRevertReasonEnabled(isRevertReasonEnabled) .storageProvider(keyStorageProvider(keyValueStorageName)) - .pruningEnabled(getPruningDefault()) + .isPruningEnabled(getPruningDefault()) .pruningConfiguration(buildPruningConfiguration()) .genesisConfigOverrides(genesisConfigOverrides) .targetGasLimit(targetGasLimit == null ? Optional.empty() : Optional.of(targetGasLimit)) 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 85c0741057a..270cbaf1a68 100644 --- a/besu/src/main/java/org/hyperledger/besu/controller/BesuControllerBuilder.java +++ b/besu/src/main/java/org/hyperledger/besu/controller/BesuControllerBuilder.java @@ -80,7 +80,7 @@ public abstract class BesuControllerBuilder { protected boolean isRevertReasonEnabled; GasLimitCalculator gasLimitCalculator; private StorageProvider storageProvider; - private boolean pruningEnabled; + private boolean isPruningEnabled; private PruningConfiguration pruningConfiguration; Map genesisConfigOverrides; private Map requiredBlocks = Collections.emptyMap(); @@ -159,8 +159,8 @@ public BesuControllerBuilder isRevertReasonEnabled(final boolean isRevertReas return this; } - public BesuControllerBuilder pruningEnabled(final boolean pruningEnabled) { - this.pruningEnabled = pruningEnabled; + public BesuControllerBuilder isPruningEnabled(final boolean isPruningEnabled) { + this.isPruningEnabled = isPruningEnabled; return this; } @@ -217,7 +217,7 @@ public BesuController build() { final MutableBlockchain blockchain = protocolContext.getBlockchain(); Optional maybePruner = Optional.empty(); - if (pruningEnabled) { + if (isPruningEnabled) { checkState( storageProvider.isWorldStateIterable(), "Cannot enable pruning with current database version. Resync to get the latest version."); 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 302f038ac8c..9eec96b8472 100644 --- a/besu/src/test/java/org/hyperledger/besu/cli/BesuCommandTest.java +++ b/besu/src/test/java/org/hyperledger/besu/cli/BesuCommandTest.java @@ -2330,7 +2330,7 @@ public void miningParametersAreCaptured() throws Exception { public void pruningIsEnabledIfSyncModeIsFast() { parseCommand("--sync-mode", "FAST"); - verify(mockControllerBuilder).pruningEnabled(true); + verify(mockControllerBuilder).isPruningEnabled(true); verify(mockControllerBuilder).build(); assertThat(commandOutput.toString()).isEmpty(); @@ -2341,7 +2341,7 @@ public void pruningIsEnabledIfSyncModeIsFast() { public void pruningIsDisabledIfSyncModeIsFull() { parseCommand("--sync-mode", "FULL"); - verify(mockControllerBuilder).pruningEnabled(false); + verify(mockControllerBuilder).isPruningEnabled(false); verify(mockControllerBuilder).build(); assertThat(commandOutput.toString()).isEmpty(); @@ -2352,7 +2352,7 @@ public void pruningIsDisabledIfSyncModeIsFull() { public void pruningIsEnabledWhenSpecified() throws Exception { parseCommand("--pruning-enabled"); - verify(mockControllerBuilder).pruningEnabled(true); + verify(mockControllerBuilder).isPruningEnabled(true); verify(mockControllerBuilder).build(); assertThat(commandOutput.toString()).isEmpty(); diff --git a/besu/src/test/java/org/hyperledger/besu/cli/CommandTestAbstract.java b/besu/src/test/java/org/hyperledger/besu/cli/CommandTestAbstract.java index 98baadc94e8..f28246fd427 100644 --- a/besu/src/test/java/org/hyperledger/besu/cli/CommandTestAbstract.java +++ b/besu/src/test/java/org/hyperledger/besu/cli/CommandTestAbstract.java @@ -167,7 +167,7 @@ public void initMocks() throws Exception { when(mockControllerBuilder.clock(any())).thenReturn(mockControllerBuilder); when(mockControllerBuilder.isRevertReasonEnabled(false)).thenReturn(mockControllerBuilder); when(mockControllerBuilder.storageProvider(any())).thenReturn(mockControllerBuilder); - when(mockControllerBuilder.pruningEnabled(anyBoolean())).thenReturn(mockControllerBuilder); + when(mockControllerBuilder.isPruningEnabled(anyBoolean())).thenReturn(mockControllerBuilder); when(mockControllerBuilder.pruningConfiguration(any())).thenReturn(mockControllerBuilder); when(mockControllerBuilder.genesisConfigOverrides(any())).thenReturn(mockControllerBuilder); when(mockControllerBuilder.targetGasLimit(any())).thenReturn(mockControllerBuilder); From b6bc1a3598a6a083ff6118f717e40c3de86ea901 Mon Sep 17 00:00:00 2001 From: Ratan Rai Sur Date: Mon, 4 Nov 2019 16:32:25 -0500 Subject: [PATCH 6/7] rename Signed-off-by: Ratan Rai Sur --- .../src/main/java/org/hyperledger/besu/cli/BesuCommand.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 f7d79cc9f77..50eca10ca02 100644 --- a/besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java +++ b/besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java @@ -1011,7 +1011,7 @@ private void issueOptionWarnings() { logger, commandLine, "--pruning-enabled", - !getPruningDefault(), + !isPruningEnabled(), asList("--pruning-block-confirmations", "--pruning-blocks-retained")); } @@ -1087,7 +1087,7 @@ public BesuControllerBuilder getControllerBuilder() { .clock(Clock.systemUTC()) .isRevertReasonEnabled(isRevertReasonEnabled) .storageProvider(keyStorageProvider(keyValueStorageName)) - .isPruningEnabled(getPruningDefault()) + .isPruningEnabled(isPruningEnabled()) .pruningConfiguration(buildPruningConfiguration()) .genesisConfigOverrides(genesisConfigOverrides) .targetGasLimit(targetGasLimit == null ? Optional.empty() : Optional.of(targetGasLimit)) @@ -1374,7 +1374,7 @@ private PruningConfiguration buildPruningConfiguration() { return new PruningConfiguration(pruningBlockConfirmations, pruningBlocksRetained); } - private boolean getPruningDefault() { + private boolean isPruningEnabled() { return Optional.ofNullable(pruningOverride).orElse(syncMode == SyncMode.FAST); } From d7518c201e691dfae32526d9779b7b4ee198abd9 Mon Sep 17 00:00:00 2001 From: Ratan Rai Sur Date: Mon, 4 Nov 2019 16:36:24 -0500 Subject: [PATCH 7/7] add explicit tests for enable and disabling pruning Signed-off-by: Ratan Rai Sur --- .../org/hyperledger/besu/cli/BesuCommandTest.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) 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 9eec96b8472..bbc0f75fbaf 100644 --- a/besu/src/test/java/org/hyperledger/besu/cli/BesuCommandTest.java +++ b/besu/src/test/java/org/hyperledger/besu/cli/BesuCommandTest.java @@ -2349,7 +2349,7 @@ public void pruningIsDisabledIfSyncModeIsFull() { } @Test - public void pruningIsEnabledWhenSpecified() throws Exception { + public void pruningEnabledExplicitly() { parseCommand("--pruning-enabled"); verify(mockControllerBuilder).isPruningEnabled(true); @@ -2359,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() {