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/08 13:19:40 UTC

[1/2] git commit: adding logic to handle multiple Subscriptions for a cluster Id

Updated Branches:
  refs/heads/master 93fbed761 -> ba477892b


adding logic to handle multiple Subscriptions for a cluster Id


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

Branch: refs/heads/master
Commit: f0e04b57e3a1ff7dca39bfeb3189affa321458c8
Parents: f6e1352
Author: Isuru <is...@wso2.com>
Authored: Wed Jan 8 17:48:54 2014 +0530
Committer: Isuru <is...@wso2.com>
Committed: Wed Jan 8 17:48:54 2014 +0530

----------------------------------------------------------------------
 .../listener/InstanceStatusListener.java        |  27 +++--
 .../manager/lookup/ClusterIdToSubscription.java |  61 ++++++++--
 .../manager/lookup/LookupDataHolder.java        |   7 +-
 .../manager/lookup/SubscriptionContext.java     |   2 +-
 .../manager/CartridgeSubscriptionManager.java   |  23 ++--
 .../DataInsertionAndRetrievalManager.java       |   7 +-
 .../SubscriptionMultiTenantBehaviour.java       |  36 +++---
 .../SubscriptionSingleTenantBehaviour.java      |  46 +++++++
 .../StratosManagerTopologyReceiver.java         | 119 ++++++++++++-------
 9 files changed, 229 insertions(+), 99 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/f0e04b57/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/listener/InstanceStatusListener.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/listener/InstanceStatusListener.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/listener/InstanceStatusListener.java
index 69ff2cf..78338c1 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/listener/InstanceStatusListener.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/listener/InstanceStatusListener.java
@@ -30,6 +30,7 @@ import org.apache.stratos.messaging.util.Util;
 import javax.jms.Message;
 import javax.jms.MessageListener;
 import javax.jms.TextMessage;
+import java.util.Set;
 
 public class InstanceStatusListener implements MessageListener {
 
@@ -70,15 +71,23 @@ public class InstanceStatusListener implements MessageListener {
                         ". Not sending the Depsync event");
                 }*/
                 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-                CartridgeSubscription cartridgeSubscription = new DataInsertionAndRetrievalManager().getCartridgeSubscription(clusterId);
-                if (cartridgeSubscription.getRepository() != null) {
-                    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");
+                Set<CartridgeSubscription> cartridgeSubscriptions = new DataInsertionAndRetrievalManager().getCartridgeSubscription(clusterId);
+
+                for (CartridgeSubscription cartridgeSubscription : cartridgeSubscriptions) {
+                    // If only this is a non-multitenant Cartridge Subscription and repository is not null, need to
+                    // send an ArtifactUpdatedEvent event. If this is a multitenant cartridge, sending this event
+                    // will be done in SubscriptionMultiTenantBehaviour#createSubscription method
+                    if (!cartridgeSubscription.getCartridgeInfo().getMultiTenant() && cartridgeSubscription.getRepository() != null) {
+                        ArtifactUpdatePublisher publisher = new ArtifactUpdatePublisher(cartridgeSubscription.getRepository(), clusterId,
+                                String.valueOf(cartridgeSubscription.getSubscriber().getTenantId()));
+                        publisher.publish();
+
+                    } else {
+                        if(log.isDebugEnabled()) {
+                            log.debug("No repository found for subscription with alias: " + cartridgeSubscription.getAlias() + ", type: " + cartridgeSubscription.getType()+
+                                    ". Not sending the Artifact Updated event");
+                        }
+                    }
                 }
 
             }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/f0e04b57/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lookup/ClusterIdToSubscription.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lookup/ClusterIdToSubscription.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lookup/ClusterIdToSubscription.java
index 6b85c68..d9f0cf2 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lookup/ClusterIdToSubscription.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lookup/ClusterIdToSubscription.java
@@ -24,36 +24,81 @@ import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.manager.subscription.CartridgeSubscription;
 
 import java.io.Serializable;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.*;
 
 public class ClusterIdToSubscription implements Serializable {
 
     private static final Log log = LogFactory.getLog(ClusterIdToSubscription.class);
 
-    // Map: Cluster Id (Domain) -> CartridgeSubscription
-    private Map<String, CartridgeSubscription> clusterIdToCartridgeSubscription;
+    // Map: Cluster Id (Domain) -> Set<CartridgeSubscription>
+    private Map<String, Set<CartridgeSubscription>> clusterIdToCartridgeSubscription;
 
     public ClusterIdToSubscription() {
-        clusterIdToCartridgeSubscription = new HashMap<String, CartridgeSubscription>();
+        clusterIdToCartridgeSubscription = new HashMap<String, Set<CartridgeSubscription>>();
     }
 
     public void addSubscription (CartridgeSubscription cartridgeSubscription) {
 
-        clusterIdToCartridgeSubscription.put(cartridgeSubscription.getClusterDomain(), cartridgeSubscription);
+        //clusterIdToCartridgeSubscription.put(cartridgeSubscription.getClusterDomain(), cartridgeSubscription);
+        String clusterDomain = cartridgeSubscription.getClusterDomain();
+        if (clusterIdToCartridgeSubscription.containsKey(clusterDomain)) {
+            Set<CartridgeSubscription> existingSubscriptions = clusterIdToCartridgeSubscription.get(clusterDomain);
+            // if an existing subscription is present, remove it
+            if(existingSubscriptions.remove(cartridgeSubscription)){
+                if(log.isDebugEnabled()) {
+                    log.debug("Removed the existing Cartridge Subscription for cluster id " + clusterDomain + " in [Cluster Id -> Set<CartridgeSubscription>] map");
+                }
+            }
+            // add or update
+            existingSubscriptions.add(cartridgeSubscription);
+            if(log.isDebugEnabled()) {
+                log.debug("Added Cartridge Subscription for cluster id " + clusterDomain + " in [Cluster Id -> Set<CartridgeSubscription>] map");
+            }
+
+        } else {
+            // create a new set and add it
+            Set<CartridgeSubscription> subscriptions = new HashSet<CartridgeSubscription>();
+            subscriptions.add(cartridgeSubscription);
+            clusterIdToCartridgeSubscription.put(clusterDomain, subscriptions);
+        }
     }
 
-    public CartridgeSubscription getSubscription (String clusterId) {
+    public Set<CartridgeSubscription> getSubscription (String clusterId) {
 
         return clusterIdToCartridgeSubscription.get(clusterId);
     }
 
     public void removeSubscription (String clusterId) {
 
-        if (clusterIdToCartridgeSubscription.remove(clusterId) != null) {
+        /*if (clusterIdToCartridgeSubscription.remove(clusterId) != null) {
             if (log.isDebugEnabled()) {
                 log.debug("Deleted the subscription for cluster " + clusterId + " from [Cluster Id -> CartridgeSubscription] map");
             }
+        }*/
+        // remove Subscription from clusterIdToCartridgeSubscription map
+        Set<CartridgeSubscription> existingSubscriptions = clusterIdToCartridgeSubscription.get(clusterId);
+        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.getClusterDomain().equals(clusterId)) {
+                    iterator.remove();
+                    if (log.isDebugEnabled()) {
+                        log.debug("Deleted the subscription for cluster id " + clusterId + " from [Cluster Id -> Set<CartridgeSubscription>] map");
+                    }
+                    break;
+                }
+            }
+        }
+
+        // if the Subscriptions set is empty now, remove it from cartridgeTypeToSubscriptions map
+        if (existingSubscriptions != null && existingSubscriptions.isEmpty()) {
+            clusterIdToCartridgeSubscription.remove(clusterId);
+            if (log.isDebugEnabled()) {
+                log.debug("Deleted the subscriptions set for cluster id " + clusterId + " from [Cluster Id -> Set<CartridgeSubscription>] map");
+            }
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/f0e04b57/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 3dffbe6..64717b6 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
@@ -25,6 +25,7 @@ import org.apache.stratos.manager.subscription.CartridgeSubscription;
 
 import java.io.Serializable;
 import java.util.Collection;
+import java.util.Set;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 
 public class LookupDataHolder implements Serializable {
@@ -59,12 +60,12 @@ public class LookupDataHolder implements Serializable {
 
     public void putSubscription (CartridgeSubscription cartridgeSubscription) {
 
-        if (clusterIdToSubscription.getSubscription(cartridgeSubscription.getClusterDomain()) != null) {
+        /*if (clusterIdToSubscription.getSubscription(cartridgeSubscription.getClusterDomain()) != null) {
             if(log.isDebugEnabled()) {
                 log.debug("Overwriting the existing CartridgeSubscription for cluster " + cartridgeSubscription.getClusterDomain() +
                 " in [Cluster Id -> CartridgeSubscription] map");
             }
-        }
+        }*/
         // add or update
         clusterIdToSubscription.addSubscription(cartridgeSubscription);
 
@@ -123,7 +124,7 @@ public class LookupDataHolder implements Serializable {
 
     }
 
-    public CartridgeSubscription getSubscription (String clusterId) {
+    public Set<CartridgeSubscription> getSubscription (String clusterId) {
 
         return clusterIdToSubscription.getSubscription(clusterId);
 

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/f0e04b57/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lookup/SubscriptionContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lookup/SubscriptionContext.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lookup/SubscriptionContext.java
index 77f8872..8b59af7 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lookup/SubscriptionContext.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lookup/SubscriptionContext.java
@@ -113,7 +113,7 @@ public class SubscriptionContext implements Serializable {
         }
 
         // if the Subscriptions set is empty now, remove it from cartridgeTypeToSubscriptions map
-        if (existingSubscriptions.isEmpty()) {
+        if (existingSubscriptions != null && existingSubscriptions.isEmpty()) {
             cartridgeTypeToSubscriptions.remove(type);
             if (log.isDebugEnabled()) {
                 log.debug("Deleted the subscriptions set for type " + type + " from [Type -> Set<CartridgeSubscription>] map");

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/f0e04b57/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/manager/CartridgeSubscriptionManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/manager/CartridgeSubscriptionManager.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/manager/CartridgeSubscriptionManager.java
index bf436e5..a8aa6fc 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/manager/CartridgeSubscriptionManager.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/manager/CartridgeSubscriptionManager.java
@@ -22,14 +22,12 @@ package org.apache.stratos.manager.manager;
 import org.apache.axis2.AxisFault;
 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.dao.CartridgeSubscriptionInfo;
 import org.apache.stratos.manager.dto.SubscriptionInfo;
 import org.apache.stratos.manager.exception.*;
-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.publisher.ArtifactUpdatePublisher;
 import org.apache.stratos.manager.repository.Repository;
 import org.apache.stratos.manager.retriever.DataInsertionAndRetrievalManager;
 import org.apache.stratos.manager.subscriber.Subscriber;
@@ -41,13 +39,9 @@ import org.apache.stratos.manager.subscription.tenancy.SubscriptionTenancyBehavi
 import org.apache.stratos.manager.subscription.utils.CartridgeSubscriptionUtils;
 import org.apache.stratos.manager.utils.ApplicationManagementUtil;
 import org.apache.stratos.manager.utils.CartridgeConstants;
-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;
 
 /**
  * Manager class for the purpose of managing CartridgeSubscriptionInfo subscriptions, groupings, etc.
@@ -176,8 +170,10 @@ public class CartridgeSubscriptionManager {
                  cartridgeType + ", Repo URL: " + repositoryURL + ", Policy: " +
                  autoscalingPolicyName);
 
+        //moved to SubscriptionSingleTenantBehaviour#createSubscription method
+
         //Create the payload
-        BasicPayloadData basicPayloadData = CartridgeSubscriptionUtils.createBasicPayload(cartridgeSubscription);
+        /*BasicPayloadData basicPayloadData = CartridgeSubscriptionUtils.createBasicPayload(cartridgeSubscription);
         //Populate the basic payload details
         basicPayloadData.populatePayload();
 
@@ -210,12 +206,15 @@ public class CartridgeSubscriptionManager {
         }
 
         cartridgeSubscription.setPayloadData(payloadData);
+        */
 
         // Publish tenant subscribed event to message broker
         CartridgeSubscriptionUtils.publishTenantSubscribedEvent(cartridgeSubscription.getSubscriber().getTenantId(),
                 cartridgeSubscription.getCartridgeInfo().getType());
-        
-        if(cartridgeInfo.getMultiTenant()) {
+
+        //moved to SubscriptionMultiTenantBehaviour#createSubscription method
+
+        /*if(cartridgeInfo.getMultiTenant()) {
         	log.info(" Multitenant --> Publishing Artifact update event -- ");
         	log.info(" Values :  cluster id - " + cartridgeSubscription.getClusterDomain() + "  tenant - " + 
         			cartridgeSubscription.getSubscriber().getTenantId());
@@ -223,7 +222,7 @@ public class CartridgeSubscriptionManager {
             		cartridgeSubscription.getClusterDomain(), // clusterId 
             		String.valueOf(cartridgeSubscription.getSubscriber().getTenantId()));
             publisher.publish();
-        } 
+        }*/
 
         return cartridgeSubscription;
     }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/f0e04b57/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 90aa5cc..9d988bd 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
@@ -29,6 +29,7 @@ import org.apache.stratos.manager.persistence.RegistryBasedPersistenceManager;
 import org.apache.stratos.manager.subscription.CartridgeSubscription;
 
 import java.util.Collection;
+import java.util.Set;
 
 public class DataInsertionAndRetrievalManager {
 
@@ -238,13 +239,13 @@ public class DataInsertionAndRetrievalManager {
         }
     }
 
-    public CartridgeSubscription getCartridgeSubscription (String clusterId) {
+    public Set<CartridgeSubscription> getCartridgeSubscription (String clusterId) {
 
         // acquire read lock
         LookupDataHolder.getInstance().acquireReadLock();
 
         try {
-            CartridgeSubscription cartridgeSubscription = LookupDataHolder.getInstance().getSubscription(clusterId);
+            Set<CartridgeSubscription> cartridgeSubscriptions = LookupDataHolder.getInstance().getSubscription(clusterId);
             /*if (cartridgeSubscription == null) {
                 // not available in the cache, look in the registry
                 if (log.isDebugEnabled()) {
@@ -264,7 +265,7 @@ public class DataInsertionAndRetrievalManager {
                 // LookupDataHolder.getInstance().putSubscription(cartridgeSubscription);
             }*/
 
-            return cartridgeSubscription;
+            return cartridgeSubscriptions;
 
         } finally {
             // release read lock

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/f0e04b57/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/tenancy/SubscriptionMultiTenantBehaviour.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/tenancy/SubscriptionMultiTenantBehaviour.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/tenancy/SubscriptionMultiTenantBehaviour.java
index 8084468..00caf16 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/tenancy/SubscriptionMultiTenantBehaviour.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/tenancy/SubscriptionMultiTenantBehaviour.java
@@ -21,14 +21,15 @@ package org.apache.stratos.manager.subscription.tenancy;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.cloud.controller.pojo.Properties;
 import org.apache.stratos.manager.exception.ADCException;
 import org.apache.stratos.manager.exception.AlreadySubscribedException;
 import org.apache.stratos.manager.exception.NotSubscribedException;
 import org.apache.stratos.manager.exception.UnregisteredCartridgeException;
+import org.apache.stratos.manager.publisher.ArtifactUpdatePublisher;
 import org.apache.stratos.manager.retriever.DataInsertionAndRetrievalManager;
 import org.apache.stratos.manager.subscription.CartridgeSubscription;
 import org.apache.stratos.manager.utils.CartridgeConstants;
-import org.apache.stratos.cloud.controller.pojo.Properties;
 
 
 public class SubscriptionMultiTenantBehaviour extends SubscriptionTenancyBehaviour {
@@ -68,24 +69,23 @@ public class SubscriptionMultiTenantBehaviour extends SubscriptionTenancyBehavio
             }
         }
 
-        //TODO: implement getting cluster Id from DB
-        /*TopologyManager.acquireReadLock();
-
-        try {
-            Service service = TopologyManager.getTopology().getService(cartridgeSubscription.getType());
-            if(service == null) {
-                TopologyManager.releaseReadLock();
-                String errorMsg = "Error in subscribing, no service found with the name " + cartridgeSubscription.getType();
-                log.error(errorMsg);
-                throw new ADCException(errorMsg);
+        if (cartridgeSubscription.getRepository() != null) {
+
+            // publish the ArtifactUpdated event
+            log.info(" Multitenant --> Publishing Artifact update event -- ");
+            log.info(" Values :  cluster id - " + cartridgeSubscription.getClusterDomain() + "  tenant - " +
+                    cartridgeSubscription.getSubscriber().getTenantId());
+            ArtifactUpdatePublisher publisher = new ArtifactUpdatePublisher(cartridgeSubscription.getRepository(),
+                    cartridgeSubscription.getClusterDomain(), // clusterId
+                    String.valueOf(cartridgeSubscription.getSubscriber().getTenantId()));
+            publisher.publish();
+
+        } else {
+            if(log.isDebugEnabled()) {
+                log.debug("No repository found for subscription with alias: " + cartridgeSubscription.getAlias() + ", type: " + cartridgeSubscription.getType()+
+                        ". Not sending the Artifact Updated event");
             }
-
-            //cartridgeSubscription.getCluster().setClusterDomain(service.getCluster().);
-            //cartridgeSubscription.getCluster().setClusterSubDomain(domainContext.getSubDomain());
-
-        } finally {
-            TopologyManager.releaseReadLock();
-        }*/
+        }
     }
 
     public void registerSubscription(CartridgeSubscription cartridgeSubscription, Properties properties)

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/f0e04b57/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/tenancy/SubscriptionSingleTenantBehaviour.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/tenancy/SubscriptionSingleTenantBehaviour.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/tenancy/SubscriptionSingleTenantBehaviour.java
index cab0bac..cde0655 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/tenancy/SubscriptionSingleTenantBehaviour.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/tenancy/SubscriptionSingleTenantBehaviour.java
@@ -22,14 +22,24 @@ package org.apache.stratos.manager.subscription.tenancy;
 import org.apache.axis2.AxisFault;
 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;
 import org.apache.stratos.manager.exception.AlreadySubscribedException;
 import org.apache.stratos.manager.exception.NotSubscribedException;
 import org.apache.stratos.manager.exception.UnregisteredCartridgeException;
+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.CartridgeSubscription;
+import org.apache.stratos.manager.subscription.utils.CartridgeSubscriptionUtils;
 import org.apache.stratos.manager.utils.ApplicationManagementUtil;
 import org.apache.stratos.cloud.controller.pojo.Properties;
+import org.apache.stratos.manager.utils.CartridgeConstants;
+
+import java.util.Map;
+import java.util.Set;
 
 
 public class SubscriptionSingleTenantBehaviour extends SubscriptionTenancyBehaviour {
@@ -45,6 +55,42 @@ public class SubscriptionSingleTenantBehaviour extends SubscriptionTenancyBehavi
                 cartridgeSubscription.getCluster().getHostName() + "." + cartridgeSubscription.getType() + ".domain");
         cartridgeSubscription.getCluster().setHostName(cartridgeSubscription.getAlias() + "." +
                 cartridgeSubscription.getCluster().getHostName());
+
+        //Create the payload
+        BasicPayloadData basicPayloadData = CartridgeSubscriptionUtils.createBasicPayload(cartridgeSubscription);
+        //Populate the basic payload details
+        basicPayloadData.populatePayload();
+
+        CartridgeInfo cartridgeInfo = cartridgeSubscription.getCartridgeInfo();
+        PayloadData payloadData = PayloadFactory.getPayloadDataInstance(cartridgeInfo.getProvider(),
+                cartridgeInfo.getType(), basicPayloadData);
+
+        // get the payload parameters defined in the cartridge definition file for this cartridge type
+        if (cartridgeInfo.getProperties() != null && cartridgeInfo.getProperties().length != 0) {
+
+            for (Property property : cartridgeInfo.getProperties()) {
+                // check if a property is related to the payload. Currently this is done by checking if the
+                // property name starts with 'payload_parameter.' suffix. If so the payload param name will
+                // be taken as the substring from the index of '.' to the end of the property name.
+                if (property.getName()
+                        .startsWith(CartridgeConstants.CUSTOM_PAYLOAD_PARAM_NAME_PREFIX)) {
+                    String payloadParamName = property.getName();
+                    payloadData.add(payloadParamName.substring(payloadParamName.indexOf(".") + 1), property.getValue());
+                }
+            }
+        }
+
+        //check if there are any custom payload entries defined
+        if (cartridgeSubscription.getCustomPayloadEntries() != null) {
+            //add them to the payload
+            Map<String, String> customPayloadEntries = cartridgeSubscription.getCustomPayloadEntries();
+            Set<Map.Entry<String,String>> entrySet = customPayloadEntries.entrySet();
+            for (Map.Entry<String, String> entry : entrySet) {
+                payloadData.add(entry.getKey(), entry.getValue());
+            }
+        }
+
+        cartridgeSubscription.setPayloadData(payloadData);
     }
 
     public void registerSubscription(CartridgeSubscription cartridgeSubscription, Properties properties) throws ADCException, UnregisteredCartridgeException {

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/f0e04b57/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/topology/receiver/StratosManagerTopologyReceiver.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/topology/receiver/StratosManagerTopologyReceiver.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/topology/receiver/StratosManagerTopologyReceiver.java
index 6dc827d..f475db5 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/topology/receiver/StratosManagerTopologyReceiver.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/topology/receiver/StratosManagerTopologyReceiver.java
@@ -34,6 +34,8 @@ import org.apache.stratos.messaging.message.receiver.topology.TopologyEventMessa
 import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
 import org.apache.stratos.messaging.message.receiver.topology.TopologyReceiver;
 
+import java.util.Set;
+
 public class StratosManagerTopologyReceiver implements Runnable {
 
     private static final Log log = LogFactory.getLog(StratosManagerTopologyReceiver.class);
@@ -69,12 +71,15 @@ public class StratosManagerTopologyReceiver implements Runnable {
                         //iterate through all clusters
                         for (Cluster cluster : service.getClusters()) {
                             //get subscription details
-                            CartridgeSubscription cartridgeSubscription = getCartridgeSubscription(cluster.getClusterId());
-
-                            if(cartridgeSubscription != null) {
-                                //add the information to Topology Cluster Info. model
-                                TopologyClusterInformationModel.getInstance().addCluster(cartridgeSubscription.getSubscriber().getTenantId(),
-                                        cartridgeSubscription.getType(), cartridgeSubscription.getAlias(), cluster);
+                            Set<CartridgeSubscription> cartridgeSubscriptions = getCartridgeSubscription(cluster.getClusterId());
+
+                            if(cartridgeSubscriptions != null) {
+                                // iterate and do the relevant changes
+                                for (CartridgeSubscription cartridgeSubscription : cartridgeSubscriptions) {
+                                    //add the information to Topology Cluster Info. model
+                                    TopologyClusterInformationModel.getInstance().addCluster(cartridgeSubscription.getSubscriber().getTenantId(),
+                                            cartridgeSubscription.getType(), cartridgeSubscription.getAlias(), cluster);
+                                }
                             }
                         }
                     }
@@ -93,21 +98,26 @@ public class StratosManagerTopologyReceiver implements Runnable {
 
                 ClusterCreatedEvent clustercreatedEvent = (ClusterCreatedEvent) event;
                 //get subscription details
-                CartridgeSubscription cartridgeSubscription =
-                        getCartridgeSubscription(clustercreatedEvent.getClusterId());
+                Set<CartridgeSubscription> cartridgeSubscriptions = getCartridgeSubscription(clustercreatedEvent.getClusterId());
 
-                if(cartridgeSubscription != null) {
+                if(cartridgeSubscriptions != null) {
 
                     Cluster cluster;
                     //acquire read lock
                     TopologyManager.acquireReadLock();
+
                     try {
-                        cluster = TopologyManager.getTopology().
-                                getService(cartridgeSubscription.getType()).getCluster(cartridgeSubscription.getClusterDomain());
 
-                        //add the information to Topology Cluster Info. model
-                        TopologyClusterInformationModel.getInstance().addCluster(cartridgeSubscription.getSubscriber().getTenantId(),
-                                cartridgeSubscription.getType(), cartridgeSubscription.getAlias(), cluster);
+                        // iterate and do the relevant changes
+                        for (CartridgeSubscription cartridgeSubscription : cartridgeSubscriptions) {
+                            //add the information to Topology Cluster Info. model
+                            cluster = TopologyManager.getTopology().
+                                    getService(cartridgeSubscription.getType()).getCluster(cartridgeSubscription.getClusterDomain());
+
+                            //add the information to Topology Cluster Info. model
+                            TopologyClusterInformationModel.getInstance().addCluster(cartridgeSubscription.getSubscriber().getTenantId(),
+                                    cartridgeSubscription.getType(), cartridgeSubscription.getAlias(), cluster);
+                        }
 
                     } finally {
                         //release read lock
@@ -126,13 +136,17 @@ public class StratosManagerTopologyReceiver implements Runnable {
 
                 ClusterRemovedEvent clusterRemovedEvent = (ClusterRemovedEvent) event;
 
-                CartridgeSubscription cartridgeSubscription =
+                Set<CartridgeSubscription> cartridgeSubscriptions =
                         getCartridgeSubscription(clusterRemovedEvent.getClusterId());
 
-                if(cartridgeSubscription != null) {
-                    //add the information to Topology Cluster Info. model
-                    TopologyClusterInformationModel.getInstance().removeCluster(cartridgeSubscription.getSubscriber().getTenantId(),
-                            cartridgeSubscription.getType(), cartridgeSubscription.getAlias());
+                if(cartridgeSubscriptions != null) {
+
+                    // iterate
+                    for (CartridgeSubscription cartridgeSubscription : cartridgeSubscriptions) {
+                        //add the information to Topology Cluster Info. model
+                        TopologyClusterInformationModel.getInstance().removeCluster(cartridgeSubscription.getSubscriber().getTenantId(),
+                                cartridgeSubscription.getType(), cartridgeSubscription.getAlias());
+                    }
                 }
             }
         });
@@ -147,20 +161,23 @@ public class StratosManagerTopologyReceiver implements Runnable {
                 MemberStartedEvent memberStartedEvent = (MemberStartedEvent) event;
 
                 String clusterDomain = memberStartedEvent.getClusterId();
-                CartridgeSubscription cartridgeSubscription = getCartridgeSubscription(clusterDomain);
+                Set<CartridgeSubscription> cartridgeSubscriptions = getCartridgeSubscription(clusterDomain);
 
-                if(cartridgeSubscription != null) {
+                if(cartridgeSubscriptions != null) {
 
                     Cluster cluster;
                     //acquire read lock
                     TopologyManager.acquireReadLock();
 
                     try {
-                        cluster = TopologyManager.getTopology().
-                                getService(cartridgeSubscription.getType()).getCluster(cartridgeSubscription.getClusterDomain());
+                        for (CartridgeSubscription cartridgeSubscription : cartridgeSubscriptions) {
+
+                            cluster = TopologyManager.getTopology().
+                                    getService(cartridgeSubscription.getType()).getCluster(cartridgeSubscription.getClusterDomain());
 
-                        TopologyClusterInformationModel.getInstance().addCluster(cartridgeSubscription.getSubscriber().getTenantId(),
-                                cartridgeSubscription.getType(), cartridgeSubscription.getAlias(), cluster);
+                            TopologyClusterInformationModel.getInstance().addCluster(cartridgeSubscription.getSubscriber().getTenantId(),
+                                    cartridgeSubscription.getType(), cartridgeSubscription.getAlias(), cluster);
+                        }
 
                     } finally {
                         //release read lock
@@ -181,21 +198,25 @@ public class StratosManagerTopologyReceiver implements Runnable {
                 MemberActivatedEvent memberActivatedEvent = (MemberActivatedEvent) event;
 
                 String clusterDomain = memberActivatedEvent.getClusterId();
-                CartridgeSubscription cartridgeSubscription = getCartridgeSubscription(clusterDomain);
+                Set<CartridgeSubscription> cartridgeSubscriptions = getCartridgeSubscription(clusterDomain);
 
-                if(cartridgeSubscription != null) {
+                if(cartridgeSubscriptions != null) {
 
                     Cluster cluster;
                     //acquire read lock
                     TopologyManager.acquireReadLock();
 
                     try {
-                        cluster = TopologyManager.getTopology().
-                                getService(cartridgeSubscription.getType()).getCluster(cartridgeSubscription.getClusterDomain());
 
-                        TopologyClusterInformationModel.getInstance().addCluster(cartridgeSubscription.getSubscriber().getTenantId(),
-                                cartridgeSubscription.getType(),
-                                cartridgeSubscription.getAlias(), cluster);
+                        for (CartridgeSubscription cartridgeSubscription : cartridgeSubscriptions) {
+
+                            cluster = TopologyManager.getTopology().
+                                    getService(cartridgeSubscription.getType()).getCluster(cartridgeSubscription.getClusterDomain());
+
+                            TopologyClusterInformationModel.getInstance().addCluster(cartridgeSubscription.getSubscriber().getTenantId(),
+                                    cartridgeSubscription.getType(),
+                                    cartridgeSubscription.getAlias(), cluster);
+                        }
 
                     } finally {
                         //release read lock
@@ -216,20 +237,24 @@ public class StratosManagerTopologyReceiver implements Runnable {
                 MemberSuspendedEvent memberSuspendedEvent = (MemberSuspendedEvent) event;
 
                 String clusterDomain = memberSuspendedEvent.getClusterId();
-                CartridgeSubscription cartridgeSubscription = getCartridgeSubscription(clusterDomain);
+                Set<CartridgeSubscription> cartridgeSubscriptions = getCartridgeSubscription(clusterDomain);
 
-                if(cartridgeSubscription != null) {
+                if(cartridgeSubscriptions != null) {
 
                     Cluster cluster;
                     //acquire read lock
                     TopologyManager.acquireReadLock();
 
                     try {
-                        cluster = TopologyManager.getTopology().
-                                getService(cartridgeSubscription.getType()).getCluster(cartridgeSubscription.getClusterDomain());
 
-                        TopologyClusterInformationModel.getInstance().addCluster(cartridgeSubscription.getSubscriber().getTenantId(),
-                                cartridgeSubscription.getType(), cartridgeSubscription.getAlias(), cluster);
+                        for (CartridgeSubscription cartridgeSubscription : cartridgeSubscriptions) {
+
+                            cluster = TopologyManager.getTopology().
+                                    getService(cartridgeSubscription.getType()).getCluster(cartridgeSubscription.getClusterDomain());
+
+                            TopologyClusterInformationModel.getInstance().addCluster(cartridgeSubscription.getSubscriber().getTenantId(),
+                                    cartridgeSubscription.getType(), cartridgeSubscription.getAlias(), cluster);
+                        }
 
                     } finally {
                         //release read lock
@@ -250,20 +275,24 @@ public class StratosManagerTopologyReceiver implements Runnable {
                 MemberTerminatedEvent memberTerminatedEvent = (MemberTerminatedEvent) event;
 
                 String clusterDomain = memberTerminatedEvent.getClusterId();
-                CartridgeSubscription cartridgeSubscription = getCartridgeSubscription(clusterDomain);
+                Set<CartridgeSubscription> cartridgeSubscriptions = getCartridgeSubscription(clusterDomain);
 
-                if(cartridgeSubscription != null) {
+                if(cartridgeSubscriptions != null) {
 
                     Cluster cluster;
                     //acquire read lock
                     TopologyManager.acquireReadLock();
 
                     try {
-                        cluster = TopologyManager.getTopology().
-                                getService(cartridgeSubscription.getType()).getCluster(cartridgeSubscription.getClusterDomain());
 
-                        TopologyClusterInformationModel.getInstance().addCluster(cartridgeSubscription.getSubscriber().getTenantId(),
-                                cartridgeSubscription.getType(), cartridgeSubscription.getAlias(), cluster);
+                        for (CartridgeSubscription cartridgeSubscription : cartridgeSubscriptions) {
+
+                            cluster = TopologyManager.getTopology().
+                                    getService(cartridgeSubscription.getType()).getCluster(cartridgeSubscription.getClusterDomain());
+
+                            TopologyClusterInformationModel.getInstance().addCluster(cartridgeSubscription.getSubscriber().getTenantId(),
+                                    cartridgeSubscription.getType(), cartridgeSubscription.getAlias(), cluster);
+                        }
 
                     } finally {
                         //release read lock
@@ -277,7 +306,7 @@ public class StratosManagerTopologyReceiver implements Runnable {
         return processorChain;
     }
 
-    private CartridgeSubscription getCartridgeSubscription(String clusterDomain) {
+    private Set<CartridgeSubscription> getCartridgeSubscription(String clusterDomain) {
 
         try {
             return new DataInsertionAndRetrievalManager().getCartridgeSubscription(clusterDomain);


[2/2] git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-stratos into cluster_id_multiple_subscriptions

Posted by is...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-stratos into cluster_id_multiple_subscriptions


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

Branch: refs/heads/master
Commit: ba477892b84548863257cb492884a897ab9dce14
Parents: f0e04b5 93fbed7
Author: Isuru <is...@wso2.com>
Authored: Wed Jan 8 17:49:06 2014 +0530
Committer: Isuru <is...@wso2.com>
Committed: Wed Jan 8 17:49:06 2014 +0530

----------------------------------------------------------------------
 .../cartridge_deployments.jag                   |  4 +-
 .../org.apache.stratos.manager.console/lbs.jag  |  4 +-
 .../mt_service_deployments.jag                  |  4 +-
 .../policy_deployments.jag                      |  4 +-
 .../theme1/partials/cartridge_deployments.hbs   | 90 ++++++++++++++++++++
 .../themes/theme1/partials/lbs.hbs              | 90 ++++++++++++++++++++
 .../theme1/partials/mt_service_deployments.hbs  | 90 ++++++++++++++++++++
 .../theme1/partials/policy_deployments.hbs      | 90 ++++++++++++++++++++
 .../theme1/renderers/cartridge_deployments.js   | 25 ++++--
 .../themes/theme1/renderers/lbs.js              | 25 ++++--
 .../theme1/renderers/mt_service_deployments.js  | 25 ++++--
 .../theme1/renderers/policy_deployments.js      | 21 +++--
 12 files changed, 434 insertions(+), 38 deletions(-)
----------------------------------------------------------------------