[KARAF-2263] - Cellar-Cloud: discover member removes member information which isn't re-generated
git-svn-id: https://svn.apache.org/repos/asf/karaf/cellar/branches/cellar-2.2.x@1466931 13f79535-47bb-0310-9956-ffa450edef68 Project: http://git-wip-us.apache.org/repos/asf/karaf-cellar/repo Commit: http://git-wip-us.apache.org/repos/asf/karaf-cellar/commit/a9549d9b Tree: http://git-wip-us.apache.org/repos/asf/karaf-cellar/tree/a9549d9b Diff: http://git-wip-us.apache.org/repos/asf/karaf-cellar/diff/a9549d9b Branch: refs/heads/cellar-2.2.x Commit: a9549d9bfd1bb76b24ed9ced46bc4fb483f0aaaa Parents: 2d71c03 Author: anierbeck <anierbeck@13f79535-47bb-0310-9956-ffa450edef68> Authored: Thu Apr 11 15:54:54 2013 +0000 Committer: anierbeck <anierbeck@13f79535-47bb-0310-9956-ffa450edef68> Committed: Thu Apr 11 15:54:54 2013 +0000 ---------------------------------------------------------------------- .../karaf/cellar/cloud/ServiceContainer.java | 14 ++++++-- .../factory/HazelcastConfigurationManager.java | 7 +++- .../factory/HazelcastServiceFactory.java | 36 +++++++++++++++++--- 3 files changed, 49 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/a9549d9b/cloud/src/main/java/org/apache/karaf/cellar/cloud/ServiceContainer.java ---------------------------------------------------------------------- diff --git a/cloud/src/main/java/org/apache/karaf/cellar/cloud/ServiceContainer.java b/cloud/src/main/java/org/apache/karaf/cellar/cloud/ServiceContainer.java index c7a5098..ff77148 100644 --- a/cloud/src/main/java/org/apache/karaf/cellar/cloud/ServiceContainer.java +++ b/cloud/src/main/java/org/apache/karaf/cellar/cloud/ServiceContainer.java @@ -26,9 +26,9 @@ public class ServiceContainer implements Serializable { private DateTime registeredTime; private String hostName; - private String hostIp; - + private String hostPort; + public DateTime getRegisteredTime() { return registeredTime; } @@ -40,10 +40,20 @@ public class ServiceContainer implements Serializable { public String getHostIp() { return hostIp; } + + public String getHostPort() { + return hostPort; + } public ServiceContainer(String hostName, String hostIp, DateTime registeredTime) { + this(hostName, hostIp, null, registeredTime); + } + + + public ServiceContainer(String hostName, String hostIp, String hostPort, DateTime registeredTime) { this.registeredTime = registeredTime; this.hostName = hostName; this.hostIp = hostIp; + this.hostPort = hostPort; } } http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/a9549d9b/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/factory/HazelcastConfigurationManager.java ---------------------------------------------------------------------- diff --git a/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/factory/HazelcastConfigurationManager.java b/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/factory/HazelcastConfigurationManager.java index 212a59b..e4033a2 100644 --- a/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/factory/HazelcastConfigurationManager.java +++ b/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/factory/HazelcastConfigurationManager.java @@ -73,6 +73,11 @@ public class HazelcastConfigurationManager { return updated; } - + /** + * @return the discoveredMemberSet + */ + public Set<String> getDiscoveredMemberSet() { + return discoveredMemberSet; + } } http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/a9549d9b/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/factory/HazelcastServiceFactory.java ---------------------------------------------------------------------- diff --git a/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/factory/HazelcastServiceFactory.java b/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/factory/HazelcastServiceFactory.java index 7ab758f..d61e887 100644 --- a/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/factory/HazelcastServiceFactory.java +++ b/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/factory/HazelcastServiceFactory.java @@ -13,15 +13,20 @@ */ package org.apache.karaf.cellar.hazelcast.factory; -import com.hazelcast.core.Hazelcast; -import com.hazelcast.core.HazelcastInstance; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.CountDownLatch; + import org.apache.karaf.cellar.core.utils.CombinedClassLoader; import org.osgi.framework.BundleContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.Map; -import java.util.concurrent.CountDownLatch; +import com.hazelcast.config.Config; +import com.hazelcast.config.TcpIpConfig; +import com.hazelcast.core.Hazelcast; +import com.hazelcast.core.HazelcastInstance; /** * A factory for a Hazelcast Instance, which integration with OSGi Service Registry and Config Admin. @@ -53,7 +58,28 @@ public class HazelcastServiceFactory { } public void update(Map properties) { - configurationManager.isUpdated(properties); + if (configurationManager.isUpdated(properties)) { + LOGGER.debug("CELLAR HAZELCAST: configuration update is true"); + Config config = instance.getConfig(); + TcpIpConfig tcpIpConfig = config.getNetworkConfig().getJoin().getTcpIpConfig(); + List<String> members = tcpIpConfig.getMembers(); + + Set<String> discoveredMemberSet = configurationManager.getDiscoveredMemberSet(); + discoveredMemberSet.removeAll(members); + + if (!discoveredMemberSet.isEmpty()) { + LOGGER.debug("CELLAR HAZELCAST: will add following members {}", discoveredMemberSet); + instance.getLifecycleService().pause(); + for (String discoveredMember : discoveredMemberSet) { + tcpIpConfig.addMember(discoveredMember); + } + if (!tcpIpConfig.isEnabled()) { + LOGGER.debug("CELLAR HAZELCAST: tcpip mode needs to be enabled, will do now!"); + tcpIpConfig.setEnabled(true); + } + instance.getLifecycleService().restart(); + } + } } /**
