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
