fixing https://issues.apache.org/jira/browse/STRATOS-421
Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/2e896312 Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/2e896312 Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/2e896312 Branch: refs/heads/master Commit: 2e896312fc7a6ffcbf7ac55cb4ebb7901d013496 Parents: 4167469 Author: Nirmal Fernando <[email protected]> Authored: Tue Feb 11 15:18:35 2014 +0530 Committer: Nirmal Fernando <[email protected]> Committed: Tue Feb 11 15:18:35 2014 +0530 ---------------------------------------------------------------------- .../autoscaler/NetworkPartitionLbHolder.java | 41 ++++++++++++++++---- .../topology/AutoscalerTopologyReceiver.java | 31 +++++++++++++++ .../autoscaler/partition/PartitionManager.java | 14 +++++++ 3 files changed, 79 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/2e896312/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/NetworkPartitionLbHolder.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/NetworkPartitionLbHolder.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/NetworkPartitionLbHolder.java index 665a64b..f59f8da 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/NetworkPartitionLbHolder.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/NetworkPartitionLbHolder.java @@ -133,6 +133,30 @@ public class NetworkPartitionLbHolder implements Serializable{ } + public boolean removeLbClusterId(String clusterId) { + if (isLBExist(clusterId)) { + if(isDefaultLBExist() && defaultLbClusterId.equals(clusterId)) { + defaultLbClusterId = null; + return true; + + } else if (serviceNameToLBClusterIdMap.containsValue(clusterId)){ + for (String service : serviceNameToLBClusterIdMap.keySet()) { + if(clusterId.equals(serviceNameToLBClusterIdMap.get(service))) { + serviceNameToLBClusterIdMap.remove(service); + return true; + } + } + } else if (clusterIdToLBClusterIdMap.containsValue(clusterId)){ + for (String cluster : clusterIdToLBClusterIdMap.keySet()) { + if(clusterId.equals(clusterIdToLBClusterIdMap.get(cluster))) { + clusterIdToLBClusterIdMap.remove(cluster); + return true; + } + } + } + } + return false; + } public boolean isLBExist(final String clusterId) { @@ -212,12 +236,6 @@ public class NetworkPartitionLbHolder implements Serializable{ - @Override - public String toString() { - return "NetworkPartitionContext [networkPartitionId=" + networkPartitionId + ", defaultLbClusterId=" - + defaultLbClusterId; - } - // public int getCurrentPartitionIndex() { // return currentPartitionIndex; // } @@ -407,7 +425,16 @@ public class NetworkPartitionLbHolder implements Serializable{ - public String getNetworkPartitionId() { + @Override + public String toString() { + return "NetworkPartitionLbHolder [networkPartitionId=" + + networkPartitionId + ", defaultLbClusterId=" + + defaultLbClusterId + ", serviceNameToLBClusterIdMap=" + + serviceNameToLBClusterIdMap + ", clusterIdToLBClusterIdMap=" + + clusterIdToLBClusterIdMap + "]"; + } + + public String getNetworkPartitionId() { return networkPartitionId; } http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/2e896312/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyReceiver.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyReceiver.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyReceiver.java index 43d1b2e..be22bc7 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyReceiver.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyReceiver.java @@ -19,17 +19,23 @@ package org.apache.stratos.autoscaler.message.receiver.topology; +import java.util.List; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.stratos.autoscaler.AutoscalerContext; import org.apache.stratos.autoscaler.MemberStatsContext; import org.apache.stratos.autoscaler.NetworkPartitionContext; +import org.apache.stratos.autoscaler.NetworkPartitionLbHolder; import org.apache.stratos.autoscaler.PartitionContext; +import org.apache.stratos.autoscaler.deployment.policy.DeploymentPolicy; import org.apache.stratos.autoscaler.exception.PartitionValidationException; import org.apache.stratos.autoscaler.exception.PolicyValidationException; import org.apache.stratos.autoscaler.monitor.AbstractMonitor; import org.apache.stratos.autoscaler.monitor.ClusterMonitor; import org.apache.stratos.autoscaler.monitor.LbClusterMonitor; +import org.apache.stratos.autoscaler.partition.PartitionManager; +import org.apache.stratos.autoscaler.policy.PolicyManager; import org.apache.stratos.autoscaler.rule.AutoscalerRuleEvaluator; import org.apache.stratos.autoscaler.util.AutoscalerUtil; import org.apache.stratos.messaging.domain.topology.Cluster; @@ -147,11 +153,36 @@ public class AutoscalerTopologyReceiver implements Runnable { try { ClusterRemovedEvent e = (ClusterRemovedEvent) event; TopologyManager.acquireReadLock(); + String serviceName = e.getServiceName(); String clusterId = e.getClusterId(); + String deploymentPolicy = e.getDeploymentPolicy(); + AbstractMonitor monitor; if (e.isLbCluster()) { + DeploymentPolicy depPolicy = PolicyManager.getInstance().getDeploymentPolicy(deploymentPolicy); + if (depPolicy != null) { + List<NetworkPartitionLbHolder> lbHolders = PartitionManager.getInstance() + .getNetworkPartitionLbHolders(depPolicy); + + for (NetworkPartitionLbHolder networkPartitionLbHolder : lbHolders) { + // removes lb cluster ids + boolean isRemoved = networkPartitionLbHolder.removeLbClusterId(clusterId); + if (isRemoved) { + log.info("Removed the lb cluster [id]:" + + clusterId + + " reference from Network Partition [id]: " + + networkPartitionLbHolder + .getNetworkPartitionId()); + + } + if (log.isDebugEnabled()) { + log.debug(networkPartitionLbHolder); + } + + } + } monitor = AutoscalerContext.getInstance() .removeLbMonitor(clusterId); http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/2e896312/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/PartitionManager.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/PartitionManager.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/PartitionManager.java index 959c1fd..a3dfecc 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/PartitionManager.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/PartitionManager.java @@ -30,7 +30,9 @@ import org.apache.stratos.autoscaler.exception.PartitionValidationException; import org.apache.stratos.autoscaler.registry.RegistryManager; import org.apache.stratos.cloud.controller.deployment.partition.Partition; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; /** @@ -117,6 +119,18 @@ private static final Log log = LogFactory.getLog(PartitionManager.class); } return CloudControllerClient.getInstance().validatePartition(partition); } + + public List<NetworkPartitionLbHolder> getNetworkPartitionLbHolders(DeploymentPolicy depPolicy) { + List<NetworkPartitionLbHolder> lbHolders = new ArrayList<NetworkPartitionLbHolder>(); + for(PartitionGroup partitionGroup: depPolicy.getPartitionGroups()){ + String id = partitionGroup.getId(); + NetworkPartitionLbHolder entry = networkPartitionLbHolders.get(id); + if(entry != null) { + lbHolders.add(entry); + } + } + return lbHolders; + } public void deployNewNetworkPartitions(DeploymentPolicy depPolicy) { for(PartitionGroup partitionGroup: depPolicy.getPartitionGroups()){
