Skip to content

Commit c56dead

Browse files
committed
WIP
Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>
1 parent 44c8052 commit c56dead

File tree

16 files changed

+144
-56
lines changed

16 files changed

+144
-56
lines changed

acceptance-tests/dsl/src/main/java/org/hyperledger/besu/tests/acceptance/dsl/node/BesuNode.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import org.hyperledger.besu.ethereum.p2p.config.NetworkingConfiguration;
3434
import org.hyperledger.besu.ethereum.p2p.rlpx.connections.netty.TLSConfiguration;
3535
import org.hyperledger.besu.ethereum.permissioning.PermissioningConfiguration;
36+
import org.hyperledger.besu.ethereum.worldstate.DataStorageConfiguration;
3637
import org.hyperledger.besu.metrics.prometheus.MetricsConfiguration;
3738
import org.hyperledger.besu.pki.config.PkiKeyStoreConfiguration;
3839
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
@@ -109,6 +110,7 @@ public class BesuNode implements NodeConfiguration, RunnableNode, AutoCloseable
109110
private final WebSocketConfiguration webSocketConfiguration;
110111
private final JsonRpcIpcConfiguration jsonRpcIpcConfiguration;
111112
private final MetricsConfiguration metricsConfiguration;
113+
private final DataStorageConfiguration dataStorageConfiguration;
112114
private Optional<PermissioningConfiguration> permissioningConfiguration;
113115
private final ApiConfiguration apiConfiguration;
114116
private final GenesisConfigurationProvider genesisConfigProvider;
@@ -145,6 +147,7 @@ public BesuNode(
145147
final MetricsConfiguration metricsConfiguration,
146148
final Optional<PermissioningConfiguration> permissioningConfiguration,
147149
final ApiConfiguration apiConfiguration,
150+
final DataStorageConfiguration dataStorageConfiguration,
148151
final Optional<String> keyfilePath,
149152
final boolean devMode,
150153
final NetworkName network,
@@ -195,6 +198,7 @@ public BesuNode(
195198
this.metricsConfiguration = metricsConfiguration;
196199
this.permissioningConfiguration = permissioningConfiguration;
197200
this.apiConfiguration = apiConfiguration;
201+
this.dataStorageConfiguration = dataStorageConfiguration;
198202
this.genesisConfigProvider = genesisConfigProvider;
199203
this.devMode = devMode;
200204
this.network = network;
@@ -690,6 +694,10 @@ public void setPrivacyParameters(final PrivacyParameters privacyParameters) {
690694
this.privacyParameters = privacyParameters;
691695
}
692696

697+
public DataStorageConfiguration getDataStorageConfiguration() {
698+
return dataStorageConfiguration;
699+
}
700+
693701
public boolean isDevMode() {
694702
return devMode;
695703
}

acceptance-tests/dsl/src/main/java/org/hyperledger/besu/tests/acceptance/dsl/node/ThreadBesuNodeRunner.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,12 @@ public void startNode(final BesuNode node) {
145145
final StorageServiceImpl storageService = new StorageServiceImpl();
146146
final SecurityModuleServiceImpl securityModuleService = new SecurityModuleServiceImpl();
147147
final Path dataDir = node.homeDirectory();
148-
final BesuConfiguration commonPluginConfiguration =
149-
new BesuConfigurationImpl(dataDir, dataDir.resolve(DATABASE_PATH));
148+
final BesuConfigurationImpl commonPluginConfiguration = new BesuConfigurationImpl();
149+
commonPluginConfiguration.init(
150+
dataDir,
151+
dataDir.resolve(DATABASE_PATH),
152+
node.getDataStorageConfiguration(),
153+
node.getMiningParameters());
150154
final BesuPluginContextImpl besuPluginContext =
151155
besuPluginContextMap.computeIfAbsent(
152156
node,

acceptance-tests/dsl/src/main/java/org/hyperledger/besu/tests/acceptance/dsl/node/configuration/BesuNodeConfiguration.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.hyperledger.besu.ethereum.p2p.config.NetworkingConfiguration;
2727
import org.hyperledger.besu.ethereum.p2p.rlpx.connections.netty.TLSConfiguration;
2828
import org.hyperledger.besu.ethereum.permissioning.PermissioningConfiguration;
29+
import org.hyperledger.besu.ethereum.worldstate.DataStorageConfiguration;
2930
import org.hyperledger.besu.metrics.prometheus.MetricsConfiguration;
3031
import org.hyperledger.besu.pki.config.PkiKeyStoreConfiguration;
3132
import org.hyperledger.besu.tests.acceptance.dsl.node.configuration.genesis.GenesisConfigurationProvider;
@@ -48,6 +49,7 @@ public class BesuNodeConfiguration {
4849
private final MetricsConfiguration metricsConfiguration;
4950
private final Optional<PermissioningConfiguration> permissioningConfiguration;
5051
private final ApiConfiguration apiConfiguration;
52+
private final DataStorageConfiguration dataStorageConfiguration;
5153
private final Optional<String> keyFilePath;
5254
private final boolean devMode;
5355
private final GenesisConfigurationProvider genesisConfigProvider;
@@ -84,6 +86,7 @@ public class BesuNodeConfiguration {
8486
final MetricsConfiguration metricsConfiguration,
8587
final Optional<PermissioningConfiguration> permissioningConfiguration,
8688
final ApiConfiguration apiConfiguration,
89+
final DataStorageConfiguration dataStorageConfiguration,
8790
final Optional<String> keyFilePath,
8891
final boolean devMode,
8992
final NetworkName network,
@@ -117,6 +120,7 @@ public class BesuNodeConfiguration {
117120
this.metricsConfiguration = metricsConfiguration;
118121
this.permissioningConfiguration = permissioningConfiguration;
119122
this.apiConfiguration = apiConfiguration;
123+
this.dataStorageConfiguration = dataStorageConfiguration;
120124
this.keyFilePath = keyFilePath;
121125
this.dataPath = dataPath;
122126
this.devMode = devMode;
@@ -183,6 +187,10 @@ public ApiConfiguration getApiConfiguration() {
183187
return apiConfiguration;
184188
}
185189

190+
public DataStorageConfiguration getDataStorageConfiguration() {
191+
return dataStorageConfiguration;
192+
}
193+
186194
public Optional<String> getKeyFilePath() {
187195
return keyFilePath;
188196
}

acceptance-tests/dsl/src/main/java/org/hyperledger/besu/tests/acceptance/dsl/node/configuration/BesuNodeConfigurationBuilder.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import org.hyperledger.besu.ethereum.p2p.config.NetworkingConfiguration;
4040
import org.hyperledger.besu.ethereum.p2p.rlpx.connections.netty.TLSConfiguration;
4141
import org.hyperledger.besu.ethereum.permissioning.PermissioningConfiguration;
42+
import org.hyperledger.besu.ethereum.worldstate.DataStorageConfiguration;
4243
import org.hyperledger.besu.metrics.prometheus.MetricsConfiguration;
4344
import org.hyperledger.besu.pki.config.PkiKeyStoreConfiguration;
4445
import org.hyperledger.besu.tests.acceptance.dsl.node.configuration.genesis.GenesisConfigurationProvider;
@@ -73,6 +74,8 @@ public class BesuNodeConfigurationBuilder {
7374
private MetricsConfiguration metricsConfiguration = MetricsConfiguration.builder().build();
7475
private Optional<PermissioningConfiguration> permissioningConfiguration = Optional.empty();
7576
private ApiConfiguration apiConfiguration = ImmutableApiConfiguration.builder().build();
77+
private DataStorageConfiguration dataStorageConfiguration =
78+
DataStorageConfiguration.DEFAULT_CONFIG;
7679
private String keyFilePath = null;
7780
private boolean devMode = true;
7881
private GenesisConfigurationProvider genesisConfigProvider = ignore -> Optional.empty();
@@ -506,6 +509,12 @@ public BesuNodeConfigurationBuilder apiConfiguration(final ApiConfiguration apiC
506509
return this;
507510
}
508511

512+
public BesuNodeConfigurationBuilder dataStorageConfiguration(
513+
final DataStorageConfiguration dataStorageConfiguration) {
514+
this.dataStorageConfiguration = dataStorageConfiguration;
515+
return this;
516+
}
517+
509518
public BesuNodeConfiguration build() {
510519
return new BesuNodeConfiguration(
511520
name,
@@ -519,6 +528,7 @@ public BesuNodeConfiguration build() {
519528
metricsConfiguration,
520529
permissioningConfiguration,
521530
apiConfiguration,
531+
dataStorageConfiguration,
522532
Optional.ofNullable(keyFilePath),
523533
devMode,
524534
network,

acceptance-tests/dsl/src/main/java/org/hyperledger/besu/tests/acceptance/dsl/node/configuration/BesuNodeFactory.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ public BesuNode create(final BesuNodeConfiguration config) throws IOException {
7272
config.getMetricsConfiguration(),
7373
config.getPermissioningConfiguration(),
7474
config.getApiConfiguration(),
75+
config.getDataStorageConfiguration(),
7576
config.getKeyFilePath(),
7677
config.isDevMode(),
7778
config.getNetwork(),

acceptance-tests/dsl/src/main/java/org/hyperledger/besu/tests/acceptance/dsl/privacy/PrivacyNode.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ public class PrivacyNode implements AutoCloseable {
7676
private final boolean isFlexiblePrivacyEnabled;
7777
private final boolean isMultitenancyEnabled;
7878
private final boolean isPrivacyPluginEnabled;
79+
private final BesuNodeConfiguration besuConfig;
7980

8081
public PrivacyNode(
8182
final PrivacyNodeConfiguration privacyConfiguration,
@@ -89,7 +90,7 @@ public PrivacyNode(
8990
selectEnclave(enclaveType, enclaveDir, config, privacyConfiguration, containerNetwork);
9091
this.vertx = vertx;
9192

92-
final BesuNodeConfiguration besuConfig = config;
93+
this.besuConfig = config;
9394

9495
isFlexiblePrivacyEnabled = privacyConfiguration.isFlexiblePrivacyGroupEnabled();
9596
isMultitenancyEnabled = privacyConfiguration.isMultitenancyEnabled();
@@ -108,6 +109,7 @@ public PrivacyNode(
108109
besuConfig.getMetricsConfiguration(),
109110
besuConfig.getPermissioningConfiguration(),
110111
besuConfig.getApiConfiguration(),
112+
besuConfig.getDataStorageConfiguration(),
111113
besuConfig.getKeyFilePath(),
112114
besuConfig.isDevMode(),
113115
besuConfig.getNetwork(),
@@ -272,6 +274,8 @@ public NodeConfiguration getConfiguration() {
272274

273275
private PrivacyStorageProvider createKeyValueStorageProvider(
274276
final Path dataLocation, final Path dbLocation) {
277+
final var besuConfiguration = new BesuConfigurationImpl();
278+
besuConfiguration.init(dataLocation, dbLocation, null, besuConfig.getMiningParameters());
275279
return new PrivacyKeyValueStorageProviderBuilder()
276280
.withStorageFactory(
277281
new RocksDBKeyValuePrivacyStorageFactory(
@@ -284,7 +288,7 @@ private PrivacyStorageProvider createKeyValueStorageProvider(
284288
DEFAULT_IS_HIGH_SPEC),
285289
Arrays.asList(KeyValueSegmentIdentifier.values()),
286290
RocksDBMetricsFactory.PRIVATE_ROCKS_DB_METRICS)))
287-
.withCommonConfiguration(new BesuConfigurationImpl(dataLocation, dbLocation))
291+
.withCommonConfiguration(besuConfiguration)
288292
.withMetricsSystem(new NoOpMetricsSystem())
289293
.build();
290294
}

besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java

Lines changed: 24 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@
138138
import org.hyperledger.besu.ethereum.storage.keyvalue.KeyValueStorageProvider;
139139
import org.hyperledger.besu.ethereum.storage.keyvalue.KeyValueStorageProviderBuilder;
140140
import org.hyperledger.besu.ethereum.trie.forest.pruner.PrunerConfiguration;
141+
import org.hyperledger.besu.ethereum.worldstate.DataStorageConfiguration;
141142
import org.hyperledger.besu.ethereum.worldstate.DataStorageFormat;
142143
import org.hyperledger.besu.evm.precompile.AbstractAltBnPrecompiledContract;
143144
import org.hyperledger.besu.evm.precompile.BigIntegerModularExponentiationPrecompiledContract;
@@ -173,6 +174,7 @@
173174
import org.hyperledger.besu.plugin.services.storage.rocksdb.RocksDBPlugin;
174175
import org.hyperledger.besu.plugin.services.txselection.PluginTransactionSelectorFactory;
175176
import org.hyperledger.besu.plugin.services.txvalidator.PluginTransactionValidatorFactory;
177+
import org.hyperledger.besu.services.BesuConfigurationImpl;
176178
import org.hyperledger.besu.services.BesuEventsImpl;
177179
import org.hyperledger.besu.services.BesuPluginContextImpl;
178180
import org.hyperledger.besu.services.BlockchainServiceImpl;
@@ -893,9 +895,10 @@ static class MetricsOptionGroup {
893895
private MetricsConfiguration metricsConfiguration;
894896
private Optional<PermissioningConfiguration> permissioningConfiguration;
895897
private Optional<TLSConfiguration> p2pTLSConfiguration;
898+
private DataStorageConfiguration dataStorageConfiguration;
896899
private Collection<EnodeURL> staticNodes;
897900
private BesuController besuController;
898-
private BesuConfiguration pluginCommonConfiguration;
901+
private BesuConfigurationImpl pluginCommonConfiguration;
899902
private MiningParameters miningParameters;
900903

901904
private BesuComponent besuComponent;
@@ -1000,7 +1003,7 @@ protected BesuCommand(
10001003
this.securityModuleService = securityModuleService;
10011004
this.permissioningService = permissioningService;
10021005
this.privacyPluginService = privacyPluginService;
1003-
pluginCommonConfiguration = new BesuCommandConfigurationService();
1006+
this.pluginCommonConfiguration = new BesuConfigurationImpl();
10041007
besuPluginContext.addService(BesuConfiguration.class, pluginCommonConfiguration);
10051008
this.pkiBlockCreationConfigProvider = pkiBlockCreationConfigProvider;
10061009
this.rpcEndpointServiceImpl = rpcEndpointServiceImpl;
@@ -1076,7 +1079,7 @@ public void run() {
10761079
validateOptions();
10771080
configure();
10781081
configureNativeLibs();
1079-
besuController = initController();
1082+
besuController = buildController();
10801083

10811084
besuPluginContext.beforeExternalServices();
10821085

@@ -1098,7 +1101,7 @@ public void run() {
10981101
}
10991102

11001103
@VisibleForTesting
1101-
void setBesuConfiguration(final BesuConfiguration pluginCommonConfiguration) {
1104+
void setBesuConfiguration(final BesuConfigurationImpl pluginCommonConfiguration) {
11021105
this.pluginCommonConfiguration = pluginCommonConfiguration;
11031106
}
11041107

@@ -1674,6 +1677,7 @@ private void configure() throws Exception {
16741677
unstableIpcOptions.getIpcPath(),
16751678
unstableIpcOptions.getRpcIpcApis());
16761679
apiConfiguration = apiConfigurationOptions.apiConfiguration(getMiningParameters());
1680+
dataStorageConfiguration = getDataStorageConfiguration();
16771681
// hostsWhitelist is a hidden option. If it is specified, add the list to hostAllowlist
16781682
if (!hostsWhitelist.isEmpty()) {
16791683
// if allowlist == default values, remove the default values
@@ -1736,10 +1740,6 @@ private void ensureAllNodesAreInAllowlist(
17361740
}
17371741
}
17381742

1739-
private BesuController initController() {
1740-
return buildController();
1741-
}
1742-
17431743
/**
17441744
* Builds BesuController
17451745
*
@@ -1761,6 +1761,11 @@ public BesuController buildController() {
17611761
* @return instance of BesuControllerBuilder
17621762
*/
17631763
public BesuControllerBuilder getControllerBuilder() {
1764+
pluginCommonConfiguration.init(
1765+
dataDir(),
1766+
dataDir().resolve(DATABASE_PATH),
1767+
getDataStorageConfiguration(),
1768+
getMiningParameters());
17641769
final KeyValueStorageProvider storageProvider = keyValueStorageProvider(keyValueStorageName);
17651770
return controllerBuilderFactory
17661771
.fromEthNetworkConfig(
@@ -1771,6 +1776,7 @@ public BesuControllerBuilder getControllerBuilder() {
17711776
.transactionSelectorFactory(getTransactionSelectorFactory())
17721777
.pluginTransactionValidatorFactory(getPluginTransactionValidatorFactory())
17731778
.dataDirectory(dataDir())
1779+
.dataStorageConfiguration(getDataStorageConfiguration())
17741780
.miningParameters(getMiningParameters())
17751781
.transactionPoolConfiguration(buildTransactionPoolConfiguration())
17761782
.nodeKey(new NodeKey(securityModule()))
@@ -1792,7 +1798,6 @@ public BesuControllerBuilder getControllerBuilder() {
17921798
.requiredBlocks(requiredBlocks)
17931799
.reorgLoggingThreshold(reorgLoggingThreshold)
17941800
.evmConfiguration(unstableEvmOptions.toDomainObject())
1795-
.dataStorageConfiguration(dataStorageOptions.toDomainObject())
17961801
.maxPeers(p2PDiscoveryOptionGroup.maxPeers)
17971802
.maxRemotelyInitiatedPeers(maxRemoteInitiatedPeers)
17981803
.randomPeerPriority(p2PDiscoveryOptionGroup.randomPeerPriority)
@@ -2127,6 +2132,13 @@ private MiningParameters getMiningParameters() {
21272132
return miningParameters;
21282133
}
21292134

2135+
private DataStorageConfiguration getDataStorageConfiguration() {
2136+
if (dataStorageConfiguration == null) {
2137+
dataStorageConfiguration = dataStorageOptions.toDomainObject();
2138+
}
2139+
return dataStorageConfiguration;
2140+
}
2141+
21302142
private OptionalInt getGenesisBlockPeriodSeconds(
21312143
final GenesisConfigOptions genesisConfigOptions) {
21322144
if (genesisConfigOptions.isClique()) {
@@ -2538,24 +2550,6 @@ String getLogLevel() {
25382550
return loggingLevelOption.getLogLevel();
25392551
}
25402552

2541-
private class BesuCommandConfigurationService implements BesuConfiguration {
2542-
2543-
@Override
2544-
public Path getStoragePath() {
2545-
return dataDir().resolve(DATABASE_PATH);
2546-
}
2547-
2548-
@Override
2549-
public Path getDataPath() {
2550-
return dataDir();
2551-
}
2552-
2553-
@Override
2554-
public int getDatabaseVersion() {
2555-
return dataStorageOptions.toDomainObject().getDataStorageFormat().getDatabaseVersion();
2556-
}
2557-
}
2558-
25592553
private void instantiateSignatureAlgorithmFactory() {
25602554
if (SignatureAlgorithmFactory.isInstanceSet()) {
25612555
return;
@@ -2714,12 +2708,11 @@ private String generateConfigurationOverview() {
27142708
builder.setHighSpecEnabled();
27152709
}
27162710

2717-
if (dataStorageOptions.toDomainObject().getUnstable().getBonsaiLimitTrieLogsEnabled()) {
2711+
if (getDataStorageConfiguration().getUnstable().getBonsaiLimitTrieLogsEnabled()) {
27182712
builder.setLimitTrieLogsEnabled();
2719-
builder.setTrieLogRetentionLimit(
2720-
dataStorageOptions.toDomainObject().getBonsaiMaxLayersToLoad());
2713+
builder.setTrieLogRetentionLimit(getDataStorageConfiguration().getBonsaiMaxLayersToLoad());
27212714
builder.setTrieLogsPruningWindowSize(
2722-
dataStorageOptions.toDomainObject().getUnstable().getBonsaiTrieLogPruningWindowSize());
2715+
getDataStorageConfiguration().getUnstable().getBonsaiTrieLogPruningWindowSize());
27232716
}
27242717

27252718
builder.setTxPoolImplementation(buildTransactionPoolConfiguration().getTxPoolImplementation());

besu/src/main/java/org/hyperledger/besu/controller/BesuControllerBuilder.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -576,6 +576,7 @@ public BesuController build() {
576576
checkNotNull(gasLimitCalculator, "Missing gas limit calculator");
577577
checkNotNull(evmConfiguration, "Missing evm config");
578578
checkNotNull(networkingConfiguration, "Missing network configuration");
579+
checkNotNull(dataStorageConfiguration, "Missing data storage configuration");
579580
prepForBuild();
580581

581582
final ProtocolSchedule protocolSchedule = createProtocolSchedule();

0 commit comments

Comments
 (0)