You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by sa...@apache.org on 2014/01/04 18:01:36 UTC

[2/3] git commit: Fixing for multitenant subscription to LB cartridge

Fixing for multitenant subscription to LB cartridge


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

Branch: refs/heads/carbon-4.2.0-upgrade
Commit: 1ba43d813d7b3ae7549ceff0ace1f85d2d87bd0e
Parents: 37c56e7
Author: Sajith Kariyawasam <sa...@wso2.com>
Authored: Sat Jan 4 22:24:51 2014 +0530
Committer: Sajith Kariyawasam <sa...@wso2.com>
Committed: Sat Jan 4 22:24:51 2014 +0530

----------------------------------------------------------------------
 .../service/ServiceDeploymentManager.java       | 218 ++++++++++++++++++-
 .../manager/CartridgeSubscriptionManager.java   |   2 +
 .../rest/endpoint/services/ServiceUtils.java    |   4 +-
 .../rest/endpoint/services/StratosAdmin.java    |   2 +-
 4 files changed, 221 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/1ba43d81/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/deploy/service/ServiceDeploymentManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/deploy/service/ServiceDeploymentManager.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/deploy/service/ServiceDeploymentManager.java
index 8a03a14..4bc25d9 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/deploy/service/ServiceDeploymentManager.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/deploy/service/ServiceDeploymentManager.java
@@ -19,26 +19,39 @@
 
 package org.apache.stratos.adc.mgt.deploy.service;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.adc.mgt.client.AutoscalerServiceClient;
 import org.apache.stratos.adc.mgt.client.CloudControllerServiceClient;
 import org.apache.stratos.adc.mgt.deploy.service.multitenant.MultiTenantService;
 import org.apache.stratos.adc.mgt.exception.ADCException;
 import org.apache.stratos.adc.mgt.exception.UnregisteredCartridgeException;
+import org.apache.stratos.adc.mgt.manager.CartridgeSubscriptionManager;
 import org.apache.stratos.adc.mgt.payload.BasicPayloadData;
 import org.apache.stratos.adc.mgt.payload.PayloadData;
 import org.apache.stratos.adc.mgt.payload.PayloadFactory;
+import org.apache.stratos.adc.mgt.subscription.CartridgeSubscription;
 import org.apache.stratos.adc.mgt.subscription.utils.CartridgeSubscriptionUtils;
 import org.apache.stratos.adc.mgt.utils.CartridgeConstants;
 import org.apache.stratos.adc.mgt.utils.PersistenceManager;
+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.messaging.util.Constants;
 
 public class ServiceDeploymentManager {
 
     private static Log log = LogFactory.getLog(ServiceDeploymentManager.class);
-
-    public Service deployService (String type, String autoscalingPolicyName, String deploymentPolicyName, int tenantId, String tenantRange)
+    private CartridgeSubscriptionManager cartridgeSubsciptionManager = new CartridgeSubscriptionManager();
+    
+    public Service deployService (String type, String autoscalingPolicyName, String deploymentPolicyName, int tenantId, String tenantRange,
+    		String tenantDomain, String userName)
         throws ADCException, UnregisteredCartridgeException {
 
         //get deployed Cartridge Definition information
@@ -63,6 +76,174 @@ public class ServiceDeploymentManager {
             throw new ADCException(errorMsg);
         }
 
+        
+        // TODO - LB cartridge.... ??
+
+        List<Property> lbRefProp = new ArrayList<Property>();
+
+        // get lb config reference
+        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);
+            }
+        } else {
+
+            CartridgeInfo lbCartridgeInfo;
+            String lbCartridgeType = lbConfig.getType();
+            try {
+                // retrieve lb Cartridge info
+                lbCartridgeInfo = CloudControllerServiceClient.getServiceClient().getCartridgeInfo(lbCartridgeType);
+            } catch (Exception e) {
+                String msg = "Cannot get cartridge info: " + type;
+                log.error(msg, e);
+                throw new ADCException(msg, e);
+            }
+
+            Properties lbReferenceProperties = lbConfig.getProperties();
+
+            Property property = new Property();
+            property.setName(org.apache.stratos.messaging.util.Constants.LOAD_BALANCER_REF);
+
+            for (org.apache.stratos.cloud.controller.pojo.Property prop : lbReferenceProperties.getProperties()) {
+
+                String name = prop.getName();
+                String value = prop.getValue();
+
+                // TODO make following a chain of responsibility pattern
+                if (Constants.NO_LOAD_BALANCER.equals(name)) {
+                    if ("true".equals(value)) {
+                        if (log.isDebugEnabled()) {
+                            log.debug("This cartridge does not require a load balancer. " +
+                                      "[Type] " + type);
+                        }
+                        property.setValue(name);
+                        lbRefProp.add(property);
+                        break;
+                    }
+                } else if (Constants.EXISTING_LOAD_BALANCERS.equals(name)) {
+                    String clusterIdsVal = value;
+                    if (log.isDebugEnabled()) {
+                        log.debug("This cartridge refers to existing load balancers. " + "[Type] " +
+                                  type + "[Referenced Cluster Ids] " + clusterIdsVal);
+                    }
+
+                    String[] clusterIds = clusterIdsVal.split(",");
+
+                    for (String clusterId : clusterIds) {
+                        
+                            try {
+                            	AutoscalerServiceClient.getServiceClient().checkLBExistenceAgainstPolicy(clusterId,
+                            			deploymentPolicyName);
+                            } catch (Exception ex) {
+                                // we don't need to throw the error here.
+                                log.error(ex.getMessage(), ex);
+                            }
+                        
+                    }
+
+                    property.setValue(name);
+                    lbRefProp.add(property);
+                    break;
+
+                } else if (Constants.DEFAULT_LOAD_BALANCER.equals(name)) {
+                    if ("true".equals(value)) {
+                        property.setValue(name);
+                        if (log.isDebugEnabled()) {
+                            log.debug("This cartridge uses default 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().checkDefaultLBExistenceAgainstPolicy(deploymentPolicyName)) {
+
+                                            // if lb cluster doesn't exist
+                                            String lbAlias = "lb" + new Random().nextInt();
+                                            lbCartridgeInfo.addProperties(property);
+                                            subscribeToLb(lbCartridgeType,
+                                                          lbAlias,
+                                                          lbCartridgeInfo.getDefaultAutoscalingPolicy(),
+                                                          deploymentPolicyName, tenantId,
+                                                          userName,
+                                                          tenantDomain,
+                                                          lbCartridgeInfo.getProperties());
+                                        }
+                                    }
+                                }
+
+                            } catch (Exception ex) {
+                                // 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)) {
+
+                                                // if lb cluster doesn't exist
+                                                String lbAlias =
+                                                                 "lb" + type +
+                                                                         new Random().nextInt();
+                                                lbCartridgeInfo.addProperties(property);
+                                                subscribeToLb(lbCartridgeType,
+                                                              lbAlias,
+                                                              lbCartridgeInfo.getDefaultAutoscalingPolicy(),
+                                                              deploymentPolicyName,
+                                                              tenantId, 
+                                                              userName,
+                                                              tenantDomain,
+                                                              lbCartridgeInfo.getProperties());
+                                            }
+                                        }
+                                    }
+
+                                } 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
@@ -113,4 +294,37 @@ public class ServiceDeploymentManager {
 
         //TODO:
     }
+    
+  private void configureLBDeployment() {
+    	
+    	
+    	
+    }
+    
+    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);
+            }
+        }
 }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/1ba43d81/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/manager/CartridgeSubscriptionManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/manager/CartridgeSubscriptionManager.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/manager/CartridgeSubscriptionManager.java
index 92b5dd4..2a22c82 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/manager/CartridgeSubscriptionManager.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/manager/CartridgeSubscriptionManager.java
@@ -222,6 +222,8 @@ public class CartridgeSubscriptionManager {
         
         if(cartridgeInfo.getMultiTenant()) {
         	log.info(" Multitenant --> Publishing Artifact update event -- ");
+        	log.info(" Values :  cluster id - " + cartridgeSubscription.getClusterDomain() + "  tenant - " + 
+        			cartridgeSubscription.getSubscriber().getTenantId());
             ArtifactUpdatePublisher publisher = new ArtifactUpdatePublisher(cartridgeSubscription.getRepository(),
             		cartridgeSubscription.getClusterDomain(), // clusterId 
             		String.valueOf(cartridgeSubscription.getSubscriber().getTenantId()));

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/1ba43d81/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 acde631..816caad 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
@@ -910,10 +910,10 @@ public class ServiceUtils {
      * 
      */
     static void deployService (String cartridgeType, String alias, String autoscalingPolicy, String deploymentPolicy, 
-    		String tenantDomain, int tenantId, String clusterDomain, String clusterSubdomain, String tenantRange) {
+    		String tenantDomain, String tenantUsername, int tenantId, String clusterDomain, String clusterSubdomain, String tenantRange) {
     	log.info("Deploying service..");
     	try {
-    		serviceDeploymentManager.deployService(cartridgeType, autoscalingPolicy, deploymentPolicy, tenantId, tenantRange);
+    		serviceDeploymentManager.deployService(cartridgeType, autoscalingPolicy, deploymentPolicy, tenantId, tenantRange, tenantDomain, tenantUsername);
 		} catch (Exception e) {
 			e.printStackTrace();
 		}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/1ba43d81/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 bdc7c00..0cc4ca8 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
@@ -684,7 +684,7 @@ public class StratosAdmin extends AbstractAdmin {
     	// super tenant Deploying service (MT) 
     	// here an alias is generated
        ServiceUtils.deployService(serviceDefinitionBean.getCartridgeType(), UUID.randomUUID().toString(), serviceDefinitionBean.getAutoscalingPolicyName(),
-    		   serviceDefinitionBean.getDeploymentPolicyName(), getTenantDomain(), getTenantId(),
+    		   serviceDefinitionBean.getDeploymentPolicyName(), getTenantDomain(), getUsername(), getTenantId(),
     		   serviceDefinitionBean.getClusterDomain(), serviceDefinitionBean.getClusterSubDomain(),
     		   serviceDefinitionBean.getTenantRange());
     }