Updated Branches: refs/heads/master c59170bf3 -> fbe0ebcc4
fixing service level lb subscription issues for MT scenarios Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/f060ee6f Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/f060ee6f Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/f060ee6f Branch: refs/heads/master Commit: f060ee6fe16eff6fadc5abbdcdfc27f7c9074f15 Parents: db67a55 Author: Isuru <[email protected]> Authored: Thu Jan 23 18:09:03 2014 +0530 Committer: Isuru <[email protected]> Committed: Thu Jan 23 18:09:03 2014 +0530 ---------------------------------------------------------------------- .../stratos/manager/deploy/service/Service.java | 3 +- .../service/ServiceDeploymentManager.java | 226 ++++++++----------- .../service/multitenant/MultiTenantService.java | 7 +- .../multitenant/lb/MultiTenantLBService.java | 7 +- .../tenancy/SubscriptionTenancyBehaviour.java | 2 +- .../rest/endpoint/services/ServiceUtils.java | 2 +- 6 files changed, 111 insertions(+), 136 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/f060ee6f/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/Service.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/Service.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/Service.java index 6aa540c..2db19ea 100644 --- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/Service.java +++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/Service.java @@ -22,6 +22,7 @@ package org.apache.stratos.manager.deploy.service; 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.Properties; import org.apache.stratos.cloud.controller.pojo.Property; import org.apache.stratos.manager.client.CloudControllerServiceClient; import org.apache.stratos.manager.exception.ADCException; @@ -61,7 +62,7 @@ public abstract class Service implements Serializable { this.subscriptionKey = CartridgeSubscriptionUtils.generateSubscriptionKey(); } - public void deploy () throws ADCException, UnregisteredCartridgeException { + public void deploy (Properties properties) throws ADCException, UnregisteredCartridgeException { //generate the cluster ID (domain)for the service setClusterId(type + "." + cartridgeInfo.getHostName() + ".domain"); http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/f060ee6f/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/ServiceDeploymentManager.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/ServiceDeploymentManager.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/ServiceDeploymentManager.java index 712aa5b..534e4c3 100644 --- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/ServiceDeploymentManager.java +++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/ServiceDeploymentManager.java @@ -100,6 +100,7 @@ public class ServiceDeploymentManager { LoadbalancerConfig lbConfig = cartridgeInfo.getLbConfig(); if (lbConfig == null || lbConfig.getProperties() == null) { + if (log.isDebugEnabled()) { log.debug("This Service does not require a load balancer. " + "[Service Name] " + type); @@ -150,7 +151,7 @@ public class ServiceDeploymentManager { String[] clusterIds = clusterIdsVal.split(","); for (String clusterId : clusterIds) { - + try { AutoscalerServiceClient.getServiceClient().checkLBExistenceAgainstPolicy(clusterId, deploymentPolicyName); @@ -158,7 +159,7 @@ public class ServiceDeploymentManager { // we don't need to throw the error here. log.error(ex.getMessage(), ex); } - + } property.setValue(name); @@ -172,7 +173,7 @@ public class ServiceDeploymentManager { log.debug("This cartridge uses default load balancer. " + "[Type] " + type); } - + try { // get the valid policies for lb cartridge DeploymentPolicy[] lbCartridgeDepPolicies = @@ -185,20 +186,26 @@ public class ServiceDeploymentManager { if (!AutoscalerServiceClient.getServiceClient().checkDefaultLBExistenceAgainstPolicy(deploymentPolicyName)) { // if lb cluster doesn't exist - lbCartridgeInfo.addProperties(property); - /*subscribeToLb(lbCartridgeType, - lbAlias, - lbCartridgeInfo.getDefaultAutoscalingPolicy(), - deploymentPolicyName, tenantId, - userName, - tenantDomain, - lbCartridgeInfo.getProperties());*/ lbService = new MultiTenantLBService(lbCartridgeType, lbCartridgeInfo.getDefaultAutoscalingPolicy(), deploymentPolicyName, tenantId, lbCartridgeInfo, tenantRange); - lbService.deploy(); + + Properties lbDeploymentProperties = new Properties(); + + // check if there are properties in LB cartridge info + Property [] cartridgeInfoProps = lbCartridgeInfo.getProperties(); + if (cartridgeInfoProps != null && cartridgeInfoProps.length > 0) { + lbDeploymentProperties.setProperties(combine(lbCartridgeInfo.getProperties(), new Property[]{property})); + } else { + lbDeploymentProperties.setProperties(new Property[]{property}); + } + + lbService.deploy(lbDeploymentProperties); + + // persist + persist(lbService); } } } @@ -207,110 +214,94 @@ public class ServiceDeploymentManager { // we don't need to throw the error here. log.error(ex.getMessage(), ex); } - + lbRefProp.add(property); break; - } else if (Constants.SERVICE_AWARE_LOAD_BALANCER.equals(name)) { - if ("true".equals(value)) { - property.setValue(name); - if (log.isDebugEnabled()) { - log.debug("This cartridge uses a service aware load balancer. " + - "[Type] " + type); - } - - try { - - // get the valid policies for lb cartridge - DeploymentPolicy[] lbCartridgeDepPolicies = - AutoscalerServiceClient.getServiceClient().getDeploymentPolicies(lbCartridgeType); - // traverse deployment policies of lb cartridge - for (DeploymentPolicy policy : lbCartridgeDepPolicies) { - // check existence of the subscribed policy - if (deploymentPolicyName.equals(policy.getId())) { - - if (!AutoscalerServiceClient.getServiceClient().checkServiceLBExistenceAgainstPolicy(type, - deploymentPolicyName)) { - - lbCartridgeInfo.addProperties(property); - /*subscribeToLb(lbCartridgeType, - lbAlias, - lbCartridgeInfo.getDefaultAutoscalingPolicy(), - deploymentPolicyName, - tenantId, - userName, - tenantDomain, - lbCartridgeInfo.getProperties());*/ - lbService = new MultiTenantLBService(lbCartridgeType, - lbCartridgeInfo.getDefaultAutoscalingPolicy(), - deploymentPolicyName, tenantId, - lbCartridgeInfo, - tenantRange); - lbService.deploy(); - } + } + } else if (Constants.SERVICE_AWARE_LOAD_BALANCER.equals(name)) { + if ("true".equals(value)) { + property.setValue(name); + if (log.isDebugEnabled()) { + log.debug("This cartridge uses a service aware load balancer. " + + "[Type] " + type); + } + + // add a property for the service type + Property loadBalancedServiceTypeProperty = new Property(); + loadBalancedServiceTypeProperty.setName(Constants.LOAD_BALANCED_SERVICE_TYPE); + loadBalancedServiceTypeProperty.setValue(type); + + try { + + // get the valid policies for lb cartridge + DeploymentPolicy[] lbCartridgeDepPolicies = + AutoscalerServiceClient.getServiceClient().getDeploymentPolicies(lbCartridgeType); + // traverse deployment policies of lb cartridge + for (DeploymentPolicy policy : lbCartridgeDepPolicies) { + + // check existence of the subscribed policy + if (deploymentPolicyName.equals(policy.getId())) { + + if (!AutoscalerServiceClient.getServiceClient().checkServiceLBExistenceAgainstPolicy(type, + deploymentPolicyName)) { + + lbCartridgeInfo.addProperties(property); + lbCartridgeInfo.addProperties(loadBalancedServiceTypeProperty); + + lbService = new MultiTenantLBService(lbCartridgeType, + lbCartridgeInfo.getDefaultAutoscalingPolicy(), + deploymentPolicyName, tenantId, + lbCartridgeInfo, + tenantRange); + + Properties lbDeploymentProperties = new Properties(); + + // check if there are properties in LB cartridge info + Property [] cartridgeInfoProps = lbCartridgeInfo.getProperties(); + if (cartridgeInfoProps != null && cartridgeInfoProps.length > 0) { + lbDeploymentProperties.setProperties(combine(lbCartridgeInfo.getProperties(), new Property[]{property, loadBalancedServiceTypeProperty})); + } else { + lbDeploymentProperties.setProperties(new Property[]{property, loadBalancedServiceTypeProperty}); } - } - } catch (Exception ex) { - // we don't need to throw the error here. - log.error(ex.getMessage(), ex); + lbService.deploy(lbDeploymentProperties); + + // persist + persist(lbService); + } } - + } - lbRefProp.add(property); - break; + } catch (Exception ex) { + // we don't need to throw the error here. + log.error(ex.getMessage(), ex); } + + + lbRefProp.add(property); + break; } } } } - - - Service service = new MultiTenantService(type, autoscalingPolicyName, deploymentPolicyName, tenantId, cartridgeInfo, tenantRange); - /*//generate the cluster ID (domain)for the service - service.setClusterId(type + "." + cartridgeInfo.getHostName() + ".domain"); - //host name is the hostname defined in cartridge definition - service.setHostName(cartridgeInfo.getHostName()); - - //Create payload - BasicPayloadData basicPayloadData = CartridgeSubscriptionUtils.createBasicPayload(service); - //populate - basicPayloadData.populatePayload(); - 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()); - } - } - } + //deploy the service + Properties serviceDeploymentProperties = new Properties(); + serviceDeploymentProperties.setProperties(lbRefProp.toArray(new Property[0])); + service.deploy(serviceDeploymentProperties); - //set PayloadData instance - service.setPayloadData(payloadData);*/ + // persist + persist(service); - //deploy the service - service.deploy(); + return service; + } - //persist Service - /*try { - PersistenceManager.persistService(service); - } catch (Exception e) { - String message = "Error getting info for " + type; - log.error(message, e); - throw new ADCException(message, e); - }*/ + private void persist (Service service) throws ADCException { + + DataInsertionAndRetrievalManager dataInsertionAndRetrievalManager = new DataInsertionAndRetrievalManager(); try { dataInsertionAndRetrievalManager.persistService(service); @@ -320,8 +311,6 @@ public class ServiceDeploymentManager { log.error(errorMsg, e); throw new ADCException(errorMsg, e); } - - return service; } public void undeployService (String type) throws ADCException { @@ -371,31 +360,14 @@ public class ServiceDeploymentManager { throw new ADCException(errorMsg, e); } } - - /*private void subscribeToLb(String cartridgeType, String lbAlias, - String defaultAutoscalingPolicy, String deploymentPolicy, - int tenantId, String userName, String tenantDomain, Property[] props) throws ADCException { - - try { - if(log.isDebugEnabled()) { - log.debug("Subscribing to a load balancer [cartridge] "+cartridgeType+" [alias] "+lbAlias); - } - CartridgeSubscription cartridgeSubscription = - cartridgeSubsciptionManager.subscribeToCartridgeWithProperties(cartridgeType, lbAlias.trim(), defaultAutoscalingPolicy, - deploymentPolicy, - tenantDomain, - tenantId, - userName, "git", null, false, null, null, props); - - cartridgeSubsciptionManager.registerCartridgeSubscription(cartridgeSubscription); - - if(log.isDebugEnabled()) { - log.debug("Successfully subscribed to a load balancer [cartridge] "+cartridgeType+" [alias] "+lbAlias); - } - } catch (Exception e) { - String msg = "Error while subscribing to load balancer cartridge [type] "+cartridgeType; - log.error(msg, e); - throw new ADCException(msg, e); - } - }*/ + + private static Property[] combine (Property[] propertyArray1, Property[] propertyArray2) { + + int length = propertyArray1.length + propertyArray2.length; + Property[] combinedProperties = new Property[length]; + System.arraycopy(propertyArray1, 0, combinedProperties, 0, propertyArray1.length); + System.arraycopy(propertyArray2, 0, combinedProperties, propertyArray1.length, propertyArray2.length); + + return combinedProperties; + } } http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/f060ee6f/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/multitenant/MultiTenantService.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/multitenant/MultiTenantService.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/multitenant/MultiTenantService.java index 8dee8b6..2b4fce3 100644 --- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/multitenant/MultiTenantService.java +++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/multitenant/MultiTenantService.java @@ -21,6 +21,7 @@ package org.apache.stratos.manager.deploy.service.multitenant; 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.deploy.service.Service; import org.apache.stratos.manager.exception.ADCException; import org.apache.stratos.manager.exception.UnregisteredCartridgeException; @@ -38,13 +39,13 @@ public class MultiTenantService extends Service { } @Override - public void deploy() throws ADCException, UnregisteredCartridgeException { + public void deploy(Properties properties) throws ADCException, UnregisteredCartridgeException { - super.deploy(); + super.deploy(properties); //register the service ApplicationManagementUtil.registerService(getType(), getClusterId(), CartridgeConstants.DEFAULT_SUBDOMAIN, getPayloadData().getCompletePayloadData(), getTenantRange(), getHostName(), getAutoscalingPolicyName(), - getDeploymentPolicyName(), null); + getDeploymentPolicyName(), properties); } } http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/f060ee6f/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/multitenant/lb/MultiTenantLBService.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/multitenant/lb/MultiTenantLBService.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/multitenant/lb/MultiTenantLBService.java index 07bb6f1..55f9592 100644 --- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/multitenant/lb/MultiTenantLBService.java +++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/multitenant/lb/MultiTenantLBService.java @@ -22,6 +22,7 @@ package org.apache.stratos.manager.deploy.service.multitenant.lb; 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.Properties; import org.apache.stratos.manager.deploy.service.Service; import org.apache.stratos.manager.exception.ADCException; import org.apache.stratos.manager.exception.UnregisteredCartridgeException; @@ -37,13 +38,13 @@ public class MultiTenantLBService extends Service { } @Override - public void deploy() throws ADCException, UnregisteredCartridgeException { + public void deploy(Properties properties) throws ADCException, UnregisteredCartridgeException { - super.deploy(); + super.deploy(properties); //register the service ApplicationManagementUtil.registerService(getType(), getClusterId(), CartridgeConstants.DEFAULT_SUBDOMAIN, getPayloadData().getCompletePayloadData(), getTenantRange(), getHostName(), getAutoscalingPolicyName(), - getDeploymentPolicyName(), null); + getDeploymentPolicyName(), properties); } } http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/f060ee6f/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/tenancy/SubscriptionTenancyBehaviour.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/tenancy/SubscriptionTenancyBehaviour.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/tenancy/SubscriptionTenancyBehaviour.java index 774dd22..7bb4b0a 100644 --- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/tenancy/SubscriptionTenancyBehaviour.java +++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/tenancy/SubscriptionTenancyBehaviour.java @@ -30,7 +30,7 @@ import java.io.Serializable; public abstract class SubscriptionTenancyBehaviour implements Serializable { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 6529685098267757690L; public abstract void createSubscription(CartridgeSubscription cartridgeSubscription) throws ADCException, AlreadySubscribedException; http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/f060ee6f/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java index ca1e164..e439e88 100644 --- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java +++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java @@ -52,7 +52,7 @@ import java.util.*; import java.util.regex.Pattern; public class ServiceUtils { - private static Log log = LogFactory.getLog(StratosAdmin.class); + private static Log log = LogFactory.getLog(ServiceUtils.class); private static CartridgeSubscriptionManager cartridgeSubsciptionManager = new CartridgeSubscriptionManager(); private static ServiceDeploymentManager serviceDeploymentManager = new ServiceDeploymentManager();
