HelixConnection connection = new ZkHelixConnection(ZK_ADDR);
connection.connect();
// start controller
ClusterId clusterId = ClusterId.from(clusterName);
final ControllerId controllerId = ControllerId.from("controller");
// start controller
HelixController controller = connection.createController(clusterId, controllerId);
controller.startAsync();
// check live-instance znode for localhost_12918 exists
final HelixDataAccessor accessor =
new ZKHelixDataAccessor(clusterName, new ZkBaseDataAccessor<ZNRecord>(_gZkClient));
final PropertyKey.Builder keyBuilder = accessor.keyBuilder();
LiveInstance leader = accessor.getProperty(keyBuilder.controllerLeader());
Assert.assertNotNull(leader);
Assert.assertEquals(leader.getInstanceName(), controllerId.stringify());
// remove leader znode externally
accessor.removeProperty(keyBuilder.controllerLeader());
// verify leader is re-elected
boolean result = TestHelper.verify(new TestHelper.Verifier() {
@Override
public boolean verify() throws Exception {
LiveInstance leader = accessor.getProperty(keyBuilder.controllerLeader());
if (leader == null) {
return false;
}
return leader.getInstanceName().equals(controllerId.stringify());
}
}, 3 * 1000);
Assert.assertTrue(result, "Fail to re-elect a new leader");