You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by ra...@apache.org on 2015/02/27 08:24:27 UTC

stratos git commit: fixing an issue in parse deployment policy method in AS

Repository: stratos
Updated Branches:
  refs/heads/master-deployment-policy-fix-merge aa77d0bbf -> 29a1af788


fixing an issue in parse deployment policy method in AS


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

Branch: refs/heads/master-deployment-policy-fix-merge
Commit: 29a1af7887e146c99be7b345e11020a577722acc
Parents: aa77d0b
Author: R-Rajkumar <rr...@gmail.com>
Authored: Fri Feb 27 11:38:46 2015 +0530
Committer: R-Rajkumar <rr...@gmail.com>
Committed: Fri Feb 27 11:38:46 2015 +0530

----------------------------------------------------------------------
 .../context/cluster/ClusterContext.java         | 12 +++-
 .../services/impl/AutoscalerServiceImpl.java    | 73 +-------------------
 .../stratos/autoscaler/util/AutoscalerUtil.java | 71 +++++++++++++++++++
 3 files changed, 81 insertions(+), 75 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/29a1af78/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterContext.java
index 6f3e4e9..51aca64 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterContext.java
@@ -139,8 +139,14 @@ public class ClusterContext extends AbstractClusterContext {
 					}
 				}
 			}
-        	networkPartitionContext = new ClusterLevelNetworkPartitionContext(networkPartitionRef.getId(),
-        			networkPartitionRef.getPartitionAlgo(), 0);
+        	
+        	if (networkPartitionRef == null) {
+        		 //Parent should have the partition specified
+        		networkPartitionContext = new ClusterLevelNetworkPartitionContext(clusterInstance.getNetworkPartitionId());
+			} else {
+				networkPartitionContext = new ClusterLevelNetworkPartitionContext(networkPartitionRef.getId(),
+						networkPartitionRef.getPartitionAlgo(), 0);
+			}
         }
 
         if (clusterInstance.getPartitionId() != null) {
@@ -196,7 +202,7 @@ public class ClusterContext extends AbstractClusterContext {
 
 		if (partitionRefs == null) {
 			String msg = "PartitionRefs are null in deployment policy for [cluster-alias] "
-					+ clusterInstance.getAlias();
+					+ AutoscalerUtil.getAliasFromClusterId(clusterId);
 			log.error(msg);
 			throw new PolicyValidationException(msg);
 		}

http://git-wip-us.apache.org/repos/asf/stratos/blob/29a1af78/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
index 26c8d4d..0d4bcfb 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
@@ -18,7 +18,6 @@
  */
 package org.apache.stratos.autoscaler.services.impl;
 
-import java.rmi.RemoteException;
 import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -43,7 +42,6 @@ import org.apache.stratos.autoscaler.context.AutoscalerContext;
 import org.apache.stratos.autoscaler.exception.AutoScalerException;
 import org.apache.stratos.autoscaler.exception.InvalidArgumentException;
 import org.apache.stratos.autoscaler.exception.application.ApplicationDefinitionException;
-import org.apache.stratos.autoscaler.exception.application.InvalidApplicationPolicyException;
 import org.apache.stratos.autoscaler.exception.kubernetes.InvalidServiceGroupException;
 import org.apache.stratos.autoscaler.exception.policy.InvalidPolicyException;
 import org.apache.stratos.autoscaler.monitor.cluster.ClusterMonitor;
@@ -52,13 +50,11 @@ import org.apache.stratos.autoscaler.pojo.ServiceGroup;
 import org.apache.stratos.autoscaler.pojo.policy.PolicyManager;
 import org.apache.stratos.autoscaler.pojo.policy.autoscale.AutoscalePolicy;
 import org.apache.stratos.autoscaler.pojo.policy.deployment.ApplicationPolicy;
-import org.apache.stratos.autoscaler.pojo.policy.deployment.ApplicationPolicyNetworkPartitionReference;
 import org.apache.stratos.autoscaler.registry.RegistryManager;
 import org.apache.stratos.autoscaler.services.AutoscalerService;
 import org.apache.stratos.autoscaler.util.AutoscalerUtil;
 import org.apache.stratos.common.Properties;
 import org.apache.stratos.common.Property;
-import org.apache.stratos.common.client.CloudControllerServiceClient;
 import org.apache.stratos.common.client.StratosManagerServiceClient;
 import org.apache.stratos.common.util.CommonUtil;
 import org.apache.stratos.manager.service.stub.domain.application.signup.ApplicationSignUp;
@@ -181,7 +177,7 @@ public class AutoscalerServiceImpl implements AutoscalerService {
             ApplicationBuilder.handleApplicationCreatedEvent(application, applicationContext.getComponents().getApplicationClusterContexts());
 
 			// validating application policy
-			validateApplicationPolicy(applicationId, applicationPolicy);
+			AutoscalerUtil.validateApplicationPolicy(applicationId, applicationPolicy);
 			
 			// Add application policy
 			PolicyManager.getInstance().addApplicationPolicy(applicationPolicy);
@@ -582,73 +578,6 @@ public class AutoscalerServiceImpl implements AutoscalerService {
         }
     }
     
-    /**
-     * Validates Application Policy against the given application.
-     * @param applicationId the application id against which the application policy needs to be validated
-     * @param applicationPolicy the application policy to be validated
-     * @throws InvalidApplicationPolicyException if application policy is not valid
-     * @throws RemoteException is anything went wrong while communicating with CC to validate network partitions
-     */
-	private void validateApplicationPolicy(String applicationId, ApplicationPolicy applicationPolicy) 
-    		throws InvalidApplicationPolicyException, RemoteException {
-    	
-    	// application policy can't be null
-    	if (null == applicationPolicy) {
-			String msg = "Invalid Application Policy. Cause -> Application Policy is null";
-			log.error(msg);
-			throw new InvalidApplicationPolicyException(msg);
-		}
-    	
-    	// application policy should contain at least one network partition reference
-    	ApplicationPolicyNetworkPartitionReference[] networkPartitionReferences = 
-    			applicationPolicy.getNetworkPartitionReferences();
-		if (null == networkPartitionReferences || networkPartitionReferences.length == 0) {
-			String msg = "Invalid Application Policy. "
-					+ "Cause -> Application Policy is not containing any network partition reference";
-			log.error(msg);
-			throw new InvalidApplicationPolicyException(msg);
-		}
-    	
-    	// to count the number of network partitions which are active by default
-    	// if the count is 0, we should raise the error
-    	int activeByDefaultNetworkPartitionsCount = 0;
-    	
-    	// validating all network partition references
-    	for (ApplicationPolicyNetworkPartitionReference applicationPolicyNetworkPartitionReference : networkPartitionReferences) {
-			
-    		// network-partition-id can't be null or empty
-    		String networkPartitionId = applicationPolicyNetworkPartitionReference.getNetworkPartitionId();
-			if (null == networkPartitionId || networkPartitionId.isEmpty()) {
-				String msg = String.format("Invalid Application Policy. "
-						+ "Cause -> Invalid network-partition-id : %s", networkPartitionId);
-				log.error(msg);
-				throw new InvalidApplicationPolicyException(msg);
-			}
-			
-			// network partitions should be added already
-			if (null == CloudControllerServiceClient.getInstance().getNetworkPartition(networkPartitionId)) {
-				String msg = String.format("Invalid Application Policy. "
-						+ "Cause -> Network partition not found for network-partition-id : %s", networkPartitionId);
-				log.error(msg);
-				throw new InvalidApplicationPolicyException(msg);
-			}
-			
-			//TODO validate application policy against the given application
-			
-			// counting number of network partitions which are active by default
-			if (true == applicationPolicyNetworkPartitionReference.isActiveByDefault()) {
-				activeByDefaultNetworkPartitionsCount++;
-			}
-		}
-    	
-    	// there should be at least one network partition reference which is active by default
-    	if (activeByDefaultNetworkPartitionsCount == 0) {
-			String msg = "Invalid Application Policy. Cause -> No active by default network partitions found";
-			log.error(msg);
-			throw new InvalidApplicationPolicyException(msg);
-		}
-    }
-
 	@Override
 	public ApplicationPolicy getApplicationPolicy(String applicationId) {
 		return PolicyManager.getInstance().getApplicationPolicy(applicationId);

http://git-wip-us.apache.org/repos/asf/stratos/blob/29a1af78/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
index 6ec0197..97b8cb8 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
@@ -19,6 +19,7 @@
 
 package org.apache.stratos.autoscaler.util;
 
+import java.rmi.RemoteException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -41,11 +42,14 @@ import org.apache.stratos.autoscaler.applications.pojo.GroupContext;
 import org.apache.stratos.autoscaler.context.AutoscalerContext;
 import org.apache.stratos.autoscaler.exception.AutoScalerException;
 import org.apache.stratos.autoscaler.exception.application.DependencyBuilderException;
+import org.apache.stratos.autoscaler.exception.application.InvalidApplicationPolicyException;
 import org.apache.stratos.autoscaler.exception.application.TopologyInConsistentException;
 import org.apache.stratos.autoscaler.exception.policy.PolicyValidationException;
 import org.apache.stratos.autoscaler.monitor.Monitor;
 import org.apache.stratos.autoscaler.monitor.MonitorFactory;
 import org.apache.stratos.autoscaler.monitor.component.ApplicationMonitor;
+import org.apache.stratos.autoscaler.pojo.policy.deployment.ApplicationPolicy;
+import org.apache.stratos.autoscaler.pojo.policy.deployment.ApplicationPolicyNetworkPartitionReference;
 import org.apache.stratos.autoscaler.registry.RegistryManager;
 import org.apache.stratos.cloud.controller.stub.domain.DeploymentPolicy;
 import org.apache.stratos.cloud.controller.stub.domain.NetworkPartitionRef;
@@ -551,4 +555,71 @@ public class AutoscalerUtil {
 			}
 		}
     }
+    
+    /**
+     * Validates Application Policy against the given application.
+     * @param applicationId the application id against which the application policy needs to be validated
+     * @param applicationPolicy the application policy to be validated
+     * @throws InvalidApplicationPolicyException if application policy is not valid
+     * @throws RemoteException is anything went wrong while communicating with CC to validate network partitions
+     */
+	public static void validateApplicationPolicy(String applicationId, ApplicationPolicy applicationPolicy) 
+    		throws InvalidApplicationPolicyException, RemoteException {
+    	
+    	// application policy can't be null
+    	if (null == applicationPolicy) {
+			String msg = "Invalid Application Policy. Cause -> Application Policy is null";
+			log.error(msg);
+			throw new InvalidApplicationPolicyException(msg);
+		}
+    	
+    	// application policy should contain at least one network partition reference
+    	ApplicationPolicyNetworkPartitionReference[] networkPartitionReferences = 
+    			applicationPolicy.getNetworkPartitionReferences();
+		if (null == networkPartitionReferences || networkPartitionReferences.length == 0) {
+			String msg = "Invalid Application Policy. "
+					+ "Cause -> Application Policy is not containing any network partition reference";
+			log.error(msg);
+			throw new InvalidApplicationPolicyException(msg);
+		}
+    	
+    	// to count the number of network partitions which are active by default
+    	// if the count is 0, we should raise the error
+    	int activeByDefaultNetworkPartitionsCount = 0;
+    	
+    	// validating all network partition references
+    	for (ApplicationPolicyNetworkPartitionReference applicationPolicyNetworkPartitionReference : networkPartitionReferences) {
+			
+    		// network-partition-id can't be null or empty
+    		String networkPartitionId = applicationPolicyNetworkPartitionReference.getNetworkPartitionId();
+			if (null == networkPartitionId || networkPartitionId.isEmpty()) {
+				String msg = String.format("Invalid Application Policy. "
+						+ "Cause -> Invalid network-partition-id : %s", networkPartitionId);
+				log.error(msg);
+				throw new InvalidApplicationPolicyException(msg);
+			}
+			
+			// network partitions should be added already
+			if (null == CloudControllerServiceClient.getInstance().getNetworkPartition(networkPartitionId)) {
+				String msg = String.format("Invalid Application Policy. "
+						+ "Cause -> Network partition not found for network-partition-id : %s", networkPartitionId);
+				log.error(msg);
+				throw new InvalidApplicationPolicyException(msg);
+			}
+			
+			//TODO validate application policy against the given application
+			
+			// counting number of network partitions which are active by default
+			if (true == applicationPolicyNetworkPartitionReference.isActiveByDefault()) {
+				activeByDefaultNetworkPartitionsCount++;
+			}
+		}
+    	
+    	// there should be at least one network partition reference which is active by default
+    	if (activeByDefaultNetworkPartitionsCount == 0) {
+			String msg = "Invalid Application Policy. Cause -> No active by default network partitions found";
+			log.error(msg);
+			throw new InvalidApplicationPolicyException(msg);
+		}
+    }
 }