Skip to content

Commit

Permalink
APPNG-2484
Browse files Browse the repository at this point in the history
  • Loading branch information
matthias committed Sep 6, 2023
1 parent 98a4874 commit 2e5fe55
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ public Receiver configure(Serializer serializer) {
this.serializer = serializer;
Environment env = serializer.getEnvironment();
instance = HazelcastConfigurer.getInstance(
env.getAttribute(Scope.PLATFORM, Platform.Environment.PLATFORM_CONFIG), serializer.getNodeId());
env.getAttribute(Scope.PLATFORM, Platform.Environment.PLATFORM_CONFIG), serializer.getNodeId(), env);
return this;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,17 +19,24 @@
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.net.InetSocketAddress;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;
import org.appng.api.Environment;
import org.appng.api.Platform;
import org.appng.api.Scope;
import org.appng.api.support.environment.DefaultEnvironment;
import org.appng.api.support.environment.ScopedEnvironment;
import org.appng.core.controller.messaging.HazelcastReceiver;
import org.appng.core.controller.messaging.NodeEvent;
import org.appng.core.controller.messaging.NodeEvent.NodeState;

import com.hazelcast.client.HazelcastClient;
import com.hazelcast.client.config.ClientConfig;
import com.hazelcast.client.config.XmlClientConfigBuilder;
import com.hazelcast.cluster.Address;
import com.hazelcast.cluster.Member;
import com.hazelcast.cluster.MembershipEvent;
import com.hazelcast.cluster.MembershipListener;
import com.hazelcast.config.Config;
Expand All @@ -40,8 +47,9 @@
import lombok.extern.slf4j.Slf4j;

/**
* Utility class to retrieve the {@link HazelcastInstance} to be used by appNG. This instance is then being used by
* {@link CacheService} and also by {@link HazelcastReceiver}.
* Utility class to retrieve the {@link HazelcastInstance} to be used by appNG.
* This instance is then being used by {@link CacheService} and also by
* {@link HazelcastReceiver}.
*
* @author Matthias Müller
*/
Expand All @@ -58,10 +66,11 @@ public class HazelcastConfigurer {
}

public static HazelcastInstance getInstance(PlatformProperties platformProperties) {
return getInstance(platformProperties, null);
return getInstance(platformProperties, null, null);
}

public static HazelcastInstance getInstance(PlatformProperties platformProps, String clientId) {
public static HazelcastInstance getInstance(PlatformProperties platformProps, String clientId,
Environment environment) {
if (null == instance) {
if (null != platformProps) {
try {
Expand Down Expand Up @@ -91,7 +100,7 @@ public static HazelcastInstance getInstance(PlatformProperties platformProps, St
LOGGER.info("Using {}", instance);
}
}
instance.getCluster().addMembershipListener(getMembershipListener());
instance.getCluster().addMembershipListener(getMembershipListener(environment));
} catch (IOException e) {
LOGGER.error("failed to create Hazelcast instance!", e);
}
Expand All @@ -102,35 +111,40 @@ public static HazelcastInstance getInstance(PlatformProperties platformProps, St
if (null == instance) {
LOGGER.warn("No Hazelcast configuration could be found, using default!");
instance = Hazelcast.newHazelcastInstance();
instance.getCluster().addMembershipListener(getMembershipListener());
instance.getCluster().addMembershipListener(getMembershipListener(environment));
LOGGER.info("Created default instance {}", instance);
}
return instance;
}

private static MembershipListener getMembershipListener() {
private static MembershipListener getMembershipListener(Environment environment) {

return new MembershipListener() {


final ScopedEnvironment scoped = ((DefaultEnvironment) environment).getEnvironment(Scope.PLATFORM);

@Override
public void memberRemoved(MembershipEvent me) {
try {
Address address = me.getMember().getAddress();
InetAddress inetAddress = address.getInetAddress();
LOGGER.info("Node removed: {} ({})", address, inetAddress.getHostName());
} catch (UnknownHostException e) {
// ignore
Member member = me.getMember();
Address address = member.getAddress();
InetSocketAddress socketAddress = member.getSocketAddress();
String nodeId = socketAddress.getHostName();
LOGGER.info("Node removed: {} ({})", address, nodeId);
Map<String, NodeState> clusterState = scoped.getAttribute(NodeEvent.NODE_STATE);
NodeState removed = clusterState.remove(nodeId);
if (removed == null) {
LOGGER.warn("Failed removing node '{}' from cluster state.", nodeId);
} else {
LOGGER.info("Removed node '{}' from cluster state.", nodeId);
}
}

@Override
public void memberAdded(MembershipEvent me) {
try {
Address address = me.getMember().getAddress();
InetAddress inetAddress = address.getInetAddress();
LOGGER.info("Node added: {} ({})", address, inetAddress.getHostName());
} catch (UnknownHostException e) {
// ignore
}
Member member = me.getMember();
Address address = member.getAddress();
InetSocketAddress socketAddress = member.getSocketAddress();
LOGGER.info("Node added: {} ({})", address, socketAddress.getHostName());
}
};
}
Expand Down

0 comments on commit 2e5fe55

Please sign in to comment.