use of com.hazelcast.core.LifecycleListener in project hazelcast by hazelcast.
the class AbstractListenersOnReconnectTest method testListenersWhenClientDisconnectedOperationRuns_whenOwnerConnectionRemoved.
@Test
public void testListenersWhenClientDisconnectedOperationRuns_whenOwnerConnectionRemoved() {
Config config = new Config();
int endpointDelaySeconds = 2;
config.setProperty(GroupProperty.CLIENT_ENDPOINT_REMOVE_DELAY_SECONDS.getName(), String.valueOf(endpointDelaySeconds));
config.setProperty(GroupProperty.CLIENT_HEARTBEAT_TIMEOUT_SECONDS.getName(), "4");
HazelcastInstance ownerServer = factory.newHazelcastInstance(config);
ClientConfig smartClientConfig = getSmartClientConfig();
smartClientConfig.setProperty(ClientProperty.HEARTBEAT_INTERVAL.getName(), "500");
client = factory.newHazelcastClient(smartClientConfig);
factory.newHazelcastInstance(config);
setupListener();
final CountDownLatch disconnectedLatch = new CountDownLatch(1);
final CountDownLatch connectedLatch = new CountDownLatch(1);
client.getLifecycleService().addLifecycleListener(new LifecycleListener() {
@Override
public void stateChanged(LifecycleEvent event) {
if (LifecycleEvent.LifecycleState.CLIENT_DISCONNECTED == event.getState()) {
disconnectedLatch.countDown();
}
if (LifecycleEvent.LifecycleState.CLIENT_CONNECTED == event.getState()) {
connectedLatch.countDown();
}
}
});
blockMessagesToInstance(ownerServer, client);
assertOpenEventually(disconnectedLatch);
sleepAtLeastMillis(TimeUnit.SECONDS.toMillis(endpointDelaySeconds) * 2);
unblockMessagesToInstance(ownerServer, client);
assertOpenEventually(connectedLatch);
validateRegistrationsAndListenerFunctionality();
}
use of com.hazelcast.core.LifecycleListener in project hazelcast by hazelcast.
the class AbstractListenersOnReconnectTest method testListenersWhenClientDisconnectedOperationRuns_whenOwnerMemberRemoved.
//--------------------------------------------------------------------------------- //
@Test
public void testListenersWhenClientDisconnectedOperationRuns_whenOwnerMemberRemoved() {
Config config = new Config();
int endpointDelaySeconds = 2;
config.setProperty(GroupProperty.CLIENT_ENDPOINT_REMOVE_DELAY_SECONDS.getName(), String.valueOf(endpointDelaySeconds));
HazelcastInstance ownerServer = factory.newHazelcastInstance(config);
client = factory.newHazelcastClient(getSmartClientConfig());
HazelcastInstance server2 = factory.newHazelcastInstance(config);
setupListener();
final CountDownLatch disconnectedLatch = new CountDownLatch(1);
final CountDownLatch connectedLatch = new CountDownLatch(1);
client.getLifecycleService().addLifecycleListener(new LifecycleListener() {
@Override
public void stateChanged(LifecycleEvent event) {
if (LifecycleEvent.LifecycleState.CLIENT_DISCONNECTED == event.getState()) {
disconnectedLatch.countDown();
}
if (LifecycleEvent.LifecycleState.CLIENT_CONNECTED == event.getState()) {
connectedLatch.countDown();
}
}
});
blockMessagesToInstance(server2, client);
ownerServer.shutdown();
sleepAtLeastMillis(TimeUnit.SECONDS.toMillis(endpointDelaySeconds) * 2);
unblockMessagesToInstance(server2, client);
assertOpenEventually(disconnectedLatch);
assertOpenEventually(connectedLatch);
clusterSize = clusterSize - 1;
validateRegistrationsAndListenerFunctionality();
}
use of com.hazelcast.core.LifecycleListener in project hazelcast by hazelcast.
the class AbstractListenersOnReconnectTest method testListenersTerminateOwnerNode.
private void testListenersTerminateOwnerNode() {
setupListener();
final CountDownLatch disconnectedLatch = new CountDownLatch(1);
final CountDownLatch connectedLatch = new CountDownLatch(1);
client.getLifecycleService().addLifecycleListener(new LifecycleListener() {
@Override
public void stateChanged(LifecycleEvent event) {
if (LifecycleEvent.LifecycleState.CLIENT_DISCONNECTED == event.getState()) {
disconnectedLatch.countDown();
}
if (LifecycleEvent.LifecycleState.CLIENT_CONNECTED == event.getState()) {
connectedLatch.countDown();
}
}
});
HazelcastClientInstanceImpl clientInstanceImpl = getHazelcastClientInstanceImpl(client);
HazelcastInstance server = getOwnerServer(factory, clientInstanceImpl);
server.getLifecycleService().terminate();
factory.newHazelcastInstance();
assertClusterSizeEventually(clusterSize, client);
assertOpenEventually(disconnectedLatch);
assertOpenEventually(connectedLatch);
validateRegistrationsAndListenerFunctionality();
}
use of com.hazelcast.core.LifecycleListener in project hazelcast by hazelcast.
the class SplitBrainHandlerTest method testClusterMerge_when_split_not_detected_by_slave_and_restart_during_merge.
@Test
public // https://github.com/hazelcast/hazelcast/issues/8137
void testClusterMerge_when_split_not_detected_by_slave_and_restart_during_merge() throws InterruptedException {
Config config = new Config();
String groupName = generateRandomString(10);
config.getGroupConfig().setName(groupName);
config.setProperty(GroupProperty.MERGE_FIRST_RUN_DELAY_SECONDS.getName(), "10");
config.setProperty(GroupProperty.MERGE_NEXT_RUN_DELAY_SECONDS.getName(), "10");
config.setProperty(GroupProperty.MAX_NO_HEARTBEAT_SECONDS.getName(), "15");
config.setProperty(GroupProperty.MAX_JOIN_SECONDS.getName(), "40");
config.setProperty(GroupProperty.MAX_JOIN_MERGE_TARGET_SECONDS.getName(), "10");
NetworkConfig networkConfig = config.getNetworkConfig();
networkConfig.getJoin().getMulticastConfig().setEnabled(false);
networkConfig.getJoin().getTcpIpConfig().setEnabled(true).addMember("127.0.0.1:5701").addMember("127.0.0.1:5702").addMember("127.0.0.1:5703");
networkConfig.setPort(5702);
HazelcastInstance hz2 = newHazelcastInstance(config, "test-node2", new FirewallingNodeContext());
networkConfig.setPort(5703);
HazelcastInstance hz3 = newHazelcastInstance(config, "test-node3", new FirewallingNodeContext());
networkConfig.setPort(5701);
HazelcastInstance hz1 = newHazelcastInstance(config, "test-node1", new FirewallingNodeContext());
final Node n1 = TestUtil.getNode(hz1);
Node n2 = TestUtil.getNode(hz2);
Node n3 = TestUtil.getNode(hz3);
final CountDownLatch splitLatch = new CountDownLatch(2);
MembershipAdapter membershipAdapter = new MembershipAdapter() {
@Override
public void memberRemoved(MembershipEvent event) {
if (n1.getLocalMember().equals(event.getMember())) {
splitLatch.countDown();
}
}
};
hz2.getCluster().addMembershipListener(membershipAdapter);
hz3.getCluster().addMembershipListener(membershipAdapter);
final CountDownLatch mergingLatch = new CountDownLatch(1);
final CountDownLatch mergeLatch = new CountDownLatch(1);
LifecycleListener lifecycleListener = new LifecycleListener() {
@Override
public void stateChanged(LifecycleEvent event) {
if (event.getState() == LifecycleState.MERGING) {
mergingLatch.countDown();
}
if (event.getState() == LifecycleState.MERGED) {
mergeLatch.countDown();
}
}
};
hz1.getLifecycleService().addLifecycleListener(lifecycleListener);
FirewallingTcpIpConnectionManager cm1 = getFireWalledConnectionManager(hz1);
FirewallingTcpIpConnectionManager cm2 = getFireWalledConnectionManager(hz2);
FirewallingTcpIpConnectionManager cm3 = getFireWalledConnectionManager(hz3);
cm1.block(n2.address);
cm1.block(n3.address);
n2.clusterService.removeAddress(n1.address, null);
n3.clusterService.removeAddress(n1.address, null);
cm2.block(n1.address);
cm3.block(n1.address);
assertTrue(splitLatch.await(20, TimeUnit.SECONDS));
assertEquals(2, hz2.getCluster().getMembers().size());
assertEquals(2, hz3.getCluster().getMembers().size());
assertEquals(3, hz1.getCluster().getMembers().size());
cm1.unblock(n2.address);
cm1.unblock(n3.address);
cm2.unblock(n1.address);
cm3.unblock(n1.address);
assertTrue(mergingLatch.await(60, TimeUnit.SECONDS));
hz2.getLifecycleService().terminate();
hz2 = newHazelcastInstance(config, "test-node2", new FirewallingNodeContext());
n2 = TestUtil.getNode(hz2);
assertTrue(mergeLatch.await(120, TimeUnit.SECONDS));
assertEquals(3, hz1.getCluster().getMembers().size());
assertEquals(3, hz2.getCluster().getMembers().size());
assertEquals(3, hz3.getCluster().getMembers().size());
assertEquals(n3.getThisAddress(), n1.getMasterAddress());
assertEquals(n3.getThisAddress(), n2.getMasterAddress());
assertEquals(n3.getThisAddress(), n3.getMasterAddress());
}
use of com.hazelcast.core.LifecycleListener in project hazelcast by hazelcast.
the class SplitBrainHandlerTest method testMulticastJoin_DuringSplitBrainHandlerRunning.
@Test
public void testMulticastJoin_DuringSplitBrainHandlerRunning() throws InterruptedException {
String groupName = generateRandomString(10);
final CountDownLatch latch = new CountDownLatch(1);
Config config1 = new Config();
// bigger port to make sure address.hashCode() check pass during merge!
config1.getNetworkConfig().setPort(5901);
config1.getGroupConfig().setName(groupName);
config1.setProperty(GroupProperty.WAIT_SECONDS_BEFORE_JOIN.getName(), "5");
config1.setProperty(GroupProperty.MERGE_FIRST_RUN_DELAY_SECONDS.getName(), "0");
config1.setProperty(GroupProperty.MERGE_NEXT_RUN_DELAY_SECONDS.getName(), "0");
config1.addListenerConfig(new ListenerConfig(new LifecycleListener() {
public void stateChanged(final LifecycleEvent event) {
switch(event.getState()) {
case MERGING:
case MERGED:
latch.countDown();
default:
break;
}
}
}));
Hazelcast.newHazelcastInstance(config1);
Thread.sleep(5000);
Config config2 = new Config();
config2.getGroupConfig().setName(groupName);
config2.getNetworkConfig().setPort(5701);
config2.setProperty(GroupProperty.WAIT_SECONDS_BEFORE_JOIN.getName(), "5");
config2.setProperty(GroupProperty.MERGE_FIRST_RUN_DELAY_SECONDS.getName(), "0");
config2.setProperty(GroupProperty.MERGE_NEXT_RUN_DELAY_SECONDS.getName(), "0");
Hazelcast.newHazelcastInstance(config2);
assertFalse("Latch should not be countdown!", latch.await(3, TimeUnit.SECONDS));
}
Aggregations