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(); }
