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()){

Reply via email to