Updated Branches: refs/heads/master 27fb367a5 -> ff3afed85
adding a check to undeploy service if only a if only no active Subscriptions are found Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/e6a66b1e Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/e6a66b1e Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/e6a66b1e Branch: refs/heads/master Commit: e6a66b1e8efc27f84c3a3e5c96a847a46f51f2ed Parents: dd85cc2 Author: Isuru <[email protected]> Authored: Sun Jan 12 10:16:28 2014 +0530 Committer: Isuru <[email protected]> Committed: Sun Jan 12 10:16:28 2014 +0530 ---------------------------------------------------------------------- .../stratos/manager/deploy/service/Service.java | 13 ++++++++++- .../service/ServiceDeploymentManager.java | 11 ++++++++++ .../manager/lookup/LookupDataHolder.java | 23 ++++++++++++++++++++ .../lookup/TenantIdToSubscriptionContext.java | 6 +++++ .../DataInsertionAndRetrievalManager.java | 14 ++++++++++++ 5 files changed, 66 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/e6a66b1e/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/Service.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/Service.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/Service.java index fdac49f..6aa540c 100644 --- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/Service.java +++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/Service.java @@ -21,6 +21,7 @@ package org.apache.stratos.manager.deploy.service; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.stratos.cloud.controller.pojo.CartridgeInfo; import org.apache.stratos.cloud.controller.pojo.Property; import org.apache.stratos.manager.client.CloudControllerServiceClient; import org.apache.stratos.manager.exception.ADCException; @@ -29,7 +30,6 @@ import org.apache.stratos.manager.payload.BasicPayloadData; import org.apache.stratos.manager.payload.PayloadData; import org.apache.stratos.manager.payload.PayloadFactory; import org.apache.stratos.manager.subscription.utils.CartridgeSubscriptionUtils; -import org.apache.stratos.cloud.controller.pojo.CartridgeInfo; import org.apache.stratos.manager.utils.CartridgeConstants; import java.io.Serializable; @@ -97,6 +97,17 @@ public abstract class Service implements Serializable { public void undeploy () throws ADCException { try { + CloudControllerServiceClient.getServiceClient().terminateAllInstances(clusterId); + + } catch (Exception e) { + String errorMsg = "Error in undeploying Service with type " + type; + log.error(errorMsg, e); + throw new ADCException(errorMsg, e); + } + + log.info("terminated instance with Service Type " + type); + + try { CloudControllerServiceClient.getServiceClient().unregisterService(clusterId); } catch (Exception e) { http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/e6a66b1e/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/ServiceDeploymentManager.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/ServiceDeploymentManager.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/ServiceDeploymentManager.java index 7d3b7fb..bf1ce62 100644 --- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/ServiceDeploymentManager.java +++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/ServiceDeploymentManager.java @@ -35,9 +35,11 @@ import org.apache.stratos.manager.exception.PersistenceManagerException; import org.apache.stratos.manager.exception.ServiceAlreadyDeployedException; import org.apache.stratos.manager.exception.UnregisteredCartridgeException; import org.apache.stratos.manager.retriever.DataInsertionAndRetrievalManager; +import org.apache.stratos.manager.subscription.CartridgeSubscription; import org.apache.stratos.messaging.util.Constants; import java.util.ArrayList; +import java.util.Collection; import java.util.List; public class ServiceDeploymentManager { @@ -326,6 +328,15 @@ public class ServiceDeploymentManager { DataInsertionAndRetrievalManager dataInsertionAndRetrievalManager = new DataInsertionAndRetrievalManager(); + // check if there are already created Subscriptions for this type + Collection<CartridgeSubscription> cartridgeSubscriptions = dataInsertionAndRetrievalManager.getCartridgeSubscriptions(type); + if (cartridgeSubscriptions != null && !cartridgeSubscriptions.isEmpty()) { + // can't undeploy; there are existing Subscriptions + String errorMsg = "Cannot undeploy Service since existing Subscriptions are found"; + log.error(errorMsg); + throw new ADCException(errorMsg); + } + Service service; try { service = dataInsertionAndRetrievalManager.getService(type); http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/e6a66b1e/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lookup/LookupDataHolder.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lookup/LookupDataHolder.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lookup/LookupDataHolder.java index f7a7c34..7598013 100644 --- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lookup/LookupDataHolder.java +++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lookup/LookupDataHolder.java @@ -24,6 +24,7 @@ import org.apache.commons.logging.LogFactory; import org.apache.stratos.manager.subscription.CartridgeSubscription; import java.io.Serializable; +import java.util.ArrayList; import java.util.Collection; import java.util.Set; import java.util.concurrent.locks.ReentrantReadWriteLock; @@ -89,6 +90,28 @@ public class LookupDataHolder implements Serializable { clusterIdToSubscription.removeSubscription(clusterId, subscriptionAlias); } + public Collection<CartridgeSubscription> getSubscriptions (String cartridgeType) { + + Collection<SubscriptionContext> subscriptionContexts = tenantIdToSubscriptionContext.getSubscriptionContexts(); + if (subscriptionContexts == null) { + // no subscriptions + return null; + } + + Collection<CartridgeSubscription> cartridgeSubscriptions = new ArrayList<CartridgeSubscription>(); + // iterate through the SubscriptionContexts + for (SubscriptionContext subscriptionContext : subscriptionContexts) { + // check if CartridgeSubscriptions exist for the given type, in each SubscriptionContext instance + Collection<CartridgeSubscription> cartridgeSubscriptionsOfType = subscriptionContext.getSubscriptionsOfType(cartridgeType); + if (cartridgeSubscriptionsOfType != null && !cartridgeSubscriptions.isEmpty()) { + // collect the relevant CartridgeSubscriptions + cartridgeSubscriptions.addAll(cartridgeSubscriptionsOfType); + } + } + + return cartridgeSubscriptions; + } + public Collection<CartridgeSubscription> getSubscriptions (int tenantId) { SubscriptionContext subscriptionContext = tenantIdToSubscriptionContext.getSubscriptionContext(tenantId); http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/e6a66b1e/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lookup/TenantIdToSubscriptionContext.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lookup/TenantIdToSubscriptionContext.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lookup/TenantIdToSubscriptionContext.java index 1d57053..c6f14c6 100644 --- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lookup/TenantIdToSubscriptionContext.java +++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lookup/TenantIdToSubscriptionContext.java @@ -22,6 +22,7 @@ package org.apache.stratos.manager.lookup; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import java.util.Collection; import java.util.HashMap; import java.util.Map; @@ -36,6 +37,11 @@ public class TenantIdToSubscriptionContext { tenantIdToSubscriptionContext = new HashMap<Integer, SubscriptionContext>(); } + public Collection<SubscriptionContext> getSubscriptionContexts () { + + return tenantIdToSubscriptionContext.values(); + } + public SubscriptionContext getSubscriptionContext (int tenantId) { return tenantIdToSubscriptionContext.get(tenantId); http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/e6a66b1e/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/retriever/DataInsertionAndRetrievalManager.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/retriever/DataInsertionAndRetrievalManager.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/retriever/DataInsertionAndRetrievalManager.java index 9d988bd..16236f8 100644 --- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/retriever/DataInsertionAndRetrievalManager.java +++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/retriever/DataInsertionAndRetrievalManager.java @@ -204,6 +204,20 @@ public class DataInsertionAndRetrievalManager { } }*/ + public Collection<CartridgeSubscription> getCartridgeSubscriptions(String cartridgeType) { + + // acquire read lock + LookupDataHolder.getInstance().acquireReadLock(); + + try { + return LookupDataHolder.getInstance().getSubscriptions(cartridgeType); + + } finally { + // release read lock + LookupDataHolder.getInstance().releaseReadLock(); + } + } + public CartridgeSubscription getCartridgeSubscription (int tenantId, String subscriptionAlias) { // acquire read lock
