use of org.apache.helix.manager.zk.ZNRecordSerializer in project helix by apache.
the class TestZKCallback method beforeClass.
@BeforeClass()
public void beforeClass() throws Exception {
_zkClient = new ZkClient(ZK_ADDR);
_zkClient.setZkSerializer(new ZNRecordSerializer());
if (_zkClient.exists("/" + clusterName)) {
_zkClient.deleteRecursively("/" + clusterName);
}
ClusterSetup.processCommandLineArgs(createArgs("-zkSvr " + ZK_ADDR + " -addCluster " + clusterName));
// ClusterSetup
// .processCommandLineArgs(createArgs("-zkSvr " + ZK_ADDR +
// " -addCluster relay-cluster-12345"));
ClusterSetup.processCommandLineArgs(createArgs("-zkSvr " + ZK_ADDR + " -addResource " + clusterName + " db-12345 120 MasterSlave"));
ClusterSetup.processCommandLineArgs(createArgs("-zkSvr " + ZK_ADDR + " -addNode " + clusterName + " localhost:8900"));
ClusterSetup.processCommandLineArgs(createArgs("-zkSvr " + ZK_ADDR + " -addNode " + clusterName + " localhost:8901"));
ClusterSetup.processCommandLineArgs(createArgs("-zkSvr " + ZK_ADDR + " -addNode " + clusterName + " localhost:8902"));
ClusterSetup.processCommandLineArgs(createArgs("-zkSvr " + ZK_ADDR + " -addNode " + clusterName + " localhost:8903"));
ClusterSetup.processCommandLineArgs(createArgs("-zkSvr " + ZK_ADDR + " -addNode " + clusterName + " localhost:8904"));
ClusterSetup.processCommandLineArgs(createArgs("-zkSvr " + ZK_ADDR + " -rebalance " + clusterName + " db-12345 3"));
}
use of org.apache.helix.manager.zk.ZNRecordSerializer in project helix by apache.
the class TestZkBasis method testWatchRenew.
/**
* test zk watchers are renewed automatically after session expiry
* zookeeper-client side keeps all registered watchers see ZooKeeper.WatchRegistration.register()
* after session expiry, all watchers are renewed
* if a path that has watches on it has been removed during session expiry,
* the watchers on that path will still get callbacks after session renewal, especially:
* a data-watch will get data-deleted callback
* a child-watch will get a child-change callback with current-child-list = null
* this can be used for cleanup watchers on the zookeeper-client side
*/
@Test
public void testWatchRenew() throws Exception {
String className = TestHelper.getTestClassName();
String methodName = TestHelper.getTestMethodName();
String testName = className + "_" + methodName;
final ZkClient client = new ZkClient(ZK_ADDR, ZkClient.DEFAULT_SESSION_TIMEOUT, ZkClient.DEFAULT_CONNECTION_TIMEOUT, new ZNRecordSerializer());
// make sure "/testName/test" doesn't exist
final String path = "/" + testName + "/test";
client.delete(path);
ZkListener listener = new ZkListener();
client.subscribeDataChanges(path, listener);
client.subscribeChildChanges(path, listener);
ZkTestHelper.expireSession(client);
boolean succeed = listener._childChangeCountDown.await(10, TimeUnit.SECONDS);
Assert.assertTrue(succeed, "fail to wait on child-change count-down in 10 seconds after session-expiry");
Assert.assertEquals(listener._parentPath, path, "fail to get child-change callback after session-expiry");
Assert.assertNull(listener._currentChilds, "fail to get child-change callback with currentChilds=null after session expiry");
succeed = listener._dataDeleteCountDown.await(10, TimeUnit.SECONDS);
Assert.assertTrue(succeed, "fail to wait on data-delete count-down in 10 seconds after session-expiry");
Assert.assertEquals(listener._dataDeletePath, path, "fail to get data-delete callback after session-expiry");
client.close();
}
use of org.apache.helix.manager.zk.ZNRecordSerializer in project helix by apache.
the class TestZkBasis method testWatchRemove.
/**
* after calling zkclient#unsubscribeXXXListener()
* an already registered watch will not be removed from ZooKeeper#watchManager#XXXWatches
* immediately.
* the watch will get removed on the following conditions:
* 1) there is a set/delete on the listening path via the zkclient
* 2) session expiry on the zkclient (i.e. the watch will not be renewed after session expiry)
* @throws Exception
*/
@Test
public void testWatchRemove() throws Exception {
String className = TestHelper.getTestClassName();
String methodName = TestHelper.getTestMethodName();
String testName = className + "_" + methodName;
final ZkClient client = new ZkClient(ZK_ADDR, ZkClient.DEFAULT_SESSION_TIMEOUT, ZkClient.DEFAULT_CONNECTION_TIMEOUT, new ZNRecordSerializer());
// make sure "/testName/test" doesn't exist
final String path = "/" + testName + "/test";
client.createPersistent(path, true);
ZkListener listener = new ZkListener();
client.subscribeDataChanges(path, listener);
client.subscribeChildChanges(path, listener);
// listener should be in both ZkClient#_dataListener and ZkClient#_childListener set
Map<String, Set<IZkDataListener>> dataListenerMap = ZkTestHelper.getZkDataListener(client);
Assert.assertEquals(dataListenerMap.size(), 1, "ZkClient#_dataListener should have 1 listener");
Set<IZkDataListener> dataListenerSet = dataListenerMap.get(path);
Assert.assertNotNull(dataListenerSet, "ZkClient#_dataListener should have 1 listener on path: " + path);
Assert.assertEquals(dataListenerSet.size(), 1, "ZkClient#_dataListener should have 1 listener on path: " + path);
Map<String, Set<IZkChildListener>> childListenerMap = ZkTestHelper.getZkChildListener(client);
Assert.assertEquals(childListenerMap.size(), 1, "ZkClient#_childListener should have 1 listener");
Set<IZkChildListener> childListenerSet = childListenerMap.get(path);
Assert.assertNotNull(childListenerSet, "ZkClient#_childListener should have 1 listener on path: " + path);
Assert.assertEquals(childListenerSet.size(), 1, "ZkClient#_childListener should have 1 listener on path: " + path);
// watch should be in ZooKeeper#watchManager#XXXWatches
Map<String, List<String>> watchMap = ZkTestHelper.getZkWatch(client);
// System.out.println("watchMap1: " + watchMap);
List<String> dataWatch = watchMap.get("dataWatches");
Assert.assertNotNull(dataWatch, "ZooKeeper#watchManager#dataWatches should have 1 data watch on path: " + path);
Assert.assertEquals(dataWatch.size(), 1, "ZooKeeper#watchManager#dataWatches should have 1 data watch on path: " + path);
Assert.assertEquals(dataWatch.get(0), path, "ZooKeeper#watchManager#dataWatches should have 1 data watch on path: " + path);
List<String> childWatch = watchMap.get("childWatches");
Assert.assertNotNull(childWatch, "ZooKeeper#watchManager#childWatches should have 1 child watch on path: " + path);
Assert.assertEquals(childWatch.size(), 1, "ZooKeeper#watchManager#childWatches should have 1 child watch on path: " + path);
Assert.assertEquals(childWatch.get(0), path, "ZooKeeper#watchManager#childWatches should have 1 child watch on path: " + path);
client.unsubscribeDataChanges(path, listener);
client.unsubscribeChildChanges(path, listener);
// System.out.println("watchMap2: " + watchMap);
ZkTestHelper.expireSession(client);
// after session expiry, those watches should be removed
watchMap = ZkTestHelper.getZkWatch(client);
// System.out.println("watchMap3: " + watchMap);
dataWatch = watchMap.get("dataWatches");
Assert.assertTrue(dataWatch.isEmpty(), "ZooKeeper#watchManager#dataWatches should be empty");
childWatch = watchMap.get("childWatches");
Assert.assertTrue(childWatch.isEmpty(), "ZooKeeper#watchManager#childWatches should be empty");
client.close();
}
use of org.apache.helix.manager.zk.ZNRecordSerializer in project helix by apache.
the class MessagePoster method post.
public void post(String zkServer, Message message, String clusterName, String instanceName) {
ZkClient client = new ZkClient(zkServer);
client.setZkSerializer(new ZNRecordSerializer());
String path = PropertyPathBuilder.instanceMessage(clusterName, instanceName, message.getId());
client.delete(path);
ZNRecord record = client.readData(PropertyPathBuilder.liveInstance(clusterName, instanceName));
message.setTgtSessionId(record.getSimpleField(LiveInstanceProperty.SESSION_ID.toString()));
message.setTgtName(record.getId());
// System.out.println(message);
client.createPersistent(path, message.getRecord());
}
use of org.apache.helix.manager.zk.ZNRecordSerializer in project helix by apache.
the class ZKClientPool method getZkClient.
public static ZkClient getZkClient(String zkServer) {
// happy path that we cache the zkclient and it's still connected
if (_zkClientMap.containsKey(zkServer)) {
ZkClient zkClient = _zkClientMap.get(zkServer);
if (zkClient.getConnection().getZookeeperState() == States.CONNECTED) {
return zkClient;
}
}
synchronized (_zkClientMap) {
// if we cache a stale zkclient, purge it
if (_zkClientMap.containsKey(zkServer)) {
ZkClient zkClient = _zkClientMap.get(zkServer);
if (zkClient.getConnection().getZookeeperState() != States.CONNECTED) {
_zkClientMap.remove(zkServer);
}
}
// get a new zkclient
if (!_zkClientMap.containsKey(zkServer)) {
ZkClient zkClient = new ZkClient(zkServer, DEFAULT_SESSION_TIMEOUT, ZkClient.DEFAULT_CONNECTION_TIMEOUT, new ZNRecordSerializer());
_zkClientMap.put(zkServer, zkClient);
}
return _zkClientMap.get(zkServer);
}
}
Aggregations