lb subscription refactoring contd.
Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/436abf4f Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/436abf4f Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/436abf4f Branch: refs/heads/master Commit: 436abf4f8dfe254eafd9b7222cce502263827ee0 Parents: eaedb07 98edba2 Author: Isuru <[email protected]> Authored: Sat Feb 15 20:59:42 2014 +0530 Committer: Isuru <[email protected]> Committed: Sat Feb 15 20:59:42 2014 +0530 ---------------------------------------------------------------------- .../behaviour/CartridgeMgtBehaviour.java | 46 ++++++++ .../multitenant/lb/MultiTenantLBService.java | 17 ++- .../manager/CartridgeSubscriptionManager.java | 91 ++++++++++++++++ .../subscription/CartridgeSubscription.java | 26 ++--- .../subscription/DataCartridgeSubscription.java | 3 +- .../ServiceDeploymentMultiTenantBehaviour.java | 109 ------------------- .../SubscriptionMultiTenantBehaviour.java | 50 +++++---- .../SubscriptionSingleTenantBehaviour.java | 67 ++++++------ .../tenancy/SubscriptionTenancyBehaviour.java | 20 +++- .../utils/CartridgeSubscriptionUtils.java | 34 +++--- 10 files changed, 251 insertions(+), 212 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/436abf4f/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/multitenant/lb/MultiTenantLBService.java ---------------------------------------------------------------------- diff --cc components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/multitenant/lb/MultiTenantLBService.java index 55f9592,55f9592..3d8caa8 --- 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 @@@ -26,15 -26,15 +26,19 @@@ import org.apache.stratos.cloud.control import org.apache.stratos.manager.deploy.service.Service; import org.apache.stratos.manager.exception.ADCException; import org.apache.stratos.manager.exception.UnregisteredCartridgeException; --import org.apache.stratos.manager.utils.ApplicationManagementUtil; --import org.apache.stratos.manager.utils.CartridgeConstants; ++import org.apache.stratos.manager.lb.category.LoadBalancerCategory; public class MultiTenantLBService extends Service { private static Log log = LogFactory.getLog(MultiTenantLBService.class); -- public MultiTenantLBService(String type, String autoscalingPolicyName, String deploymentPolicyName, int tenantId, CartridgeInfo cartridgeInfo, String tenantRange) { ++ private LoadBalancerCategory loadBalancerCategory; ++ ++ public MultiTenantLBService(String type, String autoscalingPolicyName, String deploymentPolicyName, int tenantId, ++ CartridgeInfo cartridgeInfo, String tenantRange, LoadBalancerCategory loadBalancerCategory) { ++ super(type, autoscalingPolicyName, deploymentPolicyName, tenantId, cartridgeInfo, tenantRange); ++ this.loadBalancerCategory = loadBalancerCategory; } @Override @@@ -43,8 -43,8 +47,9 @@@ super.deploy(properties); //register the service -- ApplicationManagementUtil.registerService(getType(), getClusterId(), CartridgeConstants.DEFAULT_SUBDOMAIN, -- getPayloadData().getCompletePayloadData(), getTenantRange(), getHostName(), getAutoscalingPolicyName(), -- getDeploymentPolicyName(), properties); ++ loadBalancerCategory.register(); ++// ApplicationManagementUtil.registerService(getType(), getClusterId(), CartridgeConstants.DEFAULT_SUBDOMAIN, ++// getPayloadData().getCompletePayloadData(), getTenantRange(), getHostName(), getAutoscalingPolicyName(), ++// getDeploymentPolicyName(), properties); } } http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/436abf4f/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/manager/CartridgeSubscriptionManager.java ---------------------------------------------------------------------- diff --cc components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/manager/CartridgeSubscriptionManager.java index 25f1a77,25f1a77..4e603c5 --- 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 @@@ -26,8 -26,8 +26,10 @@@ import org.apache.stratos.cloud.control 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.dao.Cluster; import org.apache.stratos.manager.dto.SubscriptionInfo; import org.apache.stratos.manager.exception.*; ++import org.apache.stratos.manager.lb.category.*; import org.apache.stratos.manager.repository.Repository; import org.apache.stratos.manager.retriever.DataInsertionAndRetrievalManager; import org.apache.stratos.manager.subscriber.Subscriber; @@@ -42,9 -42,9 +44,11 @@@ import org.apache.stratos.manager.topol import org.apache.stratos.manager.utils.ApplicationManagementUtil; import org.apache.stratos.manager.utils.CartridgeConstants; import org.apache.stratos.manager.utils.RepoPasswordMgtUtil; ++import org.apache.stratos.messaging.util.Constants; import org.wso2.carbon.context.CarbonContext; import java.util.Collection; ++import java.util.Random; /** * Manager class for the purpose of managing CartridgeSubscriptionInfo subscriptions, groupings, etc. @@@ -172,6 -172,6 +176,93 @@@ public class CartridgeSubscriptionManag return cartridgeSubscription; } ++ private CartridgeSubscription subscribeToLB (SubscriptionData subscriptionData, LBDataContext lbDataContext) ++ ++ throws ADCException, InvalidCartridgeAliasException, ++ DuplicateCartridgeAliasException, PolicyException, UnregisteredCartridgeException, RepositoryRequiredException, RepositoryCredentialsRequiredException, ++ RepositoryTransportException, AlreadySubscribedException, InvalidRepositoryException { ++ ++ LoadBalancerCategory loadBalancerCategory = null; ++ ++ if (lbDataContext.getLbCategory().equals(Constants.NO_LOAD_BALANCER)) { ++ // no load balancer subscription required ++ return null; ++ ++ } ++ ++ String lbAlias = "lb" + lbDataContext.getLbCartridgeInfo().getType() + new Random().nextInt(); ++ ++ String lbClusterId = lbAlias + "." + lbDataContext.getLbCartridgeInfo().getType() + ".domain"; ++ ++ // limit the cartridge alias to 30 characters in length ++ if (lbClusterId.length() > 30) { ++ lbClusterId = CartridgeSubscriptionUtils.limitLengthOfString(lbClusterId, 30); ++ } ++ ++ Cluster lbCluster = new Cluster(); ++ lbCluster.setClusterDomain(lbClusterId); ++ // set hostname ++ lbCluster.setHostName(lbAlias + "." + lbDataContext.getLbCartridgeInfo().getHostName()); ++ ++ LBCategoryContext lbCategoryContext = new LBCategoryContext(lbDataContext.getLbCartridgeInfo().getType(), lbCluster, lbDataContext.getAutoscalePolicy(), ++ lbDataContext.getDeploymentPolicy(), lbDataContext.getLbCartridgeInfo(), ); ++ ++ if (lbDataContext.getLbCategory().equals(Constants.EXISTING_LOAD_BALANCERS)) { ++ ++ loadBalancerCategory = new ExistingLoadBalancerCategory(); ++ ++ } else if (lbDataContext.getLbCategory().equals(Constants.DEFAULT_LOAD_BALANCER)) { ++ loadBalancerCategory = new DefaultLoadBalancerCategory(); ++ ++ } else if (lbDataContext.getLbCategory().equals(Constants.SERVICE_AWARE_LOAD_BALANCER)) { ++ loadBalancerCategory = new ServiceLevelLoadBalancerCategory(); ++ } ++ ++ if (loadBalancerCategory == null) { ++ throw new ADCException("The given Load Balancer category " + lbDataContext.getLbCategory() + " not found"); ++ } ++ ++ if(lbDataContext.getLbCartridgeInfo().getMultiTenant()) { ++ throw new ADCException("LB Cartridge must be single tenant"); ++ } ++ ++ // Create the CartridgeSubscription instance ++ CartridgeSubscription cartridgeSubscription = CartridgeSubscriptionFactory.getLBCartridgeSubscriptionInstance(lbDataContext, loadBalancerCategory); ++ ++ // Generate and set the key ++ String subscriptionKey = CartridgeSubscriptionUtils.generateSubscriptionKey(); ++ cartridgeSubscription.setSubscriptionKey(subscriptionKey); ++ ++ // Create repository ++ Repository repository = cartridgeSubscription.manageRepository(null, ++ "", ++ "", ++ false, ++ lbAlias, ++ lbDataContext.getLbCartridgeInfo(), ++ subscriptionData.getTenantDomain()); ++ ++ // Create subscriber ++ Subscriber subscriber = new Subscriber(subscriptionData.getTenantAdminUsername(), subscriptionData.getTenantId(), subscriptionData.getTenantDomain()); ++ ++ // create subscription ++ cartridgeSubscription.createSubscription(subscriber, lbAlias, lbDataContext.getAutoscalePolicy(), ++ lbDataContext.getDeploymentPolicy(), repository); ++ ++ ++ log.info("Tenant [" + subscriptionData.getTenantId() + "] with username [" + subscriptionData.getTenantAdminUsername() + ++ " subscribed to " + "] Cartridge with Alias " + lbAlias + ", Cartridge Type: " + ++ lbCategoryContext.getLbType() + ", Autoscale Policy: " + ++ lbDataContext.getAutoscalePolicy() + ", Deployment Policy: " + lbDataContext.getDeploymentPolicy()); ++ ++ ++ // Publish tenant subscribed event to message broker ++ CartridgeSubscriptionUtils.publishTenantSubscribedEvent(cartridgeSubscription.getSubscriber().getTenantId(), ++ cartridgeSubscription.getCartridgeInfo().getType()); ++ ++ return cartridgeSubscription; ++ } ++ /** * Registers the cartridge subscription for the given CartridgeSubscriptionInfo object * http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/436abf4f/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/utils/CartridgeSubscriptionUtils.java ---------------------------------------------------------------------- diff --cc components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/utils/CartridgeSubscriptionUtils.java index d71e107,ee145f5..30f2b74 --- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/utils/CartridgeSubscriptionUtils.java +++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/subscription/utils/CartridgeSubscriptionUtils.java @@@ -23,24 -22,16 +23,26 @@@ import org.apache.axis2.AxisFault import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.stratos.autoscaler.deployment.policy.DeploymentPolicy; import org.apache.stratos.cloud.controller.pojo.CartridgeInfo; +import org.apache.stratos.cloud.controller.pojo.LoadbalancerConfig; +import org.apache.stratos.cloud.controller.pojo.Properties; +import org.apache.stratos.cloud.controller.pojo.Property; +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.deploy.service.Service; import org.apache.stratos.manager.exception.ADCException; import org.apache.stratos.manager.exception.DuplicateCartridgeAliasException; import org.apache.stratos.manager.exception.InvalidCartridgeAliasException; +import org.apache.stratos.manager.exception.UnregisteredCartridgeException; +import org.apache.stratos.manager.lb.category.LBCategoryContext; +import org.apache.stratos.manager.lb.category.LBDataContext; import org.apache.stratos.manager.payload.BasicPayloadData; + import org.apache.stratos.manager.repository.Repository; import org.apache.stratos.manager.retriever.DataInsertionAndRetrievalManager; - import org.apache.stratos.manager.subscription.CartridgeSubscription; +import org.apache.stratos.manager.subscription.SubscriptionData; + import org.apache.stratos.manager.subscriber.Subscriber; import org.apache.stratos.messaging.broker.publish.EventPublisher; import org.apache.stratos.messaging.event.tenant.TenantSubscribedEvent; import org.apache.stratos.messaging.event.tenant.TenantUnSubscribedEvent;
