Read RAMCloud config from file instead of System.getProperty
Change-Id: I7d16014634cc2016ef589d6363a8aa3664e73453
diff --git a/src/main/java/net/onrc/onos/datastore/RCClient.java b/src/main/java/net/onrc/onos/datastore/RCClient.java
index 8deefe2..a918f02 100644
--- a/src/main/java/net/onrc/onos/datastore/RCClient.java
+++ b/src/main/java/net/onrc/onos/datastore/RCClient.java
@@ -1,9 +1,18 @@
package net.onrc.onos.datastore;
+import java.io.File;
+
+import org.apache.commons.configuration.Configuration;
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.PropertiesConfiguration;
+
import edu.stanford.ramcloud.JRamCloud;
public class RCClient {
+ private static final String DB_CONFIG_FILE = "conf/ramcloud.conf";
+ public static final Configuration config = getConfiguration();
+
// Value taken from RAMCloud's Status.h
// FIXME These constants should be defined by JRamCloud
public static final int STATUS_OK = 0;
@@ -18,9 +27,7 @@
private static final ThreadLocal<JRamCloud> tlsRCClient = new ThreadLocal<JRamCloud>() {
@Override
protected JRamCloud initialValue() {
- // FIXME come up with a proper way to retrieve configuration
- return new JRamCloud(System.getProperty("ramcloud.coordinator",
- "fast+udp:host=127.0.0.1,port=12246"));
+ return new JRamCloud(getCoordinatorUrl(config));
}
};
@@ -34,4 +41,31 @@
return tlsRCClient.get();
}
+ public static final Configuration getConfiguration() {
+ final File configFile = new File(System.getProperty("ramcloud.config.path", DB_CONFIG_FILE));
+ return getConfiguration(configFile);
+ }
+
+ public static final Configuration getConfiguration(final File configFile) {
+ if (configFile == null) {
+ throw new IllegalArgumentException("Need to specify a configuration file or storage directory");
+ }
+
+ if (!configFile.isFile()) {
+ throw new IllegalArgumentException("Location of configuration must be a file");
+ }
+
+ try {
+ return new PropertiesConfiguration(configFile);
+ } catch (ConfigurationException e) {
+ throw new IllegalArgumentException("Could not load configuration at: " + configFile, e);
+ }
+ }
+
+ public static String getCoordinatorUrl(final Configuration configuration) {
+ final String coordinatorIp = configuration.getString("ramcloud.coordinatorIp", "fast+udp:host=127.0.0.1");
+ final String coordinatorPort = configuration.getString("ramcloud.coordinatorPort", "port=12246");
+ final String coordinatorURL = coordinatorIp + "," + coordinatorPort;
+ return coordinatorURL;
+ }
}