Skip to content

Commit 4c1c4c5

Browse files
authored
Merge pull request #92 from meldsun0/79-passing-data-dir-as-a-command-line-option
Adding --data-path option
2 parents 21decf5 + 358fdb0 commit 4c1c4c5

File tree

4 files changed

+119
-12
lines changed

4 files changed

+119
-12
lines changed

core/src/main/java/samba/cli/SambaCommand.java

+16
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,14 @@
33
import samba.Samba;
44
import samba.config.InvalidConfigurationException;
55
import samba.config.SambaConfiguration;
6+
import samba.config.StorageConfig;
67
import samba.network.NetworkType;
78
import samba.samba.exceptions.ExceptionUtil;
89
import samba.services.discovery.Bootnodes;
910
import samba.storage.DatabaseStorageException;
1011

1112
import java.io.PrintWriter;
13+
import java.nio.file.Path;
1214
import java.util.List;
1315
import java.util.Map;
1416
import java.util.Optional;
@@ -76,6 +78,13 @@ public class SambaCommand implements Callable<Integer> {
7678
arity = "1")
7779
private String jsonRpcHost = null;
7880

81+
@CommandLine.Option(
82+
names = {"--data-path"},
83+
paramLabel = "<PATH>",
84+
description = "The path to Samba data directory",
85+
arity = "1")
86+
final Path dataPath = StorageConfig.getDefaultSambaDataPath(this);
87+
7988
public SambaCommand(
8089
final PrintWriter outputWriter,
8190
final PrintWriter errorWriter,
@@ -112,6 +121,12 @@ protected SambaConfiguration sambaConfiguration() {
112121
discoveryConfig.networkInterfaces(p2pIps);
113122
}
114123
});
124+
builder.storage(
125+
storageConfig -> {
126+
if (dataPath != null) {
127+
storageConfig.dataPath(dataPath);
128+
}
129+
});
115130
builder.jsonRpc(
116131
jsonRpc -> {
117132
if (jsonRpcPort != null) {
@@ -121,6 +136,7 @@ protected SambaConfiguration sambaConfiguration() {
121136
jsonRpc.setHost(jsonRpcHost);
122137
}
123138
});
139+
124140
if (unsafePrivateKey != null) {
125141
builder.secretKey(unsafePrivateKey);
126142
}

core/src/main/java/samba/config/SambaConfiguration.java

+18-4
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,23 @@ public class SambaConfiguration {
1818
private final MetricsConfig metricsConfig;
1919
private final PortalRestApiConfig portalRestApiConfig;
2020
private final DiscoveryConfig discoveryConfig;
21-
private final JsonRpcConfiguration jsonRpcConfigurationn;
21+
private final StorageConfig storageConfig;
22+
private final JsonRpcConfiguration jsonRpcConfiguration;
2223

2324
private final SECP256K1.SecretKey secretKey;
2425

2526
private SambaConfiguration(
2627
final MetricsConfig metricsConfig,
2728
final PortalRestApiConfig portalRestApiConfig,
2829
final DiscoveryConfig discoveryConfig,
29-
final JsonRpcConfiguration jsonRpcConfigurationn,
30+
final JsonRpcConfiguration jsonRpcConfiguration,
31+
final StorageConfig storageConfig,
3032
final SECP256K1.SecretKey secretKey) {
3133
this.metricsConfig = metricsConfig;
3234
this.portalRestApiConfig = portalRestApiConfig;
33-
this.jsonRpcConfigurationn = jsonRpcConfigurationn;
3435
this.discoveryConfig = discoveryConfig;
36+
this.jsonRpcConfiguration = jsonRpcConfiguration;
37+
this.storageConfig = storageConfig;
3538
this.secretKey = secretKey;
3639
}
3740

@@ -51,19 +54,24 @@ public DiscoveryConfig getDiscoveryConfig() {
5154
return discoveryConfig;
5255
}
5356

57+
public StorageConfig getStorageConfig() {
58+
return storageConfig;
59+
}
60+
5461
public SECP256K1.SecretKey getSecreteKey() {
5562
return secretKey;
5663
}
5764

5865
public JsonRpcConfiguration getJsonRpcConfigurationn() {
59-
return jsonRpcConfigurationn;
66+
return jsonRpcConfiguration;
6067
}
6168

6269
public static class Builder {
6370
private final MetricsConfig.MetricsConfigBuilder metricsConfigBuilder = MetricsConfig.builder();
6471
private final PortalRestApiConfig.PortalRestApiConfigBuilder portalRestApiConfigBuilder =
6572
PortalRestApiConfig.builder();
6673
private final DiscoveryConfig.Builder discoveryConfigBuilder = DiscoveryConfig.builder();
74+
private final StorageConfig.Builder storageConfigBuilder = StorageConfig.builder();
6775
private final JsonRpcConfiguration jsonRpcConfiguration =
6876
JsonRpcConfiguration
6977
.createDefault(); // TODO change this once JsonConfiguration is turned into a builder
@@ -82,6 +90,7 @@ public SambaConfiguration build() {
8290
portalRestApiConfigBuilder.build(),
8391
discoveryConfigBuilder.build(),
8492
jsonRpcConfiguration, // TODO change this once JsonConfiguration is turned into a builder
93+
storageConfigBuilder.build(),
8594
secretKey.get());
8695
}
8796

@@ -113,6 +122,11 @@ public Builder jsonRpc(final Consumer<JsonRpcConfiguration> jsonRpcConfiguration
113122
return this;
114123
}
115124

125+
public Builder storage(final Consumer<StorageConfig.Builder> storageConfigConsumer) {
126+
storageConfigConsumer.accept(storageConfigBuilder);
127+
return this;
128+
}
129+
116130
public Builder secretKey(final String secretKey) {
117131
checkNotNull(secretKey);
118132
final Bytes32 secretKeyInBytes = Bytes32.fromHexString(secretKey);
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,92 @@
11
package samba.config;
22

3+
import static com.google.common.base.Preconditions.checkNotNull;
4+
5+
import java.io.File;
6+
import java.io.IOException;
7+
import java.nio.file.FileAlreadyExistsException;
8+
import java.nio.file.Files;
9+
import java.nio.file.InvalidPathException;
10+
import java.nio.file.Path;
11+
import java.nio.file.Paths;
12+
13+
import org.slf4j.Logger;
14+
import org.slf4j.LoggerFactory;
15+
import picocli.CommandLine;
16+
317
public class StorageConfig {
418

5-
public static final long DEFAULT_STORAGE_FREQUENCY = 2048L;
6-
private final long dataStorageFrequency;
19+
public static final String DEFAULT_DATA_DIR_PATH = "./build/data";
20+
private static String SAMBA_HOME_PROPERTY_NAME = "samba.home";
21+
22+
private final Path dataPath;
23+
private static final Logger LOG = LoggerFactory.getLogger(StorageConfig.class);
24+
25+
public StorageConfig(final Path dataPath) {
26+
this.dataPath = dataPath;
27+
}
28+
29+
public static Builder builder() {
30+
return new Builder();
31+
}
32+
33+
public static Path getDefaultSambaDataPath(final Object command) {
34+
final String sambaHomeProperty = System.getProperty(SAMBA_HOME_PROPERTY_NAME);
35+
final Path sambaHome;
36+
if (sambaHomeProperty != null) {
37+
try {
38+
sambaHome = Paths.get(sambaHomeProperty);
39+
} catch (final InvalidPathException e) {
40+
throw new CommandLine.ParameterException(
41+
new CommandLine(command),
42+
String.format(
43+
"Unable to define default data directory from %s property.",
44+
SAMBA_HOME_PROPERTY_NAME),
45+
e);
46+
}
47+
} else {
48+
try {
49+
final String path = new File(DEFAULT_DATA_DIR_PATH).getCanonicalPath();
50+
sambaHome = Paths.get(path);
51+
} catch (final IOException e) {
52+
throw new CommandLine.ParameterException(
53+
new CommandLine(command), "Unable to create default data directory.");
54+
}
55+
}
56+
try {
57+
Files.createDirectories(sambaHome);
58+
} catch (final FileAlreadyExistsException e) {
59+
throw new CommandLine.ParameterException(
60+
new CommandLine(command),
61+
String.format("%s: already exists and is not a directory.", sambaHome.toAbsolutePath()),
62+
e);
63+
} catch (final Exception e) {
64+
throw new CommandLine.ParameterException(
65+
new CommandLine(command),
66+
String.format("Error creating directory %s.", sambaHome.toAbsolutePath()),
67+
e);
68+
}
69+
return sambaHome;
70+
}
771

8-
public StorageConfig(final long dataStorageFrequency) {
9-
this.dataStorageFrequency = dataStorageFrequency;
72+
public Path getDataPath() {
73+
return this.dataPath;
1074
}
1175

12-
public long getDataStorageFrequency() {
13-
return dataStorageFrequency;
76+
public static class Builder {
77+
78+
private Path dataPath;
79+
80+
private Builder() {}
81+
82+
public StorageConfig build() {
83+
return new StorageConfig(dataPath);
84+
}
85+
86+
public Builder dataPath(final Path dataPath) {
87+
checkNotNull(dataPath);
88+
this.dataPath = dataPath;
89+
return this;
90+
}
1491
}
1592
}

core/src/main/java/samba/services/PortalNodeMainService.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@
3939
import samba.services.utp.UTPManager;
4040
import samba.storage.HistoryRocksDB;
4141

42-
import java.nio.file.Paths;
4342
import java.util.HashMap;
4443
import java.util.Map;
4544
import java.util.Optional;
@@ -181,7 +180,8 @@ private void initHistoryNetwork() {
181180
this.historyNetwork =
182181
new HistoryNetwork(
183182
this.discoveryService,
184-
HistoryRocksDB.create(metricsSystem, Paths.get("samba/db")),
183+
HistoryRocksDB.create(
184+
metricsSystem, sambaConfiguration.getStorageConfig().getDataPath()),
185185
this.utpManager);
186186
}
187187

0 commit comments

Comments
 (0)