Repository: incubator-stratos
Updated Branches:
  refs/heads/master 52d9b232c -> 28df667d1


Service aware LB changes in SM and puppet


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

Branch: refs/heads/master
Commit: 9c794ca27e87d42c61fc84dde9c5ac5b9965836e
Parents: e89b1a6
Author: Isuru <[email protected]>
Authored: Wed Apr 9 16:58:21 2014 +0530
Committer: Isuru <[email protected]>
Committed: Wed Apr 9 16:58:21 2014 +0530

----------------------------------------------------------------------
 .../category/DefaultLoadBalancerCategory.java   |  4 +-
 .../ServiceLevelLoadBalancerCategory.java       | 81 ++++++++++++++++++--
 .../lb/templates/conf/loadbalancer.conf.erb     |  3 +
 3 files changed, 81 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/9c794ca2/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lb/category/DefaultLoadBalancerCategory.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lb/category/DefaultLoadBalancerCategory.java
 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lb/category/DefaultLoadBalancerCategory.java
index 7952de0..e49dbde 100644
--- 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lb/category/DefaultLoadBalancerCategory.java
+++ 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lb/category/DefaultLoadBalancerCategory.java
@@ -60,7 +60,7 @@ public class DefaultLoadBalancerCategory extends 
LoadBalancerCategory {
             //set the cluster id to Cluster object
                cluster.setClusterDomain(clusterId);
             if (log.isDebugEnabled()) {
-                log.debug("Set existing default LB cluster id " + clusterId + 
" to the LB Subscription with alias: " + alias);
+                log.debug("Set existing default LB cluster id " + clusterId);
             }
             defaultLBExists = true;
 
@@ -77,7 +77,7 @@ public class DefaultLoadBalancerCategory extends 
LoadBalancerCategory {
             if (clusterContext != null) {
                 cluster.setHostName(clusterContext.getHostName());
                 if (log.isDebugEnabled()) {
-                    log.debug("Set existing default LB hostname " + 
clusterContext.getHostName() + " to the LB Subscription with alias: " + alias);
+                    log.debug("Set existing default LB hostname " + 
clusterContext.getHostName());
                 }
             }
          

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/9c794ca2/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lb/category/ServiceLevelLoadBalancerCategory.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lb/category/ServiceLevelLoadBalancerCategory.java
 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lb/category/ServiceLevelLoadBalancerCategory.java
index e1f888d..f9563af 100644
--- 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lb/category/ServiceLevelLoadBalancerCategory.java
+++ 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lb/category/ServiceLevelLoadBalancerCategory.java
@@ -19,27 +19,98 @@
 
 package org.apache.stratos.manager.lb.category;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.cloud.controller.stub.pojo.CartridgeInfo;
+import org.apache.stratos.cloud.controller.stub.pojo.ClusterContext;
+import org.apache.stratos.cloud.controller.stub.pojo.Properties;
+import org.apache.stratos.manager.client.AutoscalerServiceClient;
+import org.apache.stratos.manager.client.CloudControllerServiceClient;
 import org.apache.stratos.manager.dao.Cluster;
 import org.apache.stratos.manager.exception.ADCException;
 import org.apache.stratos.manager.exception.AlreadySubscribedException;
+import org.apache.stratos.manager.exception.UnregisteredCartridgeException;
 import org.apache.stratos.manager.payload.PayloadData;
 import org.apache.stratos.manager.repository.Repository;
 import org.apache.stratos.manager.subscriber.Subscriber;
 import org.apache.stratos.manager.utils.CartridgeConstants;
 
+import java.rmi.RemoteException;
 import java.util.Map;
 
 public class ServiceLevelLoadBalancerCategory extends LoadBalancerCategory {
 
+    private static Log log = 
LogFactory.getLog(ServiceLevelLoadBalancerCategory.class);
+
+    private boolean serviceLbExists;
+
     public PayloadData create (String alias, Cluster cluster, Subscriber 
subscriber, Repository repository, CartridgeInfo cartridgeInfo,
                                String subscriptionKey, Map<String, String> 
customPayloadEntries) throws ADCException, AlreadySubscribedException {
 
+        // call the relevant method to get the cluster id, using deployment 
policy and type
+        String clusterId = null;
+
+        try {
+            clusterId = 
AutoscalerServiceClient.getServiceClient().getServiceLBClusterId(cartridgeInfo.getType(),
 getDeploymentPolicyName());
+
+        } catch (Exception e) {
+            log.error("Error occurred in retrieving Service LB cluster id" + 
e.getMessage());
+            throw new ADCException(e);
+        }
+
+        if (clusterId != null) {
+            //set the cluster id to Cluster object
+            cluster.setClusterDomain(clusterId);
+            if (log.isDebugEnabled()) {
+                log.debug("Set existing Service LB cluster id " + clusterId);
+            }
+            serviceLbExists = true;
+
+            //get the hostname for this cluster and set it
+            ClusterContext clusterContext;
+            try {
+                clusterContext = 
CloudControllerServiceClient.getServiceClient().getClusterContext(clusterId);
+
+            } catch (RemoteException e) {
+                log.error("Error occurred in retrieving Cluster Context for 
Service LB ", e);
+                throw new ADCException(e);
+            }
+
+            if (clusterContext != null) {
+                cluster.setHostName(clusterContext.getHostName());
+                if (log.isDebugEnabled()) {
+                    log.debug("Set existing Service LB hostname " + 
clusterContext.getHostName());
+                }
+            }
+
+            return null;
+
+        } else {
+            // set cluster domain
+            cluster.setClusterDomain(generateClusterId(alias, 
cartridgeInfo.getType()));
+            // set hostname
+            cluster.setHostName(generateHostName(alias, 
cartridgeInfo.getHostName()));
+
+            PayloadData serviceLevelLbPayloadData = 
createPayload(cartridgeInfo, subscriptionKey, subscriber, cluster,
+                    repository, alias, customPayloadEntries);
+
+            // add payload entry for load balanced service type
+            
serviceLevelLbPayloadData.add(CartridgeConstants.LOAD_BALANCED_SERVICE_TYPE, 
getLoadBalancedServiceType());
+            return serviceLevelLbPayloadData;
+        }
+    }
+
+    public void register(CartridgeInfo cartridgeInfo, Cluster cluster, 
PayloadData payloadData, String autoscalePolicyName, String 
deploymentPolicyName, Properties properties) throws ADCException, 
UnregisteredCartridgeException {
+
+        if (!serviceLbExists) {
+
+            if(payloadData != null) {
+                log.info("Payload: " + 
payloadData.getCompletePayloadData().toString());
+            }
 
-        // add payload entry for load balanced service type
-        PayloadData serviceLevelLbPayloadData = super.create(alias, cluster, 
subscriber, repository, cartridgeInfo, subscriptionKey,
-                customPayloadEntries);
-        
serviceLevelLbPayloadData.add(CartridgeConstants.LOAD_BALANCED_SERVICE_TYPE, 
getLoadBalancedServiceType());
-        return serviceLevelLbPayloadData;
+            super.register(cartridgeInfo, cluster, payloadData, 
autoscalePolicyName, deploymentPolicyName, properties);
+        }else {
+            log.info("Service LB already exists for cartridge type: " + 
cartridgeInfo.getType() + ", deployment policy: " + getDeploymentPolicyName());
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/9c794ca2/tools/puppet3/modules/lb/templates/conf/loadbalancer.conf.erb
----------------------------------------------------------------------
diff --git a/tools/puppet3/modules/lb/templates/conf/loadbalancer.conf.erb 
b/tools/puppet3/modules/lb/templates/conf/loadbalancer.conf.erb
index 867a490..64413de 100755
--- a/tools/puppet3/modules/lb/templates/conf/loadbalancer.conf.erb
+++ b/tools/puppet3/modules/lb/templates/conf/loadbalancer.conf.erb
@@ -50,6 +50,9 @@ loadbalancer {
     # topology_event_listener_enabled is set to true. This functionality could 
be used for hosting
     # dedicated load balancers for services.
     # topology-service-filter: service-name=service-name1,service-name2;
+    <% if @stratos_lb_category == 'service.aware.load.balancer' %>
+      topology-service-filter: 
service-name=<%=@stratos_load_balanced_service_type%>;
+    <% end %>
 
     # Topology cluster filter
     # Provide cluster ids in a comma separated list to filter incoming 
topology events if

Reply via email to