Repository: incubator-stratos
Updated Branches:
  refs/heads/master b0cf6bc8a -> 6b19e6d4a


fixing unsubscription issue


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

Branch: refs/heads/master
Commit: 6b19e6d4a1d13d7414a5d091f4828815a7a6ca9c
Parents: b0cf6bc
Author: rekathiru <[email protected]>
Authored: Wed Feb 19 17:01:49 2014 +0530
Committer: rekathiru <[email protected]>
Committed: Wed Feb 19 17:01:49 2014 +0530

----------------------------------------------------------------------
 .../impl/CloudControllerServiceImpl.java        | 141 +++++++++++--------
 1 file changed, 80 insertions(+), 61 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/6b19e6d4/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
index cf3d978..ae37667 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
@@ -1025,70 +1025,89 @@ public class CloudControllerServiceImpl implements 
CloudControllerService {
     @Override
        public void unregisterService(String clusterId) throws 
UnregisteredClusterException {
         final String clusterId_ = clusterId;
-            Runnable r = new Runnable() {
-                 public void run() {
-                     ClusterContext ctxt = 
dataHolder.getClusterContext(clusterId_);
-                     if(ctxt == null) {
-                        String msg = "Unregistration of service cluster 
failed. Cluster not found: " + clusterId_;
-                        log.error(msg);
-                     }
-                     Collection<Member> members = 
TopologyManager.getTopology().
-                             
getService(ctxt.getCartridgeType()).getCluster(clusterId_).getMembers();
-                     long endTime = System.currentTimeMillis() + 
ctxt.getTimeoutInMillis() * members.size();
-                     
-                     while(members.size() > 0 && System.currentTimeMillis()< 
endTime) {
-                        //waiting until all the members got removed from the 
Topology/ timed out
-                        CloudControllerUtil.sleep(1000);
-                     }
-                     
-                     // if there're still alive members
-                     if(members.size() > 0) {
-                        //forcefully terminate them
-                        for (Member member : members) {
-                                                       
-                                try {
-                                                               
terminateInstance(member.getMemberId());
-                                                       } catch (Exception e) {
-                                                               // we are not 
gonna stop the execution due to errors.
-                                                               
log.warn("Instance termination failed of member [id] "+member.getMemberId(), e);
-                                                       }
-                                               }
-                     }
-                     
-                     log.info("Unregistration of service cluster: " + 
clusterId_);
-                     deleteVolumes(ctxt);
-                     TopologyBuilder.handleClusterRemoved(ctxt);
-                     dataHolder.removeClusterContext(clusterId_);
-                     dataHolder.removeMemberContextsOfCluster(clusterId_);
-                     persist();
+
+        Runnable terminateInTimeout = new Runnable() {
+            @Override
+            public void run() {
+                ClusterContext ctxt = dataHolder.getClusterContext(clusterId_);
+                 if(ctxt == null) {
+                     String msg = "Unregistration of service cluster failed. 
Cluster not found: " + clusterId_;
+                     log.error(msg);
+                 }
+                 Collection<Member> members = TopologyManager.getTopology().
+                         
getService(ctxt.getCartridgeType()).getCluster(clusterId_).getMembers();
+                 long endTime = System.currentTimeMillis() + 
ctxt.getTimeoutInMillis() * members.size();
+                while(System.currentTimeMillis()< endTime) {
+                    CloudControllerUtil.sleep(1000);
+
+                }
+
+                 // if there're still alive members
+                 if(members.size() > 0) {
+                     //forcefully terminate them
+                     for (Member member : members) {
+
+                         try {
+                            terminateInstance(member.getMemberId());
+                        } catch (Exception e) {
+                            // we are not gonna stop the execution due to 
errors.
+                            log.warn("Instance termination failed of member 
[id] " + member.getMemberId(), e);
+                        }
+                    }
+                 }
+            }
+        };
+        Runnable unregister = new Runnable() {
+             public void run() {
+                 ClusterContext ctxt = 
dataHolder.getClusterContext(clusterId_);
+                 if(ctxt == null) {
+                     String msg = "Unregistration of service cluster failed. 
Cluster not found: " + clusterId_;
+                     log.error(msg);
+                 }
+                 Collection<Member> members = TopologyManager.getTopology().
+                         
getService(ctxt.getCartridgeType()).getCluster(clusterId_).getMembers();
+                 long endTime = System.currentTimeMillis() + 
ctxt.getTimeoutInMillis() * members.size();
+
+                 while(members.size() > 0) {
+                    //waiting until all the members got removed from the 
Topology/ timed out
+                    CloudControllerUtil.sleep(1000);
                  }
 
-                               private void deleteVolumes(ClusterContext ctxt) 
{
-                                       if(ctxt.isVolumeRequired()) {
-                        Cartridge cartridge = 
dataHolder.getCartridge(ctxt.getCartridgeType());
-                        if(cartridge != null && cartridge.getIaases() != null 
&& !ctxt.getListOfVolumes().isEmpty()) {
-                                for (Volume volume : ctxt.getListOfVolumes()) {
-                                                               
if(volume.getId() != null) {
-                                                                       String 
iaasType = volume.getIaasType();
-                                                                       Iaas 
iaas = dataHolder.getIaasProvider(iaasType).getIaas();
-                                                                       if(iaas 
!= null) {
-                                                                               
try {
-                                                                               
// delete the volume
-                                                                               
iaas.deleteVolume(volume.getId());
-                                                                               
} catch(Exception ignore) {
-                                                                               
        if(log.isDebugEnabled()) {
-                                                                               
                log.debug(ignore);
-                                                                               
        }
-                                                                               
}
-                                                                       }
-                                                               }
-                                                       }
-                                
-                        }
+                 log.info("Unregistration of service cluster: " + clusterId_);
+                 deleteVolumes(ctxt);
+                 TopologyBuilder.handleClusterRemoved(ctxt);
+                 dataHolder.removeClusterContext(clusterId_);
+                 dataHolder.removeMemberContextsOfCluster(clusterId_);
+                 persist();
+             }
+
+            private void deleteVolumes(ClusterContext ctxt) {
+                if(ctxt.isVolumeRequired()) {
+                     Cartridge cartridge = 
dataHolder.getCartridge(ctxt.getCartridgeType());
+                     if(cartridge != null && cartridge.getIaases() != null && 
!ctxt.getListOfVolumes().isEmpty()) {
+                         for (Volume volume : ctxt.getListOfVolumes()) {
+                            if(volume.getId() != null) {
+                                String iaasType = volume.getIaasType();
+                                Iaas iaas = 
dataHolder.getIaasProvider(iaasType).getIaas();
+                                if(iaas != null) {
+                                    try {
+                                    // delete the volume
+                                    iaas.deleteVolume(volume.getId());
+                                    } catch(Exception ignore) {
+                                        if(log.isDebugEnabled()) {
+                                            log.debug(ignore);
+                                        }
+                                    }
+                                }
+                            }
+                        }
+
                      }
-                               }
-            };
-        new Thread(r).start();
+                 }
+            }
+        };
+        new Thread(terminateInTimeout).start();
+        new Thread(unregister).start();
         
        }
 

Reply via email to