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 2014/01/04 09:27:33 UTC

[07/12] git commit: continuation od Registry based Persistence

continuation od Registry based Persistence


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

Branch: refs/heads/master
Commit: 076c17374c7ae46babb4c0600163ac0a46078227
Parents: 47e4f43
Author: Isuru <is...@wso2.com>
Authored: Fri Jan 3 11:53:22 2014 +0530
Committer: Isuru <is...@wso2.com>
Committed: Fri Jan 3 11:53:22 2014 +0530

----------------------------------------------------------------------
 .../DataCartridgeSubscriptionConnector.java     |  4 +-
 .../apache/stratos/adc/mgt/dto/Cartridge.java   | 20 +++---
 .../mgt/listener/InstanceStatusListener.java    |  4 ++
 .../adc/mgt/lookup/ClusterIdToSubscription.java | 14 +++--
 .../adc/mgt/lookup/LookupDataHolder.java        | 11 +++-
 .../adc/mgt/lookup/SubscriptionContext.java     | 48 ++++++++++++++-
 .../lookup/TenantIdToSubscriptionContext.java   | 16 +++++
 .../manager/CartridgeSubscriptionManager.java   | 44 +++++++++++---
 .../adc/mgt/persistence/PersistenceManager.java |  2 +-
 .../RegistryBasedPersistenceManager.java        | 55 ++++++++++++++---
 .../adc/mgt/registry/RegistryManager.java       | 28 ++++++++-
 .../DataInsertionAndRetrievalManager.java       | 45 +++++++++++---
 .../service/ApplicationManagementService.java   |  6 +-
 .../mgt/utils/ApplicationManagementUtil.java    | 24 ++++----
 .../rest/endpoint/services/ServiceUtils.java    | 64 ++++++++++++--------
 15 files changed, 295 insertions(+), 90 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/076c1737/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/connector/data/DataCartridgeSubscriptionConnector.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/connector/data/DataCartridgeSubscriptionConnector.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/connector/data/DataCartridgeSubscriptionConnector.java
index e4a080c..cc3d687 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/connector/data/DataCartridgeSubscriptionConnector.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/connector/data/DataCartridgeSubscriptionConnector.java
@@ -59,7 +59,7 @@ public class DataCartridgeSubscriptionConnector extends CartridgeSubscriptionCon
                 // This cannot happen here.
             }
             if (cartridge != null) {
-                if (!cartridge.getStatus().equals("ACTIVE")) {
+                /*if (!cartridge.getStatus().equals("ACTIVE")) {
                     try {
                         Thread.sleep(3000);
                     } catch (InterruptedException ignore) {
@@ -71,7 +71,7 @@ public class DataCartridgeSubscriptionConnector extends CartridgeSubscriptionCon
                     log.info("Connection information retrieved for " + cartridgeSubscription + " and " +
                             connectingCartridgeSubscription);
                     break;
-                }
+                }*/
             }
 
             if(attempts == maxAttempts) {

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/076c1737/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/dto/Cartridge.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/dto/Cartridge.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/dto/Cartridge.java
index da09254..dcd3dbe 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/dto/Cartridge.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/dto/Cartridge.java
@@ -28,16 +28,16 @@ public class Cartridge implements Comparable<Cartridge> {
     private String description;
 	private String cartridgeAlias;
 	private String cartridgeType;
-	private int activeInstances;
+	//private int activeInstances;
 	private String status;
-	private String ip;
+	//private String ip;
 	private String password;
 	private String provider;
 	private String version;
 	private boolean multiTenant;
 	private String hostName;
-	private String policy;
-	private String policyDescription;
+	//private String policy;
+	//private String policyDescription;
 	private String repoURL;
 	private String dbUserName;
 	private String mappedDomain;
@@ -76,13 +76,13 @@ public class Cartridge implements Comparable<Cartridge> {
 		this.cartridgeType = cartridgeType;
 	}
 
-	public int getActiveInstances() {
+	/*public int getActiveInstances() {
 		return activeInstances;
 	}
 
 	public void setActiveInstances(int activeInstances) {
 		this.activeInstances = activeInstances;
-	}
+	}*/
 
 	public String getStatus() {
 		return status;
@@ -92,13 +92,13 @@ public class Cartridge implements Comparable<Cartridge> {
 		this.status = status;
 	}
 
-	public String getIp() {
+	/*public String getIp() {
 		return ip;
 	}
 
 	public void setIp(String ip) {
 		this.ip = ip;
-	}
+	}*/
 
 	public String getPassword() {
 		return password;
@@ -140,7 +140,7 @@ public class Cartridge implements Comparable<Cartridge> {
     	this.hostName = hostName;
     }
 
-	public String getPolicy() {
+	/*public String getPolicy() {
 		return policy;
 	}
 
@@ -154,7 +154,7 @@ public class Cartridge implements Comparable<Cartridge> {
 
 	public void setPolicyDescription(String policyDescription) {
 		this.policyDescription = policyDescription;
-	}
+	}*/
 
 	public String getRepoURL() {
     	return repoURL;

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/076c1737/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/listener/InstanceStatusListener.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/listener/InstanceStatusListener.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/listener/InstanceStatusListener.java
index 8adf021..8fad7d9 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/listener/InstanceStatusListener.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/listener/InstanceStatusListener.java
@@ -75,6 +75,10 @@ public class InstanceStatusListener implements MessageListener {
                     ArtifactUpdatePublisher publisher = new ArtifactUpdatePublisher(cartridgeSubscription.getRepository(), clusterId,
                             String.valueOf(cartridgeSubscription.getSubscriber().getTenantId()));
                     publisher.publish();
+                } else {
+                    //TODO: make this log debug
+                    log.info("No repository found for subscription with alias: " + cartridgeSubscription.getAlias() + ", type: " + cartridgeSubscription.getType()+
+                            ". Not sending the Depsync event");
                 }
 
             }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/076c1737/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/ClusterIdToSubscription.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/ClusterIdToSubscription.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/ClusterIdToSubscription.java
index 95cd03f..a04ad2f 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/ClusterIdToSubscription.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/ClusterIdToSubscription.java
@@ -40,11 +40,6 @@ public class ClusterIdToSubscription implements Serializable {
 
     public void addSubscription (CartridgeSubscription cartridgeSubscription) {
 
-        add(cartridgeSubscription);
-    }
-
-    private void add (CartridgeSubscription cartridgeSubscription) {
-
         clusterIdToCartridgeSubscription.put(cartridgeSubscription.getClusterDomain(), cartridgeSubscription);
     }
 
@@ -52,4 +47,13 @@ public class ClusterIdToSubscription implements Serializable {
 
         return clusterIdToCartridgeSubscription.get(clusterId);
     }
+
+    public void removeSubscription (String clusterId) {
+
+        if (clusterIdToCartridgeSubscription.remove(clusterId) != null) {
+            if (log.isDebugEnabled()) {
+                log.debug("Deleted the subscription for cluster " + clusterId + " from [Cluster Id -> CartridgeSubscription] map");
+            }
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/076c1737/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/LookupDataHolder.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/LookupDataHolder.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/LookupDataHolder.java
index 86cbd48..7215354 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/LookupDataHolder.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/LookupDataHolder.java
@@ -61,8 +61,8 @@ public class LookupDataHolder implements Serializable {
 
         if (clusterIdToSubscription.getSubscription(cartridgeSubscription.getClusterDomain()) != null) {
             if(log.isDebugEnabled()) {
-                log.debug("Overwriting the existing CartridgeSubscription for tenant " + cartridgeSubscription.getSubscriber().getTenantId() +
-                        ", alias " + cartridgeSubscription.getAlias());
+                log.debug("Overwriting the existing CartridgeSubscription for cluster " + cartridgeSubscription.getClusterDomain() +
+                " in [Cluster Id -> CartridgeSubscription] map");
             }
         }
         // add or update
@@ -82,8 +82,13 @@ public class LookupDataHolder implements Serializable {
 
     }
 
-    public Collection<CartridgeSubscription> getSubscriptions (int tenantId) {
+    public void removeSubscription (int tenantId, String type, String subscriptionAlias, String clusterId) {
+
+        tenantIdToSubscriptionContext.removeSubscriptionContext(tenantId, type, subscriptionAlias);
+        clusterIdToSubscription.removeSubscription(clusterId);
+    }
 
+    public Collection<CartridgeSubscription> getSubscriptions (int tenantId) {
 
         SubscriptionContext subscriptionContext = tenantIdToSubscriptionContext.getSubscriptionContext(tenantId);
         if (subscriptionContext == null) {

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/076c1737/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/SubscriptionContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/SubscriptionContext.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/SubscriptionContext.java
index 0af7728..4badf26 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/SubscriptionContext.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/SubscriptionContext.java
@@ -50,11 +50,16 @@ public class SubscriptionContext implements Serializable {
             // if an existing subscription is present, remove it
             if(existingSubscriptions.remove(cartridgeSubscription)){
                 if(log.isDebugEnabled()) {
-                    log.debug("Removed the existing Cartridge Subscription for type " + cartridgeType + ", alias " + cartridgeSubscription.getAlias());
+                    log.debug("Removed the existing Cartridge Subscription for type " + cartridgeType + ", alias " + cartridgeSubscription.getAlias() +
+                    " in [Cartridge Type -> Set<CartridgeSubscription>] map");
                 }
             }
             // add or update
             existingSubscriptions.add(cartridgeSubscription);
+            if(log.isDebugEnabled()) {
+                log.debug("Overwrote the existing Cartridge Subscription for type " + cartridgeType + ", alias " + cartridgeSubscription.getAlias() +
+                " in [Cartridge Type -> Set<CartridgeSubscription>] map");
+            }
 
         } else {
             // create a new set and add it
@@ -63,10 +68,11 @@ public class SubscriptionContext implements Serializable {
             cartridgeTypeToSubscriptions.put(cartridgeType, subscriptions);
         }
 
-        // putSubscription to aliasToSubscription map
+        // put Subscription to aliasToSubscription map
         if (aliasToSubscription.put(cartridgeSubscription.getAlias(), cartridgeSubscription) != null) {
             if(log.isDebugEnabled()) {
-                log.debug("Overwrote the existing Cartridge Subscription for alias " + cartridgeSubscription.getAlias());
+                log.debug("Overwrote the existing Cartridge Subscription for alias " + cartridgeSubscription.getAlias() +
+                " in [Subscription Alias -> CartridgeSubscription] map");
             }
         }
     }
@@ -86,4 +92,40 @@ public class SubscriptionContext implements Serializable {
         return aliasToSubscription.get(subscriptionAlias);
     }
 
+    public void deleteSubscription (String type, String subscriptionAlias) {
+
+        // remove Subscription from cartridgeTypeToSubscriptions map
+        Set<CartridgeSubscription> existingSubscriptions = cartridgeTypeToSubscriptions.get(type);
+        if (existingSubscriptions != null && !existingSubscriptions.isEmpty()) {
+            // iterate through the set
+            Iterator<CartridgeSubscription> iterator = existingSubscriptions.iterator();
+            while (iterator.hasNext()) {
+                CartridgeSubscription cartridgeSubscription = iterator.next();
+                // if a matching CartridgeSubscription is found, remove
+                if (cartridgeSubscription.getAlias().equals(subscriptionAlias)) {
+                    iterator.remove();
+                    if (log.isDebugEnabled()) {
+                        log.debug("Deleted the subscription for alias " + subscriptionAlias + " and type " + type + " from [Type -> Set<CartridgeSubscription>] map");
+                    }
+                    break;
+                }
+            }
+        }
+
+        // if the Subscriptions set is empty now, remove it from cartridgeTypeToSubscriptions map
+        if (existingSubscriptions.isEmpty()) {
+            cartridgeTypeToSubscriptions.remove(type);
+            if (log.isDebugEnabled()) {
+                log.debug("Deleted the subscriptions set for type " + type + " from [Type -> Set<CartridgeSubscription>] map");
+            }
+        }
+
+        // remove from aliasToSubscription map
+        if (aliasToSubscription.remove(subscriptionAlias) != null) {
+            if (log.isDebugEnabled()) {
+                log.debug("Deleted the subscription for alias " + subscriptionAlias + " from [Alias -> CartridgeSubscription] map");
+            }
+        }
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/076c1737/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/TenantIdToSubscriptionContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/TenantIdToSubscriptionContext.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/TenantIdToSubscriptionContext.java
index 87574cb..c2d029c 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/TenantIdToSubscriptionContext.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/TenantIdToSubscriptionContext.java
@@ -45,4 +45,20 @@ public class TenantIdToSubscriptionContext {
 
         tenantIdToSubscriptionContext.put(tenantId, subscriptionContext);
     }
+
+    public void removeSubscriptionContext (int tenantId, String type, String subscriptionAlias) {
+
+        if (tenantIdToSubscriptionContext.containsKey(tenantId)) {
+            SubscriptionContext subscriptionContext = tenantIdToSubscriptionContext.get(tenantId);
+            subscriptionContext.deleteSubscription(type, subscriptionAlias);
+
+            // delete the SubscriptionContext instance for the tenant if it carries no information
+            if (subscriptionContext.getSubscriptionsOfType(type) == null && subscriptionContext.getSubscriptionForAlias(subscriptionAlias) == null) {
+                tenantIdToSubscriptionContext.remove(tenantId);
+                if (log.isDebugEnabled()) {
+                    log.debug("Deleted the subscriptionContext instance for tenant " + tenantId);
+                }
+            }
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/076c1737/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/manager/CartridgeSubscriptionManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/manager/CartridgeSubscriptionManager.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/manager/CartridgeSubscriptionManager.java
index e530c12..50b5ba6 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/manager/CartridgeSubscriptionManager.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/manager/CartridgeSubscriptionManager.java
@@ -45,6 +45,7 @@ import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
 import org.apache.stratos.cloud.controller.pojo.Property;
 import org.wso2.carbon.context.CarbonContext;
 
+import java.util.Collection;
 import java.util.Map;
 import java.util.Set;
 
@@ -54,7 +55,7 @@ import java.util.Set;
 public class CartridgeSubscriptionManager {
 
     private static Log log = LogFactory.getLog(CartridgeSubscriptionManager.class);
-    private DataInsertionAndRetrievalManager dataInsertionAndRetrievalManager = new DataInsertionAndRetrievalManager();
+    //private static DataInsertionAndRetrievalManager dataInsertionAndRetrievalManager = new DataInsertionAndRetrievalManager();
 
     /**
      * Subscribes to a cartridge
@@ -72,7 +73,7 @@ public class CartridgeSubscriptionManager {
      * @param repositoryUsername Repository username
      * @param repositoryPassword Repository password
      *
-     * @return Subscribed CartridgeSubscriptionInfo object
+     * @return Subscribed CartridgeSubscription object
      * @throws ADCException
      * @throws InvalidCartridgeAliasException
      * @throws DuplicateCartridgeAliasException
@@ -326,7 +327,7 @@ public class CartridgeSubscriptionManager {
         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
         try {
-            dataInsertionAndRetrievalManager.cacheAndPersistSubcription(cartridgeSubscription);
+            new DataInsertionAndRetrievalManager().cacheAndPersistSubcription(cartridgeSubscription);
 
         } catch (PersistenceManagerException e) {
             String errorMsg = "Error saving subscription for tenant " +
@@ -342,6 +343,21 @@ public class CartridgeSubscriptionManager {
                 createSubscriptionResponse(cartridgeSubscriptionInfo, cartridgeSubscription.getRepository());
     }
 
+    public Collection<CartridgeSubscription> getCartridgeSubscriptions (int tenantId, String type) throws ADCException {
+
+        if (type == null || type.isEmpty()) {
+            return new DataInsertionAndRetrievalManager().getCartridgeSubscriptions(tenantId);
+
+        } else {
+            return new DataInsertionAndRetrievalManager().getCartridgeSubscriptions(tenantId, type);
+        }
+    }
+
+    public CartridgeSubscription getCartridgeSubscription (int tenantId, String subscriptionAlias) {
+
+        return new DataInsertionAndRetrievalManager().getCartridgeSubscription(tenantId, subscriptionAlias);
+    }
+
     /**
      * Unsubscribe from a Cartridge
      *
@@ -370,6 +386,8 @@ public class CartridgeSubscriptionManager {
         }*/
         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
         //fix properly
+        DataInsertionAndRetrievalManager dataInsertionAndRetrievalManager = new DataInsertionAndRetrievalManager();
+
         CartridgeSubscription cartridgeSubscription = dataInsertionAndRetrievalManager.getCartridgeSubscription(CarbonContext.getThreadLocalCarbonContext().getTenantId(), alias);
         if(cartridgeSubscription != null) {
             cartridgeSubscription.removeSubscription();
@@ -377,13 +395,23 @@ public class CartridgeSubscriptionManager {
             //set status as 'UNSUBSCRIBED'
             cartridgeSubscription.setSubscriptionStatus(CartridgeConstants.UNSUBSCRIBED);
 
-            // persist changes
+            // currently this is disabled
+            // remove subscription
+            /*try {
+                dataInsertionAndRetrievalManager.removeSubscription(CarbonContext.getThreadLocalCarbonContext().getTenantId(), alias);
+
+            } catch (PersistenceManagerException e) {
+                String errorMsg = "Error removing subscription for tenant " + tenantDomain + ", alias " + cartridgeSubscription.getAlias();
+                log.error(errorMsg);
+                throw new ADCException(errorMsg, e);
+            }*/
+
+            // update with new state
             try {
                 dataInsertionAndRetrievalManager.cacheAndPersistSubcription(cartridgeSubscription);
 
             } catch (PersistenceManagerException e) {
-                String errorMsg = "Error saving subscription for tenant " +
-                        cartridgeSubscription.getSubscriber().getTenantDomain() + ", alias " + cartridgeSubscription.getAlias();
+                String errorMsg = "Error updating subscription for tenant " + tenantDomain + ", alias " + cartridgeSubscription.getAlias();
                 log.error(errorMsg);
                 throw new ADCException(errorMsg, e);
             }
@@ -567,7 +595,7 @@ public class CartridgeSubscriptionManager {
         return subscriptions;
     }*/
 
-    private CartridgeSubscription populateCartridgeSubscriptionInformation(CartridgeInfo cartridgeInfo,
+    /*private CartridgeSubscription populateCartridgeSubscriptionInformation(CartridgeInfo cartridgeInfo,
                                                                            CartridgeSubscriptionInfo cartridgeSubscriptionInfo)
             throws ADCException {
 
@@ -595,5 +623,5 @@ public class CartridgeSubscriptionManager {
         cartridgeSubscription.setRepository(cartridgeSubscriptionInfo.getRepository());
 
         return cartridgeSubscription;
-    }
+    }*/
 }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/076c1737/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/PersistenceManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/PersistenceManager.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/PersistenceManager.java
index c4291ec..6eb93ad 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/PersistenceManager.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/PersistenceManager.java
@@ -29,7 +29,7 @@ public abstract class PersistenceManager {
     public abstract void persistCartridgeSubscription (CartridgeSubscription cartridgeSubscription)
             throws PersistenceManagerException;
 
-    public abstract void removeCartridgeSubscription (int tenantId, String alias)
+    public abstract void removeCartridgeSubscription (int tenantId, String type, String alias)
             throws PersistenceManagerException;
 
     //public abstract CartridgeSubscription getCartridgeSubscription(int tenantId, String alias)

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/076c1737/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/RegistryBasedPersistenceManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/RegistryBasedPersistenceManager.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/RegistryBasedPersistenceManager.java
index 49f55b1..aed2655 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/RegistryBasedPersistenceManager.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/RegistryBasedPersistenceManager.java
@@ -57,6 +57,11 @@ public class RegistryBasedPersistenceManager extends PersistenceManager {
                     cartridgeSubscription.getType() + "/" +
                     cartridgeSubscription.getAlias(), Serializer.serializeSubscriptionSontextToByteArray(cartridgeSubscription), cartridgeSubscription.getClusterDomain());
 
+            if (log.isDebugEnabled()) {
+                log.debug("Persisted CartridgeSubscription successfully: [ " + cartridgeSubscription.getSubscriber().getTenantDomain()
+                        + ", " + cartridgeSubscription.getType() + ", " + cartridgeSubscription.getAlias() + " ] ");
+            }
+
         } catch (RegistryException e) {
             throw new PersistenceManagerException(e);
 
@@ -78,8 +83,19 @@ public class RegistryBasedPersistenceManager extends PersistenceManager {
     }
 
     @Override
-    public void removeCartridgeSubscription (int tenantId, String alias) throws PersistenceManagerException {
-        //TODO
+    public void removeCartridgeSubscription (int tenantId, String type, String alias) throws PersistenceManagerException {
+
+        String resourcePath = STRATOS_MANAGER_REOSURCE + SUBSCRIPTIONS + "/" + Integer.toString(tenantId) + "/" + type + "/" + alias;
+
+        try {
+            RegistryManager.getInstance().delete(resourcePath);
+            if (log.isDebugEnabled()) {
+                log.debug("Deleted CartridgeSubscription on path " + resourcePath + " successfully");
+            }
+
+        } catch (RegistryException e) {
+            throw new PersistenceManagerException(e);
+        }
     }
 
     /*@Override
@@ -178,6 +194,10 @@ public class RegistryBasedPersistenceManager extends PersistenceManager {
 
     private Collection<CartridgeSubscription> traverseAndGetCartridgeSubscriptions (String resourcePath) throws PersistenceManagerException  {
 
+        if (log.isDebugEnabled()) {
+            log.debug("Root resource path: " + resourcePath);
+        }
+
         Object resourceObj;
 
         try {
@@ -187,6 +207,8 @@ public class RegistryBasedPersistenceManager extends PersistenceManager {
             throw new PersistenceManagerException(e);
         }
 
+        Collection<CartridgeSubscription> cartridgeSubscriptions = new ArrayList<CartridgeSubscription>();
+
         if (resourceObj == null) {
             // there is no resource at the given path
             return null;
@@ -195,15 +217,20 @@ public class RegistryBasedPersistenceManager extends PersistenceManager {
 
             // get the paths for all SubscriptionContext instances
             String[] subscriptionResourcePaths = (String[]) resourceObj;
+            if (log.isDebugEnabled()) {
+                for (String retrievedResourcePath : subscriptionResourcePaths) {
+                    log.debug("Retrieved resource sub-path " + retrievedResourcePath);
+                }
+            }
 
-            Collection<CartridgeSubscription> cartridgeSubscriptions = new ArrayList<CartridgeSubscription>();
             // traverse the paths recursively
             for (String subscriptionResourcePath : subscriptionResourcePaths) {
+
+                if (log.isDebugEnabled()) {
+                    log.debug("Traversing resource path " + subscriptionResourcePath);
+                }
+
                 cartridgeSubscriptions.addAll(traverseAndGetCartridgeSubscriptions(subscriptionResourcePath));
-                // remove any nulls
-                cartridgeSubscriptions.removeAll(Collections.singleton(null));
-                // return the CartridgeSubscription list
-                return cartridgeSubscriptions;
             }
 
         } else {
@@ -220,13 +247,21 @@ public class RegistryBasedPersistenceManager extends PersistenceManager {
             }
 
             if (subscriptionObj != null && subscriptionObj instanceof CartridgeSubscription) {
-                // return a list out of the CartridgeSubscription instance
-                return Collections.singletonList((CartridgeSubscription) subscriptionObj);
+
+                CartridgeSubscription deserilizedCartridgeSubscription = (CartridgeSubscription) subscriptionObj;
+                if (log.isDebugEnabled()) {
+                    log.debug("Successfully de-serialized CartridgeSubscription: " + deserilizedCartridgeSubscription.toString());
+                }
+
+                //return Collections.singletonList(deserilizedCartridgeSubscription);
+                cartridgeSubscriptions.add(deserilizedCartridgeSubscription);
 
             }
         }
 
-        return null;
+        // remove any nulls
+        cartridgeSubscriptions.removeAll(Collections.singleton(null));
+        return cartridgeSubscriptions;
     }
 
     /*@Override

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/076c1737/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/registry/RegistryManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/registry/RegistryManager.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/registry/RegistryManager.java
index 9e18811..08700da 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/registry/RegistryManager.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/registry/RegistryManager.java
@@ -42,9 +42,8 @@ public class RegistryManager {
         if (registryManager == null) {
             synchronized (RegistryManager.class) {
                 if (registryManager == null) {
-                    return registryManager;
+                    registryManager = new RegistryManager();
                 }
-                registryManager = new RegistryManager();
             }
         }
         return registryManager;
@@ -261,6 +260,31 @@ public class RegistryManager {
         }
     }
 
+    public void delete (String resourcePath) throws RegistryException {
+
+        UserRegistry registry = initRegistry();
+
+        try {
+            registry.beginTransaction();
+            registry.delete(resourcePath);
+            registry.commitTransaction();
+
+        } catch (RegistryException e) {
+            String errorMsg = "Could not delete resource at "+ resourcePath;
+            log.error(errorMsg, e);
+            // rollback
+            try {
+                registry.rollbackTransaction();
+
+            } catch (RegistryException e1) {
+                errorMsg = "Failed to rollback the transaction in registry path " + resourcePath;
+                log.error(errorMsg, e1);
+                throw e1;
+            }
+            throw e;
+        }
+    }
+
     public Object retrieve (String resourcePath) throws RegistryException {
 
         UserRegistry registry = initRegistry();

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/076c1737/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/retriever/DataInsertionAndRetrievalManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/retriever/DataInsertionAndRetrievalManager.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/retriever/DataInsertionAndRetrievalManager.java
index b083a04..916835a 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/retriever/DataInsertionAndRetrievalManager.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/retriever/DataInsertionAndRetrievalManager.java
@@ -19,13 +19,13 @@
 
 package org.apache.stratos.adc.mgt.retriever;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.adc.mgt.exception.PersistenceManagerException;
 import org.apache.stratos.adc.mgt.lookup.LookupDataHolder;
 import org.apache.stratos.adc.mgt.persistence.PersistenceManager;
 import org.apache.stratos.adc.mgt.persistence.RegistryBasedPersistenceManager;
 import org.apache.stratos.adc.mgt.subscription.CartridgeSubscription;
-import org.jgroups.logging.Log;
-import org.jgroups.logging.LogFactory;
 
 import java.util.Collection;
 
@@ -34,7 +34,7 @@ public class DataInsertionAndRetrievalManager {
     private static final Log log = LogFactory.getLog(DataInsertionAndRetrievalManager.class);
 
     // TODO: use a global object
-    PersistenceManager persistenceManager = new RegistryBasedPersistenceManager();
+    private static PersistenceManager persistenceManager = new RegistryBasedPersistenceManager();
 
     public void cacheAndPersistSubcription (CartridgeSubscription cartridgeSubscription) throws PersistenceManagerException {
 
@@ -61,6 +61,34 @@ public class DataInsertionAndRetrievalManager {
         }
     }
 
+    public void removeSubscription (int tenantId, String subscriptionAlias) throws PersistenceManagerException {
+
+        CartridgeSubscription cartridgeSubscription = getCartridgeSubscription(tenantId, subscriptionAlias);
+
+        String cartridgeType = cartridgeSubscription.getType();
+        String clusterId = cartridgeSubscription.getClusterDomain();
+
+        LookupDataHolder.getInstance().acquireWriteLock();
+
+        try {
+            // remove from cache
+            LookupDataHolder.getInstance().removeSubscription(tenantId, cartridgeType, subscriptionAlias, clusterId);
+
+            // remove from persistence manager
+            try {
+                persistenceManager.removeCartridgeSubscription(tenantId, cartridgeType, subscriptionAlias);
+
+            } catch (PersistenceManagerException e) {
+                String errorMsg = "Error in removing CartridgeSubscription from Persistence Manager";
+                log.error(errorMsg, e);
+                throw e;
+            }
+
+        } finally {
+            LookupDataHolder.getInstance().releaseWriteLock();
+        }
+    }
+
     public void cachePersistedSubscriptions () throws PersistenceManagerException {
 
         Collection<CartridgeSubscription> cartridgeSubscriptions;
@@ -78,11 +106,11 @@ public class DataInsertionAndRetrievalManager {
                 throw e;
             }
 
-            if(cartridgeSubscriptions != null || cartridgeSubscriptions.isEmpty()) {
+            if(cartridgeSubscriptions == null || cartridgeSubscriptions.isEmpty()) {
                 if(log.isDebugEnabled()) {
                     log.debug("No CartridgeSubscriptions found to add to the cache");
-                    return;
                 }
+                return;
             }
             cacheSubscriptions(cartridgeSubscriptions);
 
@@ -109,11 +137,11 @@ public class DataInsertionAndRetrievalManager {
                 throw e;
             }
 
-            if(cartridgeSubscriptions != null || cartridgeSubscriptions.isEmpty()) {
+            if(cartridgeSubscriptions == null || cartridgeSubscriptions.isEmpty()) {
                 if(log.isDebugEnabled()) {
                     log.debug("No CartridgeSubscriptions found to add to the cache");
-                    return;
                 }
+                return;
             }
             cacheSubscriptions(cartridgeSubscriptions);
 
@@ -128,6 +156,9 @@ public class DataInsertionAndRetrievalManager {
         // cache all
         for (CartridgeSubscription cartridgeSubscription : cartridgeSubscriptions) {
             LookupDataHolder.getInstance().putSubscription(cartridgeSubscription);
+            if (log.isDebugEnabled()) {
+                log.debug("Updated the in memory cache with the CartridgeSubscription: " + cartridgeSubscription.toString());
+            }
         }
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/076c1737/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/service/ApplicationManagementService.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/service/ApplicationManagementService.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/service/ApplicationManagementService.java
index 741d306..abf19a3 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/service/ApplicationManagementService.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/service/ApplicationManagementService.java
@@ -162,9 +162,9 @@ public class ApplicationManagementService extends AbstractAdmin {
 					cartridge.setDescription(cartridgeInfo.getDescription());
 					cartridge.setVersion(cartridgeInfo.getVersion());
 					cartridge.setMultiTenant(cartridgeInfo.getMultiTenant());
-					cartridge.setStatus(CartridgeConstants.NOT_SUBSCRIBED);
+					//cartridge.setStatus(CartridgeConstants.NOT_SUBSCRIBED);
 					cartridge.setCartridgeAlias("-");
-					cartridge.setActiveInstances(0);
+					//cartridge.setActiveInstances(0);
 					cartridges.add(cartridge);
 					
 					if (cartridgeInfo.getMultiTenant() && !allowMultipleSubscription) {
@@ -176,7 +176,7 @@ public class ApplicationManagementService extends AbstractAdmin {
 								log.debug("Already subscribed to " + cartridgeType
 										+ ". This multi-tenant cartridge will not be available to createSubscription");
 							}
-							cartridge.setStatus(CartridgeConstants.SUBSCRIBED);
+							//cartridge.setStatus(CartridgeConstants.SUBSCRIBED);
 						}
 					}
 				}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/076c1737/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/ApplicationManagementUtil.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/ApplicationManagementUtil.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/ApplicationManagementUtil.java
index a1e25bb..b4ea156 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/ApplicationManagementUtil.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/ApplicationManagementUtil.java
@@ -241,7 +241,7 @@ public class ApplicationManagementUtil {
                                 // This cannot happen here.
                             }
                             if (c != null) {
-                                if (!c.getStatus().equals("ACTIVE")) {
+                               /* if (!c.getStatus().equals("ACTIVE")) {
                                     try {
                                         Thread.sleep(3000);
                                     } catch (InterruptedException ignore) {
@@ -250,7 +250,7 @@ public class ApplicationManagementUtil {
                                     mySQLPassword = c.getPassword();
                                     mySQLHostName = c.getIp();
                                     break;
-                                }
+                                }*/
                             }
                         }
                         log.info(" MYSQL Cartridge info retrieved ");
@@ -977,7 +977,7 @@ public class ApplicationManagementUtil {
 			}
 			if (CartridgeConstants.DATA_CARTRIDGE_PROVIDER.equals(sub.getProvider())) {
 				// FIXME Temporary fix for SPI-301
-				cartridge.setIp(ips[ips.length - 1]);
+				//cartridge.setIp(ips[ips.length - 1]);
 				if (sub.getDataCartridge() != null) {
 					if (log.isDebugEnabled()) {
 						log.debug("Data Cartridge Info: " + sub.getDataCartridge().getUserName());
@@ -987,22 +987,22 @@ public class ApplicationManagementUtil {
 				}
 			}
 			if (cartridgeInfo.getMultiTenant()) { // TODO refactor logic for carbon cartridges.
-				cartridge.setStatus(CartridgeConstants.ACTIVE);
-				cartridge.setActiveInstances(ips.length);
+				//cartridge.setStatus(CartridgeConstants.ACTIVE);
+				//cartridge.setActiveInstances(ips.length);
 			} else {
 				Map<String, String> instanceIpMap;
 				try {
 					instanceIpMap = PersistenceManager.getCartridgeInstanceInfo(ips, sub.getClusterDomain(),
 							sub.getClusterSubdomain());
-					cartridge.setActiveInstances(ips.length);
-					cartridge.setStatus(CartridgeConstants.ACTIVE);
+					//cartridge.setActiveInstances(ips.length);
+					//cartridge.setStatus(CartridgeConstants.ACTIVE);
 				} catch (Exception e) {
 					throw new ADCException("Error checking cartridge status");
 				}
 
                 if(cartridgeInfo.getProvider().equalsIgnoreCase(CartridgeConstants.PROVIDER_NAME_WSO2)) {
-                    cartridge.setActiveInstances(ips.length);
-                    cartridge.setStatus(CartridgeConstants.ACTIVE);
+                    //cartridge.setActiveInstances(ips.length);
+                    //cartridge.setStatus(CartridgeConstants.ACTIVE);
                     /*List<Member> members = getMemberInstances(sub.getClusterDomain(), sub.getClusterSubdomain());
                     if(members != null) {
                         int activeInstancesCount = 0;
@@ -1018,7 +1018,7 @@ public class ApplicationManagementUtil {
 			}
         } else {
             log.warn("IPs have not returned through Topology Management for " + sub.getAlias());
-            cartridge.setStatus(CartridgeConstants.SUBSCRIBED);
+            //cartridge.setStatus(CartridgeConstants.SUBSCRIBED);
         }
         cartridge.setDisplayName(cartridgeInfo.getDisplayName());
         cartridge.setDescription(cartridgeInfo.getDescription());
@@ -1067,10 +1067,10 @@ public class ApplicationManagementUtil {
         cartridge.setCartridgeAlias(sub.getAlias());
         cartridge.setCartridgeType(sub.getCartridge());
         cartridge.setHostName(sub.getHostName());
-        cartridge.setPolicy(sub.getPolicy());
+        //cartridge.setPolicy(sub.getPolicy());
         Policy policy = PolicyHolder.getInstance().getPolicy(sub.getPolicy());
         if (policy != null) {
-        	cartridge.setPolicyDescription(policy.getDescription());
+        //	cartridge.setPolicyDescription(policy.getDescription());
         }
         cartridge.setProvider(sub.getProvider());
         cartridge.setMappedDomain(sub.getMappedDomain());

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/076c1737/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java
index 3b77551..dc3d753 100644
--- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java
+++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java
@@ -24,34 +24,27 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.adc.mgt.client.AutoscalerServiceClient;
 import org.apache.stratos.adc.mgt.client.CloudControllerServiceClient;
-import org.apache.stratos.adc.mgt.dao.CartridgeSubscriptionInfo;
 import org.apache.stratos.adc.mgt.deploy.service.ServiceDeploymentManager;
 import org.apache.stratos.adc.mgt.dto.Cartridge;
 import org.apache.stratos.adc.mgt.dto.SubscriptionInfo;
 import org.apache.stratos.adc.mgt.exception.*;
-import org.apache.stratos.adc.mgt.internal.DataHolder;
 import org.apache.stratos.adc.mgt.manager.CartridgeSubscriptionManager;
 import org.apache.stratos.adc.mgt.subscription.CartridgeSubscription;
 import org.apache.stratos.adc.mgt.topology.model.TopologyClusterInformationModel;
 import org.apache.stratos.adc.mgt.utils.ApplicationManagementUtil;
 import org.apache.stratos.adc.mgt.utils.CartridgeConstants;
 import org.apache.stratos.adc.mgt.utils.PersistenceManager;
-import org.apache.stratos.adc.topology.mgt.service.TopologyManagementService;
 import org.apache.stratos.autoscaler.deployment.policy.DeploymentPolicy;
-import org.apache.stratos.cloud.controller.pojo.CartridgeConfig;
-import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
-import org.apache.stratos.cloud.controller.pojo.LoadbalancerConfig;
+import org.apache.stratos.cloud.controller.pojo.*;
 import org.apache.stratos.cloud.controller.pojo.Properties;
 import org.apache.stratos.messaging.domain.topology.Cluster;
+import org.apache.stratos.messaging.util.Constants;
 import org.apache.stratos.rest.endpoint.bean.autoscaler.partition.Partition;
 import org.apache.stratos.rest.endpoint.bean.autoscaler.partition.PartitionGroup;
 import org.apache.stratos.rest.endpoint.bean.autoscaler.policy.autoscale.AutoscalePolicy;
 import org.apache.stratos.rest.endpoint.bean.cartridge.definition.CartridgeDefinitionBean;
 import org.apache.stratos.rest.endpoint.bean.util.converter.PojoConverter;
 import org.apache.stratos.rest.endpoint.exception.RestAPIException;
-import org.wso2.carbon.context.PrivilegedCarbonContext;
-import org.apache.stratos.cloud.controller.pojo.Property;
-import org.apache.stratos.messaging.util.Constants;
 
 import java.util.*;
 import java.util.regex.Pattern;
@@ -453,9 +446,9 @@ public class ServiceUtils {
                     cartridge.setDescription(cartridgeInfo.getDescription());
                     cartridge.setVersion(cartridgeInfo.getVersion());
                     cartridge.setMultiTenant(cartridgeInfo.getMultiTenant());
-                    cartridge.setStatus(CartridgeConstants.NOT_SUBSCRIBED);
+                    //cartridge.setStatus(CartridgeConstants.NOT_SUBSCRIBED);
                     cartridge.setCartridgeAlias("-");
-                    cartridge.setActiveInstances(0);
+                    //cartridge.setActiveInstances(0);
                     cartridges.add(cartridge);
 
                     if (cartridgeInfo.getMultiTenant() && !allowMultipleSubscription) {
@@ -467,7 +460,7 @@ public class ServiceUtils {
                                 log.debug("Already subscribed to " + cartridgeType
                                         + ". This multi-tenant cartridge will not be available to createSubscription");
                             }
-                            cartridge.setStatus(CartridgeConstants.SUBSCRIBED);
+                            //cartridge.setStatus(CartridgeConstants.SUBSCRIBED);
                         }
                     }
                 }
@@ -501,12 +494,14 @@ public class ServiceUtils {
         try {
             Pattern searchPattern = getSearchStringPattern(cartridgeSearchString);
 
-            List<CartridgeSubscriptionInfo> subscriptionList = PersistenceManager
-                    .retrieveSubscribedCartridges(ApplicationManagementUtil.getTenantId(configurationContext));
+            //List<CartridgeSubscriptionInfo> subscriptionList = PersistenceManager
+            //        .retrieveSubscribedCartridges(ApplicationManagementUtil.getTenantId(configurationContext));
+            Collection<CartridgeSubscription> subscriptions = cartridgeSubsciptionManager.getCartridgeSubscriptions(ApplicationManagementUtil.
+                    getTenantId(configurationContext), null);
 
-            if (subscriptionList != null && !subscriptionList.isEmpty()) {
-                for (CartridgeSubscriptionInfo subscription : subscriptionList) {
-                    CartridgeInfo cartridgeInfo = null;
+            if (subscriptions != null && !subscriptions.isEmpty()) {
+                for (CartridgeSubscription subscription : subscriptions) {
+                    /*CartridgeInfo cartridgeInfo = null;
                     try {
                         cartridgeInfo = CloudControllerServiceClient.getServiceClient().getCartridgeInfo(
                                 subscription.getCartridge());
@@ -522,15 +517,36 @@ public class ServiceUtils {
                             log.debug("Cartridge Info not found: " + subscription.getCartridge());
                         }
                         continue;
+                    }*/
+                    if (!cartridgeMatches(subscription.getCartridgeInfo(), subscription, searchPattern)) {
+                        continue;
                     }
-                    if (!cartridgeMatches(cartridgeInfo, subscription, searchPattern)) {
+
+                    if (!subscription.getSubscriptionStatus().equals(CartridgeConstants.SUBSCRIBED)) {
+                        // not in the subscribed state, skip
                         continue;
                     }
-                    TopologyManagementService topologyMgtService = DataHolder.getTopologyMgtService();
+                    /*TopologyManagementService topologyMgtService = DataHolder.getTopologyMgtService();
                     String[] ips = topologyMgtService.getActiveIPs(subscription.getCartridge(),
                             subscription.getClusterDomain(), subscription.getClusterSubdomain());
                     String tenantDomain = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantDomain();
                     Cartridge cartridge = ApplicationManagementUtil.populateCartridgeInfo(cartridgeInfo, subscription, ips, tenantDomain);
+                    cartridges.add(cartridge);*/
+                    Cartridge cartridge = new Cartridge();
+                    cartridge.setCartridgeType(subscription.getCartridgeInfo().getType());
+                    cartridge.setMultiTenant(subscription.getCartridgeInfo().getMultiTenant());
+                    cartridge.setProvider(subscription.getCartridgeInfo().getProvider());
+                    cartridge.setVersion(subscription.getCartridgeInfo().getVersion());
+                    cartridge.setDescription(subscription.getCartridgeInfo().getDescription());
+                    cartridge.setDisplayName(subscription.getCartridgeInfo().getDisplayName());
+                    cartridge.setCartridgeAlias(subscription.getAlias());
+                    cartridge.setHostName(subscription.getHostName());
+                    cartridge.setMappedDomain(subscription.getMappedDomain());
+                    if (subscription.getRepository() != null) {
+                        cartridge.setRepoURL(subscription.getRepository().getUrl());
+                    }
+                    cartridge.setStatus(subscription.getSubscriptionStatus());
+
                     cartridges.add(cartridge);
                 }
             } else {
@@ -585,7 +601,7 @@ public class ServiceUtils {
         return true;
     }
 
-    static boolean cartridgeMatches(CartridgeInfo cartridgeInfo, CartridgeSubscriptionInfo cartridgeSubscriptionInfo, Pattern pattern) {
+    static boolean cartridgeMatches(CartridgeInfo cartridgeInfo, CartridgeSubscription cartridgeSubscription, Pattern pattern) {
         if (pattern != null) {
             boolean matches = false;
             if (cartridgeInfo.getDisplayName() != null) {
@@ -594,11 +610,11 @@ public class ServiceUtils {
             if (!matches && cartridgeInfo.getDescription() != null) {
                 matches = pattern.matcher(cartridgeInfo.getDescription().toLowerCase()).find();
             }
-            if (!matches && cartridgeSubscriptionInfo.getCartridge() != null) {
-                matches = pattern.matcher(cartridgeSubscriptionInfo.getCartridge().toLowerCase()).find();
+            if (!matches && cartridgeSubscription.getType() != null) {
+                matches = pattern.matcher(cartridgeSubscription.getType().toLowerCase()).find();
             }
-            if (!matches && cartridgeSubscriptionInfo.getAlias() != null) {
-                matches = pattern.matcher(cartridgeSubscriptionInfo.getAlias().toLowerCase()).find();
+            if (!matches && cartridgeSubscription.getAlias() != null) {
+                matches = pattern.matcher(cartridgeSubscription.getAlias().toLowerCase()).find();
             }
             return matches;
         }