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 2015/12/09 18:06:40 UTC

[15/21] stratos git commit: Move acquireWriteLock call in terminateInstance method to a separate try-finally block in-order to avoid releasing locks which are not taken

Move acquireWriteLock call in terminateInstance method to a separate try-finally block in-order to avoid releasing locks which are not taken


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

Branch: refs/heads/stratos-4.1.x
Commit: cbde779f99690d72edddfc6360fafad445cbcb13
Parents: 6ae0185
Author: Akila Perera <ra...@gmail.com>
Authored: Mon Dec 7 16:04:38 2015 +0530
Committer: Isuru Haththotuwa <is...@apache.org>
Committed: Wed Dec 9 18:41:33 2015 +0530

----------------------------------------------------------------------
 .../impl/CloudControllerServiceImpl.java        | 56 ++++++++++----------
 1 file changed, 29 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/cbde779f/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java
index 6a1303a..d25ab52 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java
@@ -645,41 +645,43 @@ public class CloudControllerServiceImpl implements CloudControllerService {
                 throw new InvalidMemberException(msg);
             }
 
-            // check if status == active, if true, then this is a termination on member faulty
-            TopologyHolder.acquireWriteLock();
-            Topology topology = TopologyHolder.getTopology();
-            org.apache.stratos.messaging.domain.topology.Service service = topology
-                    .getService(memberContext.getCartridgeType());
-
-            if (service != null) {
-                Cluster cluster = service.getCluster(memberContext.getClusterId());
-                if (cluster != null) {
-                    Member member = cluster.getMember(memberId);
-                    if (member != null) {
-
-                        // check if ready to shutdown member is expired and send
-                        // member terminated if it is.
-                        if (isMemberExpired(member, memberContext.getObsoleteInitTime(),
-                                memberContext.getObsoleteExpiryTime())) {
-                            if (log.isInfoEnabled()) {
-                                log.info(String.format(
-                                        "Member pending termination in ReadyToShutdown state exceeded expiry time. "
-                                                + "This member has to be manually deleted: %s",
-                                        memberContext.getMemberId()));
-                            }
+            try {
+                // check if status == active, if true, then this is a termination on member faulty
+                TopologyHolder.acquireWriteLock();
+                Topology topology = TopologyHolder.getTopology();
+                org.apache.stratos.messaging.domain.topology.Service service = topology
+                        .getService(memberContext.getCartridgeType());
+
+                if (service != null) {
+                    Cluster cluster = service.getCluster(memberContext.getClusterId());
+                    if (cluster != null) {
+                        Member member = cluster.getMember(memberId);
+                        if (member != null) {
+
+                            // check if ready to shutdown member is expired and send
+                            // member terminated if it is.
+                            if (isMemberExpired(member, memberContext.getObsoleteInitTime(),
+                                    memberContext.getObsoleteExpiryTime())) {
+                                if (log.isInfoEnabled()) {
+                                    log.info(String.format(
+                                            "Member pending termination in ReadyToShutdown state exceeded expiry time. "
+                                                    + "This member has to be manually deleted: %s",
+                                            memberContext.getMemberId()));
+                                }
 
-                            CloudControllerServiceUtil.executeMemberTerminationPostProcess(memberContext);
-                            return false;
+                                CloudControllerServiceUtil.executeMemberTerminationPostProcess(memberContext);
+                                return false;
+                            }
                         }
                     }
                 }
+                executorService.execute(new InstanceTerminator(memberContext));
+            } finally {
+                TopologyHolder.releaseWriteLock();
             }
-            executorService.execute(new InstanceTerminator(memberContext));
         } catch (Exception e) {
             String message = "Could not terminate instance: [member-id] " + memberId;
             throw new CloudControllerException(message, e);
-        } finally {
-            TopologyHolder.releaseWriteLock();
         }
         return true;
     }