fixing group level deployment policy parsing issue
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/90ae4716 Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/90ae4716 Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/90ae4716 Branch: refs/heads/4.1.0-test Commit: 90ae47169755c922f1b7b9b2928b292c542a937a Parents: 408852e Author: reka <[email protected]> Authored: Tue Dec 9 14:02:39 2014 +0530 Committer: reka <[email protected]> Committed: Tue Dec 9 14:02:50 2014 +0530 ---------------------------------------------------------------------- .../autoscaler/api/AutoScalerServiceImpl.java | 45 ++++++++++++++------ .../partition/GroupLevelPartitionContext.java | 27 ++++++++++++ .../context/partition/PartitionContext.java | 5 +++ .../monitor/component/GroupMonitor.java | 5 ++- .../domain/applications/ParentComponent.java | 10 +++-- 5 files changed, 72 insertions(+), 20 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/90ae4716/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java index 5f20111..36edb03 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java @@ -31,6 +31,7 @@ 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.TopologyInConsistentException; import org.apache.stratos.autoscaler.exception.kubernetes.*; import org.apache.stratos.autoscaler.exception.partition.PartitionValidationException; import org.apache.stratos.autoscaler.exception.policy.InvalidPolicyException; @@ -152,26 +153,42 @@ public class AutoScalerServiceImpl implements AutoScalerServiceInterface { Application application = ApplicationHolder.getApplications(). getApplication(deploymentPolicy.getApplicationId()); Partition[] partitions = new Partition[partitionList.size()]; - Group group = application.getGroupRecursively(alias); - if(group != null) { - Set<ClusterDataHolder> clusterDataHolders = group.getClusterDataHoldersOfGroup(); - //validating the group deployment policy against the leaf cartridges - for(ClusterDataHolder clusterDataHolder : clusterDataHolders) { - CloudControllerClient.getInstance().validateDeploymentPolicy( - clusterDataHolder.getServiceType(), partitionList.toArray(partitions)); + if(application != null) { + Group group = application.getGroupRecursively(alias); + if(group != null) { + Set<ClusterDataHolder> clusterDataHolders = group.getClusterDataHoldersOfGroup(); + //validating the group deployment policy against the leaf cartridges + for(ClusterDataHolder clusterDataHolder : clusterDataHolders) { + CloudControllerClient.getInstance().validateDeploymentPolicy( + clusterDataHolder.getServiceType(), partitionList.toArray(partitions)); + } + } else { + //Validating the cartridge level deployment policy + ClusterDataHolder clusterDataHolder = application. + getClusterDataHolderRecursivelyByAlias(alias); + if(clusterDataHolder != null) { + CloudControllerClient.getInstance().validateDeploymentPolicy( + clusterDataHolder.getServiceType(), partitionList.toArray(partitions)); + } else { + String msg = "Error while retrieving the group/cluster for the Deployment " + + "policy: " + alias; + log.error(msg); + throw new TopologyInConsistentException(msg); + } } } else { - //Validating the cartridge level deployment policy - ClusterDataHolder clusterDataHolder = application. - getClusterDataHolderRecursivelyByAlias(alias); - if(clusterDataHolder != null) { - CloudControllerClient.getInstance().validateDeploymentPolicy( - clusterDataHolder.getServiceType(), partitionList.toArray(partitions)); - } + String msg = "Error while retrieving the application for the Deployment policy: " + + deploymentPolicy.getApplicationId(); + log.error(msg); + throw new TopologyInConsistentException(msg); } + } catch (PartitionValidationException e) { log.error("Error while validating the deployment policy", e); //TODO throw exception + } catch (TopologyInConsistentException e) { + log.error("Error while validating the deployment policy", e); + //TODO throw exception } finally { ApplicationHolder.releaseReadLock(); } http://git-wip-us.apache.org/repos/asf/stratos/blob/90ae4716/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/GroupLevelPartitionContext.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/GroupLevelPartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/GroupLevelPartitionContext.java index 7400415..1f5555d 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/GroupLevelPartitionContext.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/GroupLevelPartitionContext.java @@ -111,6 +111,33 @@ public class GroupLevelPartitionContext extends PartitionContext implements Seri th3.start();*/ } + public GroupLevelPartitionContext(String partitionId, String networkPartitionIid ) { + super(partitionId, networkPartitionIid); + this.pendingInstances = new ArrayList<Instance>(); + this.activeInstances = new ArrayList<Instance>(); + this.terminationPendingInstances = new ArrayList<Instance>(); + this.obsoletedInstances = new ConcurrentHashMap<String, Instance>(); + instanceStatsContexts = new ConcurrentHashMap<String, MemberStatsContext>(); + + + terminationPendingStartedTime = new HashMap<String, Long>(); + // check if a different value has been set for expiryTime + XMLConfiguration conf = ConfUtil.getInstance(null).getConfiguration(); + pendingInstanceExpiryTime = conf.getLong(StratosConstants.PENDING_VM_MEMBER_EXPIRY_TIMEOUT, 900000); + obsoltedInstanceExpiryTime = conf.getLong(StratosConstants.OBSOLETED_VM_MEMBER_EXPIRY_TIMEOUT, 86400000); + if (log.isDebugEnabled()) { + log.debug("Instance expiry time is set to: " + pendingInstanceExpiryTime); + log.debug("Instance obsoleted expiry time is set to: " + obsoltedInstanceExpiryTime); + } + + /*Thread th = new Thread(new PendingInstanceWatcher(this)); + th.start(); + Thread th2 = new Thread(new ObsoletedInstanceWatcher(this)); + th2.start(); + Thread th3 = new Thread(new TerminationPendingInstanceWatcher(this)); + th3.start();*/ + } + public long getTerminationPendingStartedTimeOfInstance(String instanceId) { return terminationPendingStartedTime.get(instanceId); } http://git-wip-us.apache.org/repos/asf/stratos/blob/90ae4716/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/PartitionContext.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/PartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/PartitionContext.java index 167caea..459b971 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/PartitionContext.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/PartitionContext.java @@ -59,6 +59,11 @@ public abstract class PartitionContext implements Serializable { this.networkPartitionId = networkPartitionId; } + public PartitionContext(String partitionId, String networkPartitionId) { + this.partitionId = partitionId; + this.networkPartitionId = networkPartitionId; + } + public Partition getPartition() { return partition; } http://git-wip-us.apache.org/repos/asf/stratos/blob/90ae4716/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java index 8d3f42d..3f8d9e0 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java @@ -379,8 +379,9 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable { if (policy == null) { if (parentPartitionId != null && - networkPartitionContext.getPartitionCtxt(parentPartitionId) != null) { - partitionContext = new GroupLevelPartitionContext(0); + networkPartitionContext.getPartitionCtxt(parentPartitionId) == null) { + partitionContext = new GroupLevelPartitionContext(parentPartitionId, + networkPartitionId); networkPartitionContext.addPartitionContext((GroupLevelPartitionContext) partitionContext); if (log.isInfoEnabled()) { log.info("[Partition] " + parentPartitionId + "has been added for the " + http://git-wip-us.apache.org/repos/asf/stratos/blob/90ae4716/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java index 4dd6b34..6468eaf 100644 --- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java @@ -328,10 +328,12 @@ public abstract class ParentComponent<T extends Instance> implements Serializabl if (group.getClusterData(alias) != null) { return group.getClusterData(alias); } - } else { - if (group.getGroups() != null) { - return getClusterDataByAlias(alias, group.getGroups()); - } + } + } + + for(Group group : groups) { + if (group.getGroups() != null) { + return getClusterDataByAlias(alias, group.getGroups()); } } return null;
