Skip to content

Commit

Permalink
[PAN-2798] Enable pruning by default for fast sync (hyperledger#135)
Browse files Browse the repository at this point in the history
Signed-off-by: Ratan Rai Sur <ratan.r.sur@gmail.com>
  • Loading branch information
RatanRSur authored Nov 4, 2019
1 parent 72e975e commit 7e2497b
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 8 deletions.
13 changes: 8 additions & 5 deletions besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -587,10 +587,9 @@ void setBannedNodeIds(final List<String> 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"},
Expand Down Expand Up @@ -1012,7 +1011,7 @@ private void issueOptionWarnings() {
logger,
commandLine,
"--pruning-enabled",
!isPruningEnabled,
!isPruningEnabled(),
asList("--pruning-block-confirmations", "--pruning-blocks-retained"));
}

Expand Down Expand Up @@ -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))
Expand Down Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -159,8 +159,8 @@ public BesuControllerBuilder<C> isRevertReasonEnabled(final boolean isRevertReas
return this;
}

public BesuControllerBuilder<C> isPruningEnabled(final boolean pruningEnabled) {
this.isPruningEnabled = pruningEnabled;
public BesuControllerBuilder<C> isPruningEnabled(final boolean isPruningEnabled) {
this.isPruningEnabled = isPruningEnabled;
return this;
}

Expand Down
35 changes: 34 additions & 1 deletion besu/src/test/java/org/hyperledger/besu/cli/BesuCommandTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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() {

Expand Down
3 changes: 3 additions & 0 deletions besu/src/test/resources/everything_config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down

0 comments on commit 7e2497b

Please sign in to comment.