You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by ni...@apache.org on 2013/12/10 15:54:08 UTC

[09/16] git commit: handle lb cluster creation at cartridge deployment

handle lb cluster creation at cartridge deployment


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

Branch: refs/heads/master
Commit: 7808ff37e843181abd789b9859ded28ebf830751
Parents: 2849f91
Author: Nirmal Fernando <ni...@apache.org>
Authored: Tue Dec 10 19:07:31 2013 +0530
Committer: Nirmal Fernando <ni...@apache.org>
Committed: Tue Dec 10 19:16:13 2013 +0530

----------------------------------------------------------------------
 .../apache/stratos/rest/endpoint/Constants.java |  4 ++
 .../definition/CartridgeDefinitionBean.java     |  3 ++
 .../cartridge/definition/LoadBalancerBean.java  |  4 ++
 .../bean/util/converter/PojoConverter.java      |  2 +
 .../rest/endpoint/services/ServiceUtils.java    | 54 +++++++++++++++++---
 .../rest/endpoint/services/StratosAdmin.java    |  3 +-
 6 files changed, 61 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/7808ff37/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/Constants.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/Constants.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/Constants.java
index c3ea68f..033560e 100644
--- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/Constants.java
+++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/Constants.java
@@ -25,4 +25,8 @@ public class Constants {
 
     public static final String SUPER_TENANT_SERVICE = "super.tenant.service";
     public static final String IS_LOAD_BALANCER = "load.balancer";
+    public static final String SERVICE_AWARE_LOAD_BALANCER = "service.aware.load.balancer";
+    public static final String DEFAULT_LOAD_BALANCER = "default.load.balancer";
+    public static final String NO_LOAD_BALANCER = "no.load.balancer";
+    public static final String EXISTING_LOAD_BALANCERS = "existing.load.balancers";
 }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/7808ff37/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/cartridge/definition/CartridgeDefinitionBean.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/cartridge/definition/CartridgeDefinitionBean.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/cartridge/definition/CartridgeDefinitionBean.java
index 318e347..7984b5f 100644
--- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/cartridge/definition/CartridgeDefinitionBean.java
+++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/cartridge/definition/CartridgeDefinitionBean.java
@@ -20,6 +20,7 @@
 package org.apache.stratos.rest.endpoint.bean.cartridge.definition;
 
 import javax.xml.bind.annotation.XmlRootElement;
+
 import java.util.List;
 
 @XmlRootElement(name = "cartridgeDefinitionBean")
@@ -48,6 +49,8 @@ public class CartridgeDefinitionBean {
     public LoadBalancerBean loadBalancer;
 
     public List<PropertyBean> property;
+    
+    public String defaultAutoscalingPolicy;
 
     public String toString () {
 

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/7808ff37/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/cartridge/definition/LoadBalancerBean.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/cartridge/definition/LoadBalancerBean.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/cartridge/definition/LoadBalancerBean.java
index c21c867..8fbddcc 100644
--- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/cartridge/definition/LoadBalancerBean.java
+++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/cartridge/definition/LoadBalancerBean.java
@@ -26,6 +26,10 @@ import java.util.List;
 public class LoadBalancerBean {
 
     public String type;
+    
+    public String deploymentPolicy;
+    
+    public String autoscalingPolicy;
 
     public List<PropertyBean> property;
 

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/7808ff37/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java
index 21e5247..3290981 100644
--- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java
+++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java
@@ -46,6 +46,8 @@ public class PojoConverter {
         cartridgeConfig.setMultiTenant(cartridgeDefinitionBean.multiTenant);
         cartridgeConfig.setDisplayName(cartridgeDefinitionBean.displayName);
         cartridgeConfig.setDescription(cartridgeDefinitionBean.description);
+        cartridgeConfig.setDefaultAutoscalingPolicy(cartridgeDefinitionBean.defaultAutoscalingPolicy);
+        
         //deployment information
         if(cartridgeDefinitionBean.deployment != null) {
             cartridgeConfig.setBaseDir(cartridgeDefinitionBean.deployment.baseDir);

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/7808ff37/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 68469ac..85da05e 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
@@ -40,6 +40,7 @@ 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.rest.endpoint.Constants;
+import org.apache.stratos.rest.endpoint.bean.CartridgeInfoBean;
 import org.apache.stratos.rest.endpoint.bean.autoscaler.partition.Partition;
 import org.apache.stratos.rest.endpoint.bean.autoscaler.partition.PartitionGroup;
 import org.apache.stratos.rest.endpoint.bean.autoscaler.policy.autoscale.AutoscalePolicy;
@@ -54,6 +55,7 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Random;
 import java.util.Set;
 import java.util.regex.Pattern;
 
@@ -61,11 +63,14 @@ public class ServiceUtils {
     private static Log log = LogFactory.getLog(StratosAdmin.class);
     private static CartridgeSubscriptionManager cartridgeSubsciptionManager = new CartridgeSubscriptionManager();
 
-    static void deployCartridge (CartridgeDefinitionBean cartridgeDefinitionBean) throws RestAPIException {
+    static void deployCartridge (CartridgeDefinitionBean cartridgeDefinitionBean, ConfigurationContext ctxt,
+        String userName, String tenantDomain) throws RestAPIException {
 
         log.info("***** " + cartridgeDefinitionBean.toString() + " *****");
 
+        AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient();
         CloudControllerServiceClient cloudControllerServiceClient = getCloudControllerServiceClient();
+        
         if (cloudControllerServiceClient != null) {
 
             CartridgeConfig cartridgeConfig = PojoConverter.populateCartridgeConfigPojo(cartridgeDefinitionBean);
@@ -111,6 +116,9 @@ public class ServiceUtils {
                     return;
                 }
                 
+                // retrieve lb Cartridge info
+                CartridgeInfo cartridgeInfo = cloudControllerServiceClient.getCartridgeInfo(lbConfig.getType());
+                
                 properties = lbConfig.getProperties();
                 
                 for (org.apache.stratos.cloud.controller.pojo.Property prop : 
@@ -136,8 +144,6 @@ public class ServiceUtils {
                         String[] clusterIds = clusterIdsVal.split(",");
 
                         for (String clusterId : clusterIds) {
-                            AutoscalerServiceClient autoscalerServiceClient =
-                                                                              getAutoscalerServiceClient();
                             if (autoscalerServiceClient != null) {
                                 try {
                                     autoscalerServiceClient.checkLBExistence(clusterId);
@@ -147,6 +153,7 @@ public class ServiceUtils {
                                 }
                             }
                         }
+                        return;
 
                     } else if (Constants.DEFAULT_LOAD_BALANCER.equals(prop.getName())) {
                         if ("true".equals(prop.getValue())) {
@@ -154,8 +161,6 @@ public class ServiceUtils {
                                 log.debug("This cartridge uses default load balancer. " +
                                           "[Type] " + cartridgeType);
                             }
-                            AutoscalerServiceClient autoscalerServiceClient =
-                                                                              getAutoscalerServiceClient();
                             if (autoscalerServiceClient != null) {
                                 try {
                                     // get the valid policies of this cartridge
@@ -168,7 +173,10 @@ public class ServiceUtils {
                                             intersection(cartridgeDepPolicies, lbCartridgeDepPolicies);
                                     
                                     for (DeploymentPolicy deploymentPolicy : validDepPolicies) {
-                                        subscribe(cartridgeType, alias, policy, repoURL, privateRepo, repoUsername, repoPassword, dataCartridgeType, dataCartridgeAlias, configurationContext, userName, tenantDomain)
+                                        String alias = "lb"+new Random().nextInt();
+                                        subscribe(cartridgeType, alias, cartridgeInfo.getDefaultAutoscalingPolicy(), 
+                                                  deploymentPolicy.getId(), null, false, null, null, null, null, 
+                                                  ctxt, userName, tenantDomain);
                                     }
                                     
                                 } catch (Exception ex) {
@@ -177,7 +185,37 @@ public class ServiceUtils {
                                 }
                             }
                             return;
-                        }
+                        } else if (Constants.SERVICE_AWARE_LOAD_BALANCER.equals(prop.getName())) {
+                            if ("true".equals(prop.getValue())) {
+                                if (log.isDebugEnabled()) {
+                                    log.debug("This cartridge uses a service aware load balancer. " +
+                                              "[Type] " + cartridgeType);
+                                }
+                                if (autoscalerServiceClient != null) {
+                                    try {
+                                        // get the valid policies of this cartridge
+                                        DeploymentPolicy[] cartridgeDepPolicies = 
+                                                autoscalerServiceClient.getDeploymentPolicies(cartridgeType);
+                                        DeploymentPolicy[] lbCartridgeDepPolicies = 
+                                                autoscalerServiceClient.getDeploymentPolicies(lbConfig.getType());
+                                        // valid deployment policies for this cartridge
+                                        DeploymentPolicy[] validDepPolicies = 
+                                                intersection(cartridgeDepPolicies, lbCartridgeDepPolicies);
+                                        
+                                        for (DeploymentPolicy deploymentPolicy : validDepPolicies) {
+                                            String alias = "lb"+new Random().nextInt();
+                                            subscribe(cartridgeType, alias, cartridgeInfo.getDefaultAutoscalingPolicy(), 
+                                                      deploymentPolicy.getId(), null, false, null, null, null, null, 
+                                                      ctxt, userName, tenantDomain);
+                                        }
+                                        
+                                    } catch (Exception ex) {
+                                        // we don't need to throw the error here.
+                                        log.error(ex.getMessage(), ex);
+                                    }
+                                }
+                                return;
+                            }
                     }
                 }
 
@@ -205,7 +243,7 @@ public class ServiceUtils {
         }
         return commonPolicies.toArray(new DeploymentPolicy[0]);
     }
-
+    
     static void undeployCartridge (String cartridgeType) throws RestAPIException {
 
         CloudControllerServiceClient cloudControllerServiceClient = getCloudControllerServiceClient();

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/7808ff37/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java
index 54e4845..4c87cc7 100644
--- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java
+++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java
@@ -77,7 +77,8 @@ public class StratosAdmin extends AbstractAdmin {
     public void deployCartridgeDefinition (CartridgeDefinitionBean cartridgeDefinitionBean)
             throws RestAPIException {
 
-        ServiceUtils.deployCartridge(cartridgeDefinitionBean);
+        ServiceUtils.deployCartridge(cartridgeDefinitionBean, getConfigContext(), getUsername(),
+                                     getTenantDomain());
     }
 
     @DELETE