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 <rraju1...@gmail.com> Authored: Fri Feb 27 11:38:46 2015 +0530 Committer: R-Rajkumar <rraju1...@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); + } + } }