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

Reply via email to