You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by im...@apache.org on 2015/03/05 14:04:44 UTC

[2/2] stratos git commit: Fixing issue of reading cluster ids from application signup added event

Fixing issue of reading cluster ids from application signup added event


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

Branch: refs/heads/master
Commit: 7c4cd8cc53fb2c5f6fdfd903da2fd4a5fd336916
Parents: bf688e4
Author: Imesh Gunaratne <im...@apache.org>
Authored: Thu Mar 5 18:34:07 2015 +0530
Committer: Imesh Gunaratne <im...@apache.org>
Committed: Thu Mar 5 18:34:07 2015 +0530

----------------------------------------------------------------------
 .../services/impl/AutoscalerServiceImpl.java    |  49 +-
 .../load/balancer/common/domain/Cluster.java    |   9 +-
 ...cerCommonApplicationSignUpEventReceiver.java |  75 ++-
 ...LoadBalancerCommonTopologyEventReceiver.java |  35 +-
 .../balancer/endpoint/RequestDelegator.java     |   9 +-
 .../TenantAwareLoadBalanceEndpoint.java         |   4 +-
 .../components/ApplicationSignUpHandler.java    |  18 +-
 .../application/signup/ApplicationSignUp.java   |   7 +-
 .../ApplicationSignUpAddedMessageProcessor.java |   6 +-
 .../rest/endpoint/api/StratosApiV41Utils.java   |  16 +
 .../main/resources/StratosManagerService.wsdl   | 638 +++++++++----------
 11 files changed, 457 insertions(+), 409 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/7c4cd8cc/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
index 7f21c68..9c52bc5 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
@@ -18,26 +18,13 @@
  */
 package org.apache.stratos.autoscaler.services.impl;
 
-import java.rmi.RemoteException;
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.autoscaler.applications.ApplicationHolder;
 import org.apache.stratos.autoscaler.applications.parser.ApplicationParser;
 import org.apache.stratos.autoscaler.applications.parser.DefaultApplicationParser;
-import org.apache.stratos.autoscaler.applications.pojo.ApplicationClusterContext;
-import org.apache.stratos.autoscaler.applications.pojo.ApplicationContext;
-import org.apache.stratos.autoscaler.applications.pojo.ArtifactRepositoryContext;
-import org.apache.stratos.autoscaler.applications.pojo.CartridgeContext;
-import org.apache.stratos.autoscaler.applications.pojo.ComponentContext;
-import org.apache.stratos.autoscaler.applications.pojo.GroupContext;
-import org.apache.stratos.autoscaler.applications.pojo.SubscribableInfoContext;
+import org.apache.stratos.autoscaler.applications.pojo.*;
 import org.apache.stratos.autoscaler.applications.topic.ApplicationBuilder;
 import org.apache.stratos.autoscaler.context.AutoscalerContext;
 import org.apache.stratos.autoscaler.exception.AutoScalerException;
@@ -70,6 +57,13 @@ import org.apache.stratos.metadata.client.defaults.MetaDataServiceClient;
 import org.apache.stratos.metadata.client.exception.MetaDataServiceClientException;
 import org.wso2.carbon.registry.api.RegistryException;
 
+import java.rmi.RemoteException;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
 /**
  * Auto Scaler Service API is responsible getting Partitions and Policies.
  */
@@ -194,7 +188,7 @@ public class AutoscalerServiceImpl implements AutoscalerService {
 
             if(!applicationContext.isMultiTenant()) {
 			    // Add application signup for single tenant applications
-			    addApplicationSignUp(applicationContext, application.getKey());
+			    addApplicationSignUp(applicationContext, application.getKey(), findApplicationClusterIds(application));
 			}
 			applicationContext.setStatus(ApplicationContext.STATUS_DEPLOYED);
 			AutoscalerContext.getInstance().updateApplicationContext(applicationContext);
@@ -235,7 +229,28 @@ public class AutoscalerServiceImpl implements AutoscalerService {
         }
     }
 
-    private void addApplicationSignUp(ApplicationContext applicationContext, String applicationKey) {
+    /**
+     * Find application cluster ids.
+     * @param application
+     * @return
+     */
+    private List<String> findApplicationClusterIds(Application application) {
+        List<String> clusterIds = new ArrayList<String>();
+        for(ClusterDataHolder clusterDataHolder : application.getClusterDataRecursively()) {
+            clusterIds.add(clusterDataHolder.getClusterId());
+        }
+        return clusterIds;
+    }
+
+    /**
+     * Add application signup.
+     * @param applicationContext
+     * @param applicationKey
+     * @param clusterIds
+     */
+    private void addApplicationSignUp(ApplicationContext applicationContext, String applicationKey,
+                                      List<String> clusterIds) {
+
         try {
             if(log.isInfoEnabled()) {
                 log.info(String.format("Adding application signup: [application-id] %s",
@@ -247,6 +262,8 @@ public class AutoscalerServiceImpl implements AutoscalerService {
                 ApplicationSignUp applicationSignUp = new ApplicationSignUp();
                 applicationSignUp.setApplicationId(applicationContext.getApplicationId());
                 applicationSignUp.setTenantId(applicationContext.getTenantId());
+                String[] clusterIdsArray = clusterIds.toArray(new String[clusterIds.size()]);
+                applicationSignUp.setClusterIds(clusterIdsArray);
 
                 List<ArtifactRepository> artifactRepositoryList = new ArrayList<ArtifactRepository>();
                 CartridgeContext[] cartridgeContexts = components.getCartridgeContexts();

http://git-wip-us.apache.org/repos/asf/stratos/blob/7c4cd8cc/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/domain/Cluster.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/domain/Cluster.java b/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/domain/Cluster.java
index d2f9c4e..1f4bee9 100644
--- a/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/domain/Cluster.java
+++ b/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/domain/Cluster.java
@@ -72,10 +72,6 @@ public class Cluster {
 
     public void addMember(Member member) {
         memberMap.put(member.getMemberId(), member);
-        if(log.isInfoEnabled()) {
-            log.info(String.format("Member added to cluster: [cluster] %s [member] %s [hostname] %s [ports] %s",
-                    clusterId, member.getMemberId(), member.getHostName(), member.getPorts()));
-        }
     }
 
     public void removeMember(String memberId) {
@@ -84,13 +80,10 @@ public class Cluster {
             if(log.isWarnEnabled()) {
                 log.warn(String.format("Could not remove member, member not found: [member] %s", memberId));
             }
+            return;
         }
 
         memberMap.remove(memberId);
-        if(log.isInfoEnabled()) {
-            log.info(String.format("Member removed from cluster: [cluster] %s [member] %s [hostname] %s",
-                    clusterId, member.getMemberId(), member.getHostName()));
-        }
     }
 
     public Member getMember(String memberId) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/7c4cd8cc/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/event/receivers/LoadBalancerCommonApplicationSignUpEventReceiver.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/event/receivers/LoadBalancerCommonApplicationSignUpEventReceiver.java b/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/event/receivers/LoadBalancerCommonApplicationSignUpEventReceiver.java
index eb9d799..d5819dc 100644
--- a/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/event/receivers/LoadBalancerCommonApplicationSignUpEventReceiver.java
+++ b/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/event/receivers/LoadBalancerCommonApplicationSignUpEventReceiver.java
@@ -54,33 +54,44 @@ public class LoadBalancerCommonApplicationSignUpEventReceiver extends Applicatio
 
     private void addEventListeners() {
         addEventListener(new CompleteApplicationSignUpsEventListener() {
+            private boolean initialized = false;
+
             @Override
             protected void onEvent(Event event) {
-                if (log.isDebugEnabled()) {
-                    log.debug("Complete application signup event received");
-                }
-
-                CompleteApplicationSignUpsEvent completeApplicationSignUpsEvent = (CompleteApplicationSignUpsEvent) event;
-                for (ApplicationSignUp applicationSignUp : completeApplicationSignUpsEvent.getApplicationSignUps()) {
+                try {
+                    if (initialized) {
+                        return;
+                    }
 
-                    // Add tenant signups
-                    for (String clusterId : applicationSignUp.getClusterIds()) {
-                        topologyProvider.addTenantSignUp(clusterId, applicationSignUp.getTenantId());
+                    if (log.isDebugEnabled()) {
+                        log.debug("Complete application signup event received");
                     }
 
-                    // Add domain mappings
-                    if (applicationSignUp.getDomainMappings() != null) {
-                        for (DomainMapping domainMapping : applicationSignUp.getDomainMappings()) {
-                            if (domainMapping != null) {
-                                Cluster cluster = topologyProvider.getClusterByClusterId(domainMapping.getClusterId());
-                                if (cluster != null) {
-                                    cluster.addHostName(domainMapping.getDomainName());
-                                    log.info(String.format("Domain mapping added: [cluster] %s [domain] %s",
-                                            cluster.getClusterId(), domainMapping.getDomainName()));
+                    CompleteApplicationSignUpsEvent completeApplicationSignUpsEvent = (CompleteApplicationSignUpsEvent) event;
+                    for (ApplicationSignUp applicationSignUp : completeApplicationSignUpsEvent.getApplicationSignUps()) {
+
+                        // Add tenant signups
+                        for (String clusterId : applicationSignUp.getClusterIds()) {
+                            topologyProvider.addTenantSignUp(clusterId, applicationSignUp.getTenantId());
+                        }
+
+                        // Add domain mappings
+                        if (applicationSignUp.getDomainMappings() != null) {
+                            for (DomainMapping domainMapping : applicationSignUp.getDomainMappings()) {
+                                if (domainMapping != null) {
+                                    Cluster cluster = topologyProvider.getClusterByClusterId(domainMapping.getClusterId());
+                                    if (cluster != null) {
+                                        cluster.addHostName(domainMapping.getDomainName());
+                                        log.info(String.format("Domain mapping added: [cluster] %s [domain] %s",
+                                                cluster.getClusterId(), domainMapping.getDomainName()));
+                                    }
                                 }
                             }
                         }
                     }
+                    initialized = true;
+                } catch (Exception e) {
+                    log.error("Could not process complete application signup event", e);
                 }
             }
         });
@@ -88,9 +99,13 @@ public class LoadBalancerCommonApplicationSignUpEventReceiver extends Applicatio
         addEventListener(new ApplicationSignUpAddedEventListener() {
             @Override
             protected void onEvent(Event event) {
-                ApplicationSignUpAddedEvent applicationSignUpAddedEvent = (ApplicationSignUpAddedEvent) event;
-                for (String clusterId : applicationSignUpAddedEvent.getClusterIds()) {
-                    topologyProvider.addTenantSignUp(clusterId, applicationSignUpAddedEvent.getTenantId());
+                try {
+                    ApplicationSignUpAddedEvent applicationSignUpAddedEvent = (ApplicationSignUpAddedEvent) event;
+                    for (String clusterId : applicationSignUpAddedEvent.getClusterIds()) {
+                        topologyProvider.addTenantSignUp(clusterId, applicationSignUpAddedEvent.getTenantId());
+                    }
+                } catch (Exception e) {
+                    log.error("Could not process application signup added event", e);
                 }
             }
         });
@@ -98,14 +113,18 @@ public class LoadBalancerCommonApplicationSignUpEventReceiver extends Applicatio
         addEventListener(new ApplicationSignUpRemovedEventListener() {
             @Override
             protected void onEvent(Event event) {
-                ApplicationSignUpRemovedEvent applicationSignUpRemovedEvent = (ApplicationSignUpRemovedEvent) event;
-                String applicationId = applicationSignUpRemovedEvent.getApplicationId();
+                try {
+                    ApplicationSignUpRemovedEvent applicationSignUpRemovedEvent = (ApplicationSignUpRemovedEvent) event;
+                    String applicationId = applicationSignUpRemovedEvent.getApplicationId();
 
-                Application application = ApplicationManager.getApplications().getApplication(applicationId);
-                if(application != null) {
-                    for(ClusterDataHolder clusterDataHolder : application.getClusterDataMap().values())
-                    topologyProvider.removeTenantSignUp(clusterDataHolder.getClusterId(),
-                            applicationSignUpRemovedEvent.getTenantId());
+                    Application application = ApplicationManager.getApplications().getApplication(applicationId);
+                    if (application != null) {
+                        for (ClusterDataHolder clusterDataHolder : application.getClusterDataMap().values())
+                            topologyProvider.removeTenantSignUp(clusterDataHolder.getClusterId(),
+                                    applicationSignUpRemovedEvent.getTenantId());
+                    }
+                } catch (Exception e) {
+                    log.error("Could not process application signup removed event", e);
                 }
             }
         });

http://git-wip-us.apache.org/repos/asf/stratos/blob/7c4cd8cc/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/event/receivers/LoadBalancerCommonTopologyEventReceiver.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/event/receivers/LoadBalancerCommonTopologyEventReceiver.java b/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/event/receivers/LoadBalancerCommonTopologyEventReceiver.java
index 1a4a4b7..17d02ab 100644
--- a/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/event/receivers/LoadBalancerCommonTopologyEventReceiver.java
+++ b/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/event/receivers/LoadBalancerCommonTopologyEventReceiver.java
@@ -58,24 +58,26 @@ public class LoadBalancerCommonTopologyEventReceiver extends TopologyEventReceiv
 
             @Override
             protected void onEvent(Event event) {
-                if (!initialized) {
-                    try {
-                        TopologyManager.acquireReadLock();
-                        for (Service service : TopologyManager.getTopology().getServices()) {
-                            for (Cluster cluster : service.getClusters()) {
-                                for (Member member : cluster.getMembers()) {
-                                    if (member.getStatus() == MemberStatus.Active) {
-                                        addMember(cluster.getServiceName(), member.getClusterId(), member.getMemberId());
-                                    }
+                if (initialized) {
+                    return;
+                }
+
+                try {
+                    TopologyManager.acquireReadLock();
+                    for (Service service : TopologyManager.getTopology().getServices()) {
+                        for (Cluster cluster : service.getClusters()) {
+                            for (Member member : cluster.getMembers()) {
+                                if (member.getStatus() == MemberStatus.Active) {
+                                    addMember(cluster.getServiceName(), member.getClusterId(), member.getMemberId());
                                 }
                             }
                         }
-                        initialized = true;
-                    } catch (Exception e) {
-                        log.error("Error processing event", e);
-                    } finally {
-                        TopologyManager.releaseReadLock();
                     }
+                    initialized = true;
+                } catch (Exception e) {
+                    log.error("Error processing complete topology event", e);
+                } finally {
+                    TopologyManager.releaseReadLock();
                 }
             }
         });
@@ -367,6 +369,11 @@ public class LoadBalancerCommonTopologyEventReceiver extends TopologyEventReceiv
                 new org.apache.stratos.load.balancer.common.domain.Member(messagingMember.getServiceName(),
                         messagingMember.getClusterId(), messagingMember.getMemberId(),
                         hostName);
+        if(messagingMember.getPorts() != null) {
+            for(Port port : messagingMember.getPorts()) {
+                member.addPort(transformPort(port));
+            }
+        }
         return member;
     }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/7c4cd8cc/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/endpoint/RequestDelegator.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/endpoint/RequestDelegator.java b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/endpoint/RequestDelegator.java
index 80b85d8..636955d 100644
--- a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/endpoint/RequestDelegator.java
+++ b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/endpoint/RequestDelegator.java
@@ -25,6 +25,7 @@ import org.apache.stratos.load.balancer.algorithm.LoadBalanceAlgorithm;
 import org.apache.stratos.load.balancer.common.topology.TopologyProvider;
 import org.apache.stratos.load.balancer.common.domain.Cluster;
 import org.apache.stratos.load.balancer.common.domain.Member;
+import org.apache.stratos.load.balancer.conf.LoadBalancerConfiguration;
 import org.apache.stratos.load.balancer.context.AlgorithmContext;
 import org.apache.stratos.load.balancer.context.ClusterContext;
 import org.apache.stratos.load.balancer.context.LoadBalancerContext;
@@ -40,11 +41,9 @@ public class RequestDelegator {
     private static final Log log = LogFactory.getLog(RequestDelegator.class);
 
     private LoadBalanceAlgorithm algorithm;
-    private TopologyProvider topologyProvider;
 
-    public RequestDelegator(LoadBalanceAlgorithm algorithm, TopologyProvider topologyProvider) {
+    public RequestDelegator(LoadBalanceAlgorithm algorithm) {
         this.algorithm = algorithm;
-        this.topologyProvider = topologyProvider;
     }
 
     /**
@@ -59,6 +58,7 @@ public class RequestDelegator {
 
         long startTime = System.currentTimeMillis();
 
+        TopologyProvider topologyProvider = LoadBalancerConfiguration.getInstance().getTopologyProvider();
         Cluster cluster = topologyProvider.getClusterByHostName(hostName);
         if (cluster != null) {
             if (log.isDebugEnabled()) {
@@ -92,6 +92,7 @@ public class RequestDelegator {
         long startTime = System.currentTimeMillis();
 
         // Find cluster from host name and tenant id
+        TopologyProvider topologyProvider = LoadBalancerConfiguration.getInstance().getTopologyProvider();
         Cluster cluster = topologyProvider.getClusterByHostName(hostName, tenantId);
         if (cluster != null) {
             Member member = findNextMemberInCluster(cluster);
@@ -147,11 +148,13 @@ public class RequestDelegator {
         if (hostName == null)
             return false;
 
+        TopologyProvider topologyProvider = LoadBalancerConfiguration.getInstance().getTopologyProvider();
         boolean valid = topologyProvider.clusterExistsByHostName(hostName);
         return valid;
     }
 
     public Cluster getCluster(String hostName) {
+        TopologyProvider topologyProvider = LoadBalancerConfiguration.getInstance().getTopologyProvider();
         return topologyProvider.getClusterByHostName(hostName);
     }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/7c4cd8cc/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/endpoint/TenantAwareLoadBalanceEndpoint.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/endpoint/TenantAwareLoadBalanceEndpoint.java b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/endpoint/TenantAwareLoadBalanceEndpoint.java
index 9c4a66c..f203f5c 100644
--- a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/endpoint/TenantAwareLoadBalanceEndpoint.java
+++ b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/endpoint/TenantAwareLoadBalanceEndpoint.java
@@ -28,7 +28,6 @@ import org.apache.stratos.load.balancer.algorithm.LoadBalanceAlgorithmFactory;
 import org.apache.stratos.load.balancer.common.domain.Cluster;
 import org.apache.stratos.load.balancer.common.domain.Member;
 import org.apache.stratos.load.balancer.common.domain.Port;
-import org.apache.stratos.load.balancer.common.topology.TopologyProvider;
 import org.apache.stratos.load.balancer.conf.LoadBalancerConfiguration;
 import org.apache.stratos.load.balancer.conf.domain.TenantIdentifier;
 import org.apache.stratos.load.balancer.context.LoadBalancerContext;
@@ -85,8 +84,7 @@ public class TenantAwareLoadBalanceEndpoint extends org.apache.synapse.endpoints
         super.init(synapseEnvironment);
 
         LoadBalanceAlgorithm algorithm = LoadBalanceAlgorithmFactory.createAlgorithm(algorithmClassName);
-        TopologyProvider topologyProvider = LoadBalancerConfiguration.getInstance().getTopologyProvider();
-        requestDelegator = new RequestDelegator(algorithm, topologyProvider);
+        requestDelegator = new RequestDelegator(algorithm);
         synapseEnvironment.getSynapseConfiguration().setProperty(SynapseConstants.PROP_SAL_ENDPOINT_DEFAULT_SESSION_TIMEOUT, String.valueOf(sessionTimeout));
         setDispatcher(new HttpSessionDispatcher());
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/7c4cd8cc/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/components/ApplicationSignUpHandler.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/components/ApplicationSignUpHandler.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/components/ApplicationSignUpHandler.java
index 5e57b6d..84c3c64 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/components/ApplicationSignUpHandler.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/components/ApplicationSignUpHandler.java
@@ -22,15 +22,11 @@ package org.apache.stratos.manager.components;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.common.util.CommonUtil;
+import org.apache.stratos.manager.exception.ApplicationSignUpException;
 import org.apache.stratos.manager.messaging.publisher.ApplicationSignUpEventPublisher;
-import org.apache.stratos.messaging.domain.application.ClusterDataHolder;
+import org.apache.stratos.manager.registry.RegistryManager;
 import org.apache.stratos.messaging.domain.application.signup.ApplicationSignUp;
 import org.apache.stratos.messaging.domain.application.signup.ArtifactRepository;
-import org.apache.stratos.manager.exception.ApplicationSignUpException;
-import org.apache.stratos.manager.registry.RegistryManager;
-import org.apache.stratos.messaging.domain.application.Application;
-import org.apache.stratos.messaging.message.receiver.application.ApplicationManager;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -61,7 +57,13 @@ public class ApplicationSignUpHandler {
 
         String applicationId = applicationSignUp.getApplicationId();
         int tenantId = applicationSignUp.getTenantId();
-        List<String> clusterIds = applicationSignUp.getClusterIds();
+        String[] clusterIdArray = applicationSignUp.getClusterIds();
+        List<String> clusterIdList = new ArrayList<String>();
+        if(clusterIdArray != null) {
+            for (String clusterId : clusterIdArray) {
+                clusterIdList.add(clusterId);
+            }
+        }
 
         try {
             if (log.isInfoEnabled()) {
@@ -78,7 +80,7 @@ public class ApplicationSignUpHandler {
             String resourcePath = prepareApplicationSignupResourcePath(applicationId, tenantId);
             RegistryManager.getInstance().persist(resourcePath, applicationSignUp);
 
-            ApplicationSignUpEventPublisher.publishApplicationSignUpAddedEvent(applicationId, tenantId, clusterIds);
+            ApplicationSignUpEventPublisher.publishApplicationSignUpAddedEvent(applicationId, tenantId, clusterIdList);
 
             if (log.isInfoEnabled()) {
                 log.info(String.format("Application signup added successfully: [application-id] %s [tenant-id] %d",

http://git-wip-us.apache.org/repos/asf/stratos/blob/7c4cd8cc/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/application/signup/ApplicationSignUp.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/application/signup/ApplicationSignUp.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/application/signup/ApplicationSignUp.java
index 6dca54d..7029855 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/application/signup/ApplicationSignUp.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/application/signup/ApplicationSignUp.java
@@ -20,7 +20,6 @@
 package org.apache.stratos.messaging.domain.application.signup;
 
 import java.io.Serializable;
-import java.util.List;
 
 /**
  * Application signup.
@@ -33,7 +32,7 @@ public class ApplicationSignUp implements Serializable {
     private String applicationId;
     private ArtifactRepository[] artifactRepositories;
     private DomainMapping[] domainMappings;
-    private List<String> clusterIds;
+    private String[] clusterIds;
 
     public int getTenantId() {
         return tenantId;
@@ -67,11 +66,11 @@ public class ApplicationSignUp implements Serializable {
         this.domainMappings = domainMappings;
     }
 
-    public void setClusterIds(List<String> clusterIds) {
+    public void setClusterIds(String[] clusterIds) {
         this.clusterIds = clusterIds;
     }
 
-    public List<String> getClusterIds() {
+    public String[] getClusterIds() {
         return clusterIds;
     }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/7c4cd8cc/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/application/signup/ApplicationSignUpAddedMessageProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/application/signup/ApplicationSignUpAddedMessageProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/application/signup/ApplicationSignUpAddedMessageProcessor.java
index 51bf646..b7c99ec 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/application/signup/ApplicationSignUpAddedMessageProcessor.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/application/signup/ApplicationSignUpAddedMessageProcessor.java
@@ -51,6 +51,10 @@ public class ApplicationSignUpAddedMessageProcessor extends MessageProcessor {
                 log.error("Unable to convert the JSON message to ApplicationSignUpAddedEvent");
                 return false;
             }
+            if(event.getClusterIds() == null) {
+                log.error(String.format("Cluster ids not found in application signup added event: " +
+                        "[application] %s [tenant] %d", event.getApplicationId(), event.getTenantId()));
+            }
 
             try {
                 ApplicationSignUpManager.acquireWriteLock();
@@ -58,7 +62,7 @@ public class ApplicationSignUpAddedMessageProcessor extends MessageProcessor {
                 ApplicationSignUp applicationSignUp = new ApplicationSignUp();
                 applicationSignUp.setApplicationId(event.getApplicationId());
                 applicationSignUp.setTenantId(event.getTenantId());
-                applicationSignUp.setClusterIds(event.getClusterIds());
+                applicationSignUp.setClusterIds(event.getClusterIds().toArray(new String[event.getClusterIds().size()]));
 
                 ApplicationSignUpManager.getInstance().addApplicationSignUp(applicationSignUp);
                 if(log.isDebugEnabled()) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/7c4cd8cc/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
index 3ae8ceb..082e429 100644
--- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
+++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
@@ -1696,6 +1696,9 @@ public class StratosApiV41Utils {
             ApplicationSignUp applicationSignUp = ObjectConverter.convertApplicationSignUpBeanToStubApplicationSignUp(applicationSignUpBean);
             applicationSignUp.setApplicationId(applicationId);
             applicationSignUp.setTenantId(tenantId);
+            List<String> clusterIds = findApplicationClusterIds(application);
+            String[] clusterIdsArray = clusterIds.toArray(new String[clusterIds.size()]);
+            applicationSignUp.setClusterIds(clusterIdsArray);
 
             // Encrypt artifact repository passwords
             encryptRepositoryPasswords(applicationSignUp, application.getKey());
@@ -1721,6 +1724,19 @@ public class StratosApiV41Utils {
     }
 
     /**
+     * Find application cluster ids.
+     * @param application
+     * @return
+     */
+    private static List<String> findApplicationClusterIds(Application application) {
+        List<String> clusterIds = new ArrayList<String>();
+        for(ClusterDataHolder clusterDataHolder : application.getClusterDataRecursively()) {
+            clusterIds.add(clusterDataHolder.getClusterId());
+        }
+        return clusterIds;
+    }
+
+    /**
      * Encrypt artifact repository passwords.
      * @param applicationSignUp
      * @param applicationKey