You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by is...@apache.org on 2014/10/24 12:17:54 UTC

git commit: adding missing locks in application undeployment and removal

Repository: stratos
Updated Branches:
  refs/heads/4.0.0-grouping 4b1d3a656 -> 25221cc3f


adding missing locks in application undeployment and removal


Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/25221cc3
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/25221cc3
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/25221cc3

Branch: refs/heads/4.0.0-grouping
Commit: 25221cc3f2a0f73997fa9a793700f99c4adfb802
Parents: 4b1d3a6
Author: Isuru Haththotuwa <is...@apache.org>
Authored: Fri Oct 24 11:42:08 2014 +0530
Committer: Isuru Haththotuwa <is...@apache.org>
Committed: Fri Oct 24 15:47:28 2014 +0530

----------------------------------------------------------------------
 .../AutoscalerTopologyEventReceiver.java        | 34 +++++++++++++++++---
 1 file changed, 30 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/25221cc3/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
index 93b3123..211bcd2 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
@@ -35,10 +35,7 @@ import org.apache.stratos.autoscaler.monitor.group.GroupMonitor;
 import org.apache.stratos.autoscaler.partition.PartitionManager;
 import org.apache.stratos.autoscaler.policy.PolicyManager;
 import org.apache.stratos.autoscaler.status.checker.StatusChecker;
-import org.apache.stratos.messaging.domain.topology.Application;
-import org.apache.stratos.messaging.domain.topology.ApplicationStatus;
-import org.apache.stratos.messaging.domain.topology.ClusterStatus;
-import org.apache.stratos.messaging.domain.topology.GroupStatus;
+import org.apache.stratos.messaging.domain.topology.*;
 import org.apache.stratos.messaging.event.Event;
 import org.apache.stratos.messaging.event.topology.*;
 import org.apache.stratos.messaging.listener.topology.*;
@@ -46,6 +43,7 @@ import org.apache.stratos.messaging.message.receiver.topology.TopologyEventRecei
 import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
 
 import java.util.List;
+import java.util.Set;
 
 /**
  * Autoscaler topology receiver.
@@ -306,7 +304,16 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
                 log.info("[ApplicationUndeployedEvent] Received: " + event.getClass());
 
                 ApplicationUndeployedEvent applicationUndeployedEvent = (ApplicationUndeployedEvent) event;
+
+                // acquire reead locks for application and relevant clusters
                 TopologyManager.acquireReadLockForApplication(applicationUndeployedEvent.getApplicationId());
+                Set<ClusterDataHolder> clusterDataHolders = applicationUndeployedEvent.getClusterData();
+                if (clusterDataHolders != null) {
+                    for (ClusterDataHolder clusterData : clusterDataHolders) {
+                        TopologyManager.acquireReadLockForCluster(clusterData.getServiceType(),
+                                clusterData.getClusterId());
+                    }
+                }
 
                 try {
                     ApplicationMonitor appMonitor = AutoscalerContext.getInstance().
@@ -338,6 +345,12 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
                     }
 
                 } finally {
+                    if (clusterDataHolders != null) {
+                        for (ClusterDataHolder clusterData : clusterDataHolders) {
+                            TopologyManager.releaseReadLockForCluster(clusterData.getServiceType(),
+                                    clusterData.getClusterId());
+                        }
+                    }
                     TopologyManager.
                             releaseReadLockForApplication(applicationUndeployedEvent.getApplicationId());
                 }
@@ -355,6 +368,13 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
 
                 //acquire read lock
                 TopologyManager.acquireReadLockForApplication(applicationRemovedEvent.getApplicationId());
+                Set<ClusterDataHolder> clusterDataHolders = applicationRemovedEvent.getClusterData();
+                if (clusterDataHolders != null) {
+                    for (ClusterDataHolder clusterData : clusterDataHolders) {
+                        TopologyManager.acquireReadLockForCluster(clusterData.getServiceType(),
+                                clusterData.getClusterId());
+                    }
+                }
 
                 try {
                     //TODO remove monitors as well as any starting or pending threads
@@ -379,6 +399,12 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
 
                 } finally {
                     //release read lock
+                    if (clusterDataHolders != null) {
+                        for (ClusterDataHolder clusterData : clusterDataHolders) {
+                            TopologyManager.releaseReadLockForCluster(clusterData.getServiceType(),
+                                    clusterData.getClusterId());
+                        }
+                    }
                     TopologyManager.releaseReadLockForApplication(applicationRemovedEvent.getApplicationId());
                 }