lb instances would spawn at subscription time, instead of cartridge deployment 
time.


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

Branch: refs/heads/master
Commit: 0e1e047769982c6b25b0efec91bd172770999509
Parents: f96f781
Author: Nirmal Fernando <[email protected]>
Authored: Wed Dec 11 13:41:01 2013 +0530
Committer: Nirmal Fernando <[email protected]>
Committed: Wed Dec 11 13:54:10 2013 +0530

----------------------------------------------------------------------
 .../rest/endpoint/services/ServiceUtils.java    | 322 +++++++++++--------
 1 file changed, 186 insertions(+), 136 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/0e1e0477/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 8ecb79e..60446f8 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
@@ -79,141 +79,6 @@ public class ServiceUtils {
                 // call CC
                 
cloudControllerServiceClient.deployCartridgeDefinition(cartridgeConfig);
                 
-                // analyze properties and pick up, if not a LB.
-                Properties properties = cartridgeConfig.getProperties();
-                String cartridgeType = cartridgeConfig.getType();
-                if (properties != null && properties.getProperties() != null) {
-                    for (org.apache.stratos.cloud.controller.pojo.Property 
prop : 
-                        properties.getProperties()) {
-
-                        if (Constants.IS_LOAD_BALANCER.equals(prop.getName())) 
{
-                            if ("true".equals(prop.getValue())) {
-                                if (log.isDebugEnabled()) {
-                                    log.debug("This is a load balancer 
Cartridge definition. " +
-                                            "[Type] " + cartridgeType);
-                                }
-                                return;
-                            }
-                        } 
-
-                    }
-                }
-                
-                // if not an LB Cartridge
-                LoadbalancerConfig lbConfig = cartridgeConfig.getLbConfig();
-                
-                if(lbConfig == null || lbConfig.getProperties() == null) {
-                    if (log.isDebugEnabled()) {
-                        log.debug("This cartridge does not require a load 
balancer. " +
-                                "[Type] " + cartridgeType);
-                    }
-                    return;
-                }
-                
-                // retrieve lb Cartridge info
-                CartridgeInfo cartridgeInfo = 
cloudControllerServiceClient.getCartridgeInfo(lbConfig.getType());
-                
-                properties = lbConfig.getProperties();
-                
-                for (org.apache.stratos.cloud.controller.pojo.Property prop : 
-                        properties.getProperties()) {
-                    
-                    // TODO make following a chain of responsibility pattern
-                    if (Constants.NO_LOAD_BALANCER.equals(prop.getName())) {
-                        if ("true".equals(prop.getValue())) {
-                            if (log.isDebugEnabled()) {
-                                log.debug("This cartridge does not require a 
load balancer. " +
-                                          "[Type] " + cartridgeType);
-                            }
-                            return;
-                        }
-                    } else if 
(Constants.EXISTING_LOAD_BALANCERS.equals(prop.getName())) {
-                        String clusterIdsVal = prop.getValue();
-                        if (log.isDebugEnabled()) {
-                            log.debug("This cartridge refers to existing load 
balancers. " +
-                                      "[Type] " + cartridgeType +
-                                      "[Referenced Cluster Ids] " + 
clusterIdsVal);
-                        }
-
-                        String[] clusterIds = clusterIdsVal.split(",");
-
-                        for (String clusterId : clusterIds) {
-                            if (autoscalerServiceClient != null) {
-                                try {
-                                    
autoscalerServiceClient.checkLBExistence(clusterId);
-                                } catch (Exception ex) {
-                                    // we don't need to throw the error here.
-                                    log.error(ex.getMessage(), ex);
-                                }
-                            }
-                        }
-                        return;
-
-                    } else if 
(Constants.DEFAULT_LOAD_BALANCER.equals(prop.getName())) {
-                        if ("true".equals(prop.getValue())) {
-                            if (log.isDebugEnabled()) {
-                                log.debug("This cartridge uses default 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;
-                        } 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"+cartridgeType+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;
-                            }
-                        }
-                    }
-                }
-
             } catch (Exception e) {
                 throw new RestAPIException(e);
             }
@@ -743,6 +608,172 @@ public class ServiceUtils {
             AlreadySubscribedException, 
RepositoryCredentialsRequiredException, InvalidRepositoryException,
             RepositoryTransportException {
 
+        AutoscalerServiceClient autoscalerServiceClient = 
getAutoscalerServiceClient();
+        CloudControllerServiceClient cloudControllerServiceClient = 
getCloudControllerServiceClient();
+        CartridgeInfo cartridgeConfig;
+        
+        try {
+            cartridgeConfig = 
cloudControllerServiceClient.getCartridgeInfo(cartridgeType);
+        } catch (Exception e) {
+            String msg = "Cannot get cartridge info: " + cartridgeType;
+            log.error(msg, e);
+            throw new ADCException(msg, e);
+        }
+        
+        boolean isLb = false;
+        
+        // analyze properties and pick up, if not a LB.
+        org.apache.stratos.cloud.controller.pojo.Property[] properties = 
cartridgeConfig.getProperties();
+        if (properties != null ) {
+            for (org.apache.stratos.cloud.controller.pojo.Property prop : 
+                properties) {
+
+                if (Constants.IS_LOAD_BALANCER.equals(prop.getName())) {
+                    if ("true".equals(prop.getValue())) {
+                        isLb = true;
+                        if (log.isDebugEnabled()) {
+                            log.debug("This is a load balancer Cartridge 
definition. " +
+                                    "[Type] " + cartridgeType);
+                        }
+                    }
+                } 
+
+            }
+        }
+        
+        if (!isLb) {
+            // if not an LB Cartridge
+            LoadbalancerConfig lbConfig = cartridgeConfig.getLbConfig();
+
+            if (lbConfig == null || lbConfig.getProperties() == null) {
+                if (log.isDebugEnabled()) {
+                    log.debug("This cartridge does not require a load 
balancer. " + "[Type] " +
+                              cartridgeType);
+                }
+            } else {
+
+                CartridgeInfo lbCartridgeInfo;
+                try {
+                    // retrieve lb Cartridge info
+                    lbCartridgeInfo = 
cloudControllerServiceClient.getCartridgeInfo(lbConfig.getType());
+                } catch (Exception e) {
+                    String msg = "Cannot get cartridge info: " + cartridgeType;
+                    log.error(msg, e);
+                    throw new ADCException(msg, e);
+                }
+
+                Properties lbProperties = lbConfig.getProperties();
+
+                for (org.apache.stratos.cloud.controller.pojo.Property prop : 
lbProperties.getProperties()) {
+
+                    // TODO make following a chain of responsibility pattern
+                    if (Constants.NO_LOAD_BALANCER.equals(prop.getName())) {
+                        if ("true".equals(prop.getValue())) {
+                            if (log.isDebugEnabled()) {
+                                log.debug("This cartridge does not require a 
load balancer. " +
+                                          "[Type] " + cartridgeType);
+                            }
+                            break;
+                        }
+                    } else if 
(Constants.EXISTING_LOAD_BALANCERS.equals(prop.getName())) {
+                        String clusterIdsVal = prop.getValue();
+                        if (log.isDebugEnabled()) {
+                            log.debug("This cartridge refers to existing load 
balancers. " +
+                                      "[Type] " + cartridgeType + "[Referenced 
Cluster Ids] " +
+                                      clusterIdsVal);
+                        }
+
+                        String[] clusterIds = clusterIdsVal.split(",");
+
+                        for (String clusterId : clusterIds) {
+                            if (autoscalerServiceClient != null) {
+                                try {
+                                    
autoscalerServiceClient.checkLBExistenceAgainstPolicy(clusterId, 
deploymentPolicy);
+                                } catch (Exception ex) {
+                                    // we don't need to throw the error here.
+                                    log.error(ex.getMessage(), ex);
+                                }
+                            }
+                        }
+                        break;
+
+                    } else if 
(Constants.DEFAULT_LOAD_BALANCER.equals(prop.getName())) {
+                        if ("true".equals(prop.getValue())) {
+                            if (log.isDebugEnabled()) {
+                                log.debug("This cartridge uses default load 
balancer. " +
+                                          "[Type] " + cartridgeType);
+                            }
+                            if (autoscalerServiceClient != null) {
+                                try {
+                                    // get the valid policies for lb cartridge
+                                    DeploymentPolicy[] lbCartridgeDepPolicies =
+                                                                               
 autoscalerServiceClient.getDeploymentPolicies(lbConfig.getType());
+                                    // traverse deployment policies of lb 
cartridge
+                                    for (DeploymentPolicy policy : 
lbCartridgeDepPolicies) {
+                                        // check existence of the subscribed 
policy
+                                        if 
(deploymentPolicy.equals(policy.getId())) {
+
+                                            if 
(!autoscalerServiceClient.checkDefaultLBExistenceAgainstPolicy(deploymentPolicy))
 {
+
+                                                // if lb cluster doesn't exist
+                                                String lbAlias = "lb" + new 
Random().nextInt();
+                                                subscribeToLb(cartridgeType,
+                                                          lbAlias,
+                                                          
lbCartridgeInfo.getDefaultAutoscalingPolicy(),
+                                                          deploymentPolicy, 
configurationContext,
+                                                          userName, 
tenantDomain);
+                                            }
+                                        }
+                                    }
+
+                                } catch (Exception ex) {
+                                    // we don't need to throw the error here.
+                                    log.error(ex.getMessage(), ex);
+                                }
+                            }
+                            break;
+                        } 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 for lb 
cartridge
+                                        DeploymentPolicy[] 
lbCartridgeDepPolicies =
+                                                                               
     autoscalerServiceClient.getDeploymentPolicies(lbConfig.getType());
+                                        // traverse deployment policies of lb 
cartridge
+                                        for (DeploymentPolicy policy : 
lbCartridgeDepPolicies) {
+                                            // check existence of the 
subscribed policy
+                                            if 
(deploymentPolicy.equals(policy.getId())) {
+
+                                                if 
(!autoscalerServiceClient.checkServiceLBExistenceAgainstPolicy(cartridgeType, 
deploymentPolicy)) {
+
+                                                    // if lb cluster doesn't 
exist
+                                                    String lbAlias = "lb" + 
cartridgeType + new Random().nextInt();
+                                                    
subscribeToLb(cartridgeType,
+                                                              lbAlias,
+                                                              
lbCartridgeInfo.getDefaultAutoscalingPolicy(),
+                                                              
deploymentPolicy, configurationContext,
+                                                              userName, 
tenantDomain);
+                                                }
+                                            }
+                                        }
+
+                                    } catch (Exception ex) {
+                                        // we don't need to throw the error 
here.
+                                        log.error(ex.getMessage(), ex);
+                                    }
+                                }
+                                break;
+                            }
+                        }
+                    }
+                }
+            }
+        }
 
         CartridgeSubscription cartridgeSubscription = 
cartridgeSubsciptionManager.subscribeToCartridge(cartridgeType,
                 alias.trim(), autoscalingPolicy, deploymentPolicy 
,tenantDomain, ApplicationManagementUtil.getTenantId(configurationContext),
@@ -781,7 +812,6 @@ public class ServiceUtils {
 
     }
 
-
     public static Cluster getCluster (String cartridgeType, String 
subscriptionAlias, ConfigurationContext configurationContext) {
 
         return 
TopologyClusterInformationModel.getInstance().getCluster(ApplicationManagementUtil.getTenantId(configurationContext)
@@ -806,6 +836,26 @@ public class ServiceUtils {
 
         return (clusterSet != null && clusterSet.size() > 0 ) ?
                 clusterSet.toArray(new Cluster[clusterSet.size()]) : new 
Cluster[0];
+
+    }
+    
+    private static void subscribeToLb(String cartridgeType, String lbAlias,
+        String defaultAutoscalingPolicy, String deploymentPolicy,
+        ConfigurationContext configurationContext, String userName, String 
tenantDomain) throws ADCException {
+        
+        try {
+            CartridgeSubscription cartridgeSubscription = 
+                    
cartridgeSubsciptionManager.subscribeToCartridge(cartridgeType, lbAlias.trim(), 
defaultAutoscalingPolicy, 
+                                                                     
deploymentPolicy ,tenantDomain, 
+                                                                     
ApplicationManagementUtil.getTenantId(configurationContext),
+                                                                     userName, 
"git", null, false, null, null);
+            
+            
cartridgeSubsciptionManager.registerCartridgeSubscription(cartridgeSubscription);
+        } catch (Exception e) {
+            String msg = "Error while subscribing to load balancer cartridge 
[type] "+cartridgeType;
+            log.error(msg, e);
+            throw new ADCException(msg, e);
+        }
     }
 
     static void unsubscribe(String alias, String tenantDomain) throws 
ADCException, NotSubscribedException {

Reply via email to