use of com.ms.silverking.cloud.dht.meta.DHTConfigurationZK in project SilverKing by Morgan-Stanley.
the class EmbeddedSK method createEmbeddedSKInstance.
public static ClientDHTConfiguration createEmbeddedSKInstance(String dhtName, String gridConfigName, String ringName, int replication) {
try {
int zkPort;
Path tempDir;
File zkDir;
File skDir;
ZooKeeperConfig zkConfig;
// 0) Create LWT work pools
LWTPoolProvider.createDefaultWorkPools();
// 1) Start an embedded ZooKeeper
Log.warning("Creating embedded ZooKeeper");
try {
tempDir = Files.createTempDirectory(null);
zkDir = new File(tempDir.toFile(), "zookeeper");
zkDir.mkdirs();
skDir = new File(tempDir.toFile(), "silverking");
skDir.mkdirs();
} catch (IOException ioe) {
throw new RuntimeException(ioe);
}
zkPort = LocalZKImpl.startLocalZK(zkDir.getAbsolutePath());
zkConfig = new ZooKeeperConfig(InetAddress.getLoopbackAddress().getHostAddress() + ":" + zkPort);
Log.warning("Embedded ZooKeeper running at: " + zkConfig);
DHTNodeConfiguration.setDataBasePath(skDir.getAbsolutePath() + "/data");
// 2) Create ring in ZK
Log.warning("Creating ring");
StaticRingCreator.createStaticRing(ringName, zkConfig, ImmutableSet.of(IPAddrUtil.localIPString()), replication);
Log.warning("Created: " + ringName);
// 3) Create DHT Config in ZK
DHTConfiguration dhtConfig;
MetaClient dhtMC;
DHTConfigurationZK dhtConfigZK;
ClientDHTConfiguration clientDHTConfig;
int dhtPort;
Log.warning("Creating DHT configuration in ZK");
if (skPort <= 0) {
// FIXME
dhtPort = ThreadLocalRandom.current().nextInt(10000, 20000);
} else {
dhtPort = skPort;
}
clientDHTConfig = new ClientDHTConfiguration(dhtName, dhtPort, zkConfig);
dhtMC = new MetaClient(clientDHTConfig);
dhtConfigZK = new DHTConfigurationZK(dhtMC);
dhtConfig = DHTConfiguration.emptyTemplate.ringName(ringName).port(dhtPort).passiveNodeHostGroups("").hostGroupToClassVarsMap(new HashMap<String, String>());
dhtConfigZK.writeToZK(dhtConfig, null);
Log.warning("Created DHT configuration in ZK");
// 4) Set cur and target rings
DHTRingCurTargetZK curTargetZK;
Log.warning("Setting ring targets");
curTargetZK = new DHTRingCurTargetZK(dhtMC, dhtConfig);
curTargetZK.setCurRingAndVersionPair(ringName, 0, 0);
curTargetZK.setTargetRingAndVersionPair(ringName, 0, 0);
Log.warning("Ring targets set");
// 4) Start DHTNode
Log.warning("Starting DHTNode");
new DHTNode(dhtName, zkConfig, 0, false, false);
Log.warning("DHTNode started");
// 5) Return the configuration to the caller
return clientDHTConfig;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
use of com.ms.silverking.cloud.dht.meta.DHTConfigurationZK in project SilverKing by Morgan-Stanley.
the class DHTClient method openSession.
/**
* Open a new session to the specified SilverKing DHT instance using the given SessionOptions.
* @param sessionOptions options specifying the SilverKing DHT instance and the parameters of this session
* @return a new session to the given instance
* @throws ClientException
*/
public DHTSession openSession(SessionOptions sessionOptions) throws ClientException {
ClientDHTConfiguration dhtConfig;
String preferredServer;
dhtConfig = sessionOptions.getDHTConfig();
preferredServer = sessionOptions.getPreferredServer();
if (preferredServer != null) {
if (preferredServer.equals(SessionOptions.EMBEDDED_PASSIVE_NODE)) {
embedPassiveNode(dhtConfig);
preferredServer = null;
} else if (preferredServer.equals(SessionOptions.EMBEDDED_KVS)) {
String gcBase;
String gcName;
dhtConfig = embedKVS();
// FIXME - make user configurable
gcBase = "/tmp";
gcName = "GC_" + dhtConfig.getName();
try {
Log.warningf("GridConfigBase: %s", gcBase);
Log.warningf("GridConfigName: %s", gcName);
StaticDHTCreator.writeGridConfig(dhtConfig, gcBase, gcName);
} catch (IOException e) {
throw new ClientException("Error creating embedded kvs", e);
}
preferredServer = null;
}
}
sessionCreationLock.lock();
try {
DHTSession session;
if (preferredServer == null) {
preferredServer = IPAddrUtil.localIPString();
}
// session = dhtNameToSessionMap.get(dhtConfig.getName());
// FUTURE - this forces a new session
session = null;
// think about whether we want to use multiple or cache to common
if (session == null) {
DHTSession prev;
int serverPort;
try {
if (dhtConfig.hasPort()) {
serverPort = dhtConfig.getPort();
} else {
MetaClient mc;
MetaPaths mp;
long latestConfigVersion;
Log.warning("dhtConfig.getZkLocs(): " + dhtConfig.getZKConfig());
mc = new MetaClient(dhtConfig);
mp = mc.getMetaPaths();
Log.warning("getting latest version: " + mp.getInstanceConfigPath());
latestConfigVersion = mc.getZooKeeper().getLatestVersion(mp.getInstanceConfigPath());
Log.warning("latestConfigVersion: " + latestConfigVersion);
serverPort = new DHTConfigurationZK(mc).readFromZK(latestConfigVersion, null).getPort();
}
} catch (Exception e) {
throw new ClientException(e);
}
try {
session = new DHTSessionImpl(dhtConfig, new IPAndPort(IPAddrUtil.serverNameToAddr(preferredServer), serverPort), absMillisTimeSource, serializationRegistry, sessionOptions.getTimeoutController());
} catch (IOException ioe) {
throw new ClientException(ioe);
}
Log.info("session returned: ", session);
/*
prev = dhtNameToSessionMap.put(dhtConfig.getName(), session);
if (prev != null) {
throw new RuntimeException("panic");
}
*/
}
return session;
} finally {
sessionCreationLock.unlock();
}
}
Aggregations