blob: a918f0269a61540238e94220c8fbe04d46919275 [file] [log] [blame]
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;
// FIXME come up with a proper way to retrieve configuration
public static final int MAX_MULTI_READS = Math.max(1, Integer
.valueOf(System.getProperty("ramcloud.max_multi_reads", "400")));
public static final int MAX_MULTI_WRITES = Math.max(1, Integer
.valueOf(System.getProperty("ramcloud.max_multi_writes", "800")));
private static final ThreadLocal<JRamCloud> tlsRCClient = new ThreadLocal<JRamCloud>() {
@Override
protected JRamCloud initialValue() {
return new JRamCloud(getCoordinatorUrl(config));
}
};
/**
* @return JRamCloud instance intended to be used only within the
* SameThread.
* @note Do not store the returned instance in a member variable, etc. which
* may be accessed later by another thread.
*/
static JRamCloud getClient() {
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;
}
}