Repository: incubator-unomi Updated Branches: refs/heads/master 92542e5b1 -> 23d9044ef
Fix bug when changing a node's public or secure address Signed-off-by: Serge Huber <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/incubator-unomi/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-unomi/commit/23d9044e Tree: http://git-wip-us.apache.org/repos/asf/incubator-unomi/tree/23d9044e Diff: http://git-wip-us.apache.org/repos/asf/incubator-unomi/diff/23d9044e Branch: refs/heads/master Commit: 23d9044ef2ae4e144933cf2bd1e51c8d19023120 Parents: 92542e5 Author: Serge Huber <[email protected]> Authored: Tue Jan 24 12:41:05 2017 +0100 Committer: Serge Huber <[email protected]> Committed: Tue Jan 24 12:41:05 2017 +0100 ---------------------------------------------------------------------- .../services/services/ClusterServiceImpl.java | 70 ++++++++++++-------- 1 file changed, 41 insertions(+), 29 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/23d9044e/services/src/main/java/org/apache/unomi/services/services/ClusterServiceImpl.java ---------------------------------------------------------------------- diff --git a/services/src/main/java/org/apache/unomi/services/services/ClusterServiceImpl.java b/services/src/main/java/org/apache/unomi/services/services/ClusterServiceImpl.java index 7c77e8d..eabe48b 100644 --- a/services/src/main/java/org/apache/unomi/services/services/ClusterServiceImpl.java +++ b/services/src/main/java/org/apache/unomi/services/services/ClusterServiceImpl.java @@ -17,7 +17,6 @@ package org.apache.unomi.services.services; -import org.apache.commons.lang3.StringUtils; import org.apache.karaf.cellar.config.ClusterConfigurationEvent; import org.apache.karaf.cellar.config.Constants; import org.apache.karaf.cellar.core.*; @@ -49,10 +48,6 @@ public class ClusterServiceImpl implements ClusterService { private static final Logger logger = LoggerFactory.getLogger(ClusterServiceImpl.class.getName()); - public static final String CONTEXTSERVER_ADDRESS = "contextserver.address"; - public static final String CONTEXTSERVER_PORT = "contextserver.port"; - public static final String CONTEXTSERVER_SECURE_ADDRESS = "contextserver.secureAddress"; - public static final String CONTEXTSERVER_SECURE_PORT = "contextserver.securePort"; public static final String KARAF_CELLAR_CLUSTER_NODE_CONFIGURATION = "org.apache.unomi.nodes"; public static final String KARAF_CLUSTER_CONFIGURATION_PUBLIC_ENDPOINTS = "publicEndpoints"; public static final String KARAF_CLUSTER_CONFIGURATION_SECURE_ENDPOINTS = "secureEndpoints"; @@ -160,16 +155,12 @@ public class ClusterServiceImpl implements ClusterService { if (karafCellarClusterNodeConfiguration == null) { karafCellarClusterNodeConfiguration = new Properties(); } - String publicEndpointsPropValue = karafCellarClusterNodeConfiguration.getProperty(KARAF_CLUSTER_CONFIGURATION_PUBLIC_ENDPOINTS, thisKarafNode.getId() + "=" + address + ":" + port); - String secureEndpointsPropValue = karafCellarClusterNodeConfiguration.getProperty(KARAF_CLUSTER_CONFIGURATION_SECURE_ENDPOINTS, thisKarafNode.getId() + "=" + secureAddress + ":" + securePort); - String[] publicEndpointsArray = publicEndpointsPropValue.split(","); - Set<String> publicEndpoints = new TreeSet<String>(Arrays.asList(publicEndpointsArray)); - String[] secureEndpointsArray = secureEndpointsPropValue.split(","); - Set<String> secureEndpoints = new TreeSet<String>(Arrays.asList(secureEndpointsArray)); - publicEndpoints.add(thisKarafNode.getId() + "=" + address + ":" + port); - secureEndpoints.add(thisKarafNode.getId() + "=" + secureAddress + ":" + securePort); - karafCellarClusterNodeConfiguration.setProperty(KARAF_CLUSTER_CONFIGURATION_PUBLIC_ENDPOINTS, StringUtils.join(publicEndpoints, ",")); - karafCellarClusterNodeConfiguration.setProperty(KARAF_CLUSTER_CONFIGURATION_SECURE_ENDPOINTS, StringUtils.join(secureEndpoints, ",")); + Map<String,String> publicEndpoints = getMapProperty(karafCellarClusterNodeConfiguration, KARAF_CLUSTER_CONFIGURATION_PUBLIC_ENDPOINTS, thisKarafNode.getId() + "=" + address + ":" + port); + Map<String,String> secureEndpoints = getMapProperty(karafCellarClusterNodeConfiguration, KARAF_CLUSTER_CONFIGURATION_SECURE_ENDPOINTS, thisKarafNode.getId() + "=" + secureAddress + ":" + securePort); + publicEndpoints.put(thisKarafNode.getId(), address + ":" + port); + secureEndpoints.put(thisKarafNode.getId(), secureAddress + ":" + securePort); + setMapProperty(karafCellarClusterNodeConfiguration, KARAF_CLUSTER_CONFIGURATION_PUBLIC_ENDPOINTS, publicEndpoints); + setMapProperty(karafCellarClusterNodeConfiguration, KARAF_CLUSTER_CONFIGURATION_SECURE_ENDPOINTS, secureEndpoints); configurations.put(KARAF_CELLAR_CLUSTER_NODE_CONFIGURATION, karafCellarClusterNodeConfiguration); ClusterConfigurationEvent clusterConfigurationEvent = new ClusterConfigurationEvent(KARAF_CELLAR_CLUSTER_NODE_CONFIGURATION); clusterConfigurationEvent.setSourceGroup(group); @@ -203,20 +194,8 @@ public class ClusterServiceImpl implements ClusterService { Map<String, String> publicNodeEndpoints = new TreeMap<>(); Map<String, String> secureNodeEndpoints = new TreeMap<>(); if (karafCellarClusterNodeConfiguration != null) { - String publicEndpointsPropValue = karafCellarClusterNodeConfiguration.getProperty(KARAF_CLUSTER_CONFIGURATION_PUBLIC_ENDPOINTS, thisKarafNode.getId() + "=" + address + ":" + port); - String secureEndpointsPropValue = karafCellarClusterNodeConfiguration.getProperty(KARAF_CLUSTER_CONFIGURATION_SECURE_ENDPOINTS, thisKarafNode.getId() + "=" + secureAddress + ":" + securePort); - String[] publicEndpointsArray = publicEndpointsPropValue.split(","); - Set<String> publicEndpoints = new TreeSet<String>(Arrays.asList(publicEndpointsArray)); - for (String endpoint : publicEndpoints) { - String[] endpointParts = endpoint.split("="); - publicNodeEndpoints.put(endpointParts[0], endpointParts[1]); - } - String[] secureEndpointsArray = secureEndpointsPropValue.split(","); - Set<String> secureEndpoints = new TreeSet<String>(Arrays.asList(secureEndpointsArray)); - for (String endpoint : secureEndpoints) { - String[] endpointParts = endpoint.split("="); - secureNodeEndpoints.put(endpointParts[0], endpointParts[1]); - } + publicNodeEndpoints = getMapProperty(karafCellarClusterNodeConfiguration, KARAF_CLUSTER_CONFIGURATION_PUBLIC_ENDPOINTS, thisKarafNode.getId() + "=" + address + ":" + port); + secureNodeEndpoints = getMapProperty(karafCellarClusterNodeConfiguration, KARAF_CLUSTER_CONFIGURATION_SECURE_ENDPOINTS, thisKarafNode.getId() + "=" + secureAddress + ":" + securePort); } for (org.apache.karaf.cellar.core.Node karafCellarNode : karafCellarNodes) { ClusterNode clusterNode = new ClusterNode(); @@ -332,4 +311,37 @@ public class ClusterServiceImpl implements ClusterService { return jmxConnector; } + private Map<String,String> getMapProperty(Properties properties, String propertyName, String defaultValue) { + String propertyValue = properties.getProperty(propertyName, defaultValue); + return getMapProperty(propertyValue); + } + + private Map<String, String> getMapProperty(String propertyValue) { + String[] propertyValueArray = propertyValue.split(","); + Map<String,String> propertyMapValue = new LinkedHashMap<>(); + for (String propertyValueElement : propertyValueArray) { + String[] propertyValueElementPrats = propertyValueElement.split("="); + propertyMapValue.put(propertyValueElementPrats[0], propertyValueElementPrats[1]); + } + return propertyMapValue; + } + + private Map<String,String> setMapProperty(Properties properties, String propertyName, Map<String,String> propertyMapValue) { + StringBuilder propertyValueBuilder = new StringBuilder(); + int entryCount = 0; + for (Map.Entry<String,String> propertyMapValueEntry : propertyMapValue.entrySet()) { + propertyValueBuilder.append(propertyMapValueEntry.getKey()); + propertyValueBuilder.append("="); + propertyValueBuilder.append(propertyMapValueEntry.getValue()); + if (entryCount < propertyMapValue.size() - 1) { + propertyValueBuilder.append(","); + } + } + String oldPropertyValue = (String) properties.setProperty(propertyName, propertyValueBuilder.toString()); + if (oldPropertyValue == null) { + return null; + } + return getMapProperty(oldPropertyValue); + } + }
