Repository: stratos Updated Branches: refs/heads/master 5dd46dca1 -> d858feb17
fixing group level deployment policy issue and verifying status issue Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/d858feb1 Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/d858feb1 Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/d858feb1 Branch: refs/heads/master Commit: d858feb1757c429e6fb8954a4b4267c818d67913 Parents: 5dd46dc Author: reka <[email protected]> Authored: Thu Dec 18 13:41:50 2014 +0530 Committer: reka <[email protected]> Committed: Thu Dec 18 13:41:50 2014 +0530 ---------------------------------------------------------------------- .../monitor/component/GroupMonitor.java | 94 +++++++++++--------- .../component/ParentComponentMonitor.java | 2 +- 2 files changed, 53 insertions(+), 43 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/d858feb1/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 62b33c2..7f96486 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 @@ -279,7 +279,7 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable { if (status1 == GroupStatus.Active) { //Verifying whether all the minimum no of instances of child // became active to take next action - boolean isChildActive = verifyGroupStatus(instanceId, GroupStatus.Active); + boolean isChildActive = verifyGroupStatus(childId, instanceId, GroupStatus.Active); if (isChildActive) { onChildActivatedEvent(childId, instanceId); } else { @@ -302,12 +302,12 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable { //Verifying whether all the minimum no of instances of child // became active to take next action if (status1 == GroupStatus.Terminated) { - boolean childTerminated = verifyGroupStatus(instanceId, (GroupStatus) status1); - if (childTerminated) { - onTerminationOfInstance(childId, instanceId); - } else { + /*boolean childTerminated = verifyGroupStatus(instanceId, (GroupStatus) status1); + if (childTerminated) {*/ + onTerminationOfInstance(childId, instanceId); + /*} else { log.info("Waiting for other group instances to be terminated"); - } + }*/ } else { onTerminationOfInstance(childId, instanceId); } @@ -626,10 +626,12 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable { GroupLevelNetworkPartitionContext groupLevelNetworkPartitionContext, GroupInstance groupInstance) { - String partitionId; + String partitionId = null; if (groupInstance == null) { - partitionId = partitionContext.getPartitionId(); + if (partitionContext != null) { + partitionId = partitionContext.getPartitionId(); + } groupInstance = createGroupInstance(group, parentInstanceContext.getNetworkPartitionId(), parentInstanceContext.getInstanceId(), partitionId); @@ -686,6 +688,8 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable { // Create GroupInstance for partition instance and add to required contexts for minimum instance count int groupMin = group.getGroupMinInstances(); + //Setting the networkpartition minimum instances as group min instances + groupLevelNetworkPartitionContext.setMinInstanceCount(groupMin); //Have to check whether group has generated its own instances List<Instance> existingGroupInstances = group.getInstanceContextsWithParentId(parentInstanceId); @@ -728,17 +732,19 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable { private PartitionContext getPartitionContext( GroupLevelNetworkPartitionContext groupLevelNetworkPartitionContext, String parentPartitionId) { - PartitionContext partitionContext; + PartitionContext partitionContext = null; // Get partitionContext to create instance in List<GroupLevelPartitionContext> partitionContexts = groupLevelNetworkPartitionContext. getPartitionCtxts(); GroupLevelPartitionContext[] groupLevelPartitionContexts = new GroupLevelPartitionContext[partitionContexts.size()]; if (parentPartitionId == null) { - AutoscaleAlgorithm algorithm = this.getAutoscaleAlgorithm( - groupLevelNetworkPartitionContext.getPartitionAlgorithm()); - partitionContext = algorithm.getNextScaleUpPartitionContext( - (partitionContexts.toArray(groupLevelPartitionContexts))); + if (!partitionContexts.isEmpty()) { + AutoscaleAlgorithm algorithm = this.getAutoscaleAlgorithm( + groupLevelNetworkPartitionContext.getPartitionAlgorithm()); + partitionContext = algorithm.getNextScaleUpPartitionContext( + (partitionContexts.toArray(groupLevelPartitionContexts))); + } } else { partitionContext = groupLevelNetworkPartitionContext. getPartitionContextById(parentPartitionId); @@ -863,39 +869,43 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable { this.isDestroyed = isDestroyed; } - public boolean verifyGroupStatus(String instanceId, GroupStatus requiredStatus) { - if (this.instanceIdToInstanceMap.containsKey(instanceId)) { - if (((GroupInstance) this.instanceIdToInstanceMap.get(instanceId)).getStatus() == requiredStatus) { + public boolean verifyGroupStatus(String childId, String instanceId, GroupStatus requiredStatus) { + Monitor monitor = this.getMonitor(childId); + List<String> groupInstances; + GroupInstance groupInstance = (GroupInstance) monitor.getInstance(instanceId); + if (groupInstance == null) { + groupInstances = monitor.getInstancesByParentInstanceId(instanceId); + } else { + if (groupInstance.getStatus() == requiredStatus) { return true; + } else { + return false; } - } else { - List<GroupInstance> instances = new ArrayList<GroupInstance>(); - String networkPartitionId = null; - int noOfInstancesOfRequiredStatus = 0; - for (Instance instance : this.instanceIdToInstanceMap.values()) { - GroupInstance groupInstance = (GroupInstance) instance; - if (groupInstance.getParentId().equals(instanceId)) { - instances.add(groupInstance); - networkPartitionId = groupInstance.getNetworkPartitionId(); - if (groupInstance.getStatus() == requiredStatus) { - noOfInstancesOfRequiredStatus++; - } - } + } + + String networkPartitionId = null; + int noOfInstancesOfRequiredStatus = 0; + for (String childInstanceId : groupInstances) { + GroupInstance childGroupInstance = (GroupInstance) monitor.getInstance(childInstanceId); + networkPartitionId = childGroupInstance.getNetworkPartitionId(); + if (childGroupInstance.getStatus() == requiredStatus) { + noOfInstancesOfRequiredStatus++; } - if (!instances.isEmpty()) { - int minInstances = this.networkPartitionCtxts.get(networkPartitionId). - getMinInstanceCount(); - //if terminated all the instances in this instances map should be in terminated state - if (noOfInstancesOfRequiredStatus == this.inactiveInstancesMap.size() && - requiredStatus == GroupStatus.Terminated) { - return true; - } else if (noOfInstancesOfRequiredStatus >= minInstances) { + } + + if (!groupInstances.isEmpty()) { + int minInstances = this.networkPartitionCtxts.get(networkPartitionId). + getMinInstanceCount(); + //if terminated all the instances in this instances map should be in terminated state + if (noOfInstancesOfRequiredStatus == this.inactiveInstancesMap.size() && + requiredStatus == GroupStatus.Terminated) { + return true; + } else if (noOfInstancesOfRequiredStatus >= minInstances) { + return true; + } else { + //of only one is inActive implies that the whole group is Inactive + if (requiredStatus == GroupStatus.Inactive && noOfInstancesOfRequiredStatus >= 1) { return true; - } else { - //of only one is inActive implies that the whole group is Inactive - if (requiredStatus == GroupStatus.Inactive && noOfInstancesOfRequiredStatus >= 1) { - return true; - } } } } http://git-wip-us.apache.org/repos/asf/stratos/blob/d858feb1/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java index 00ec33a..37524d3 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java @@ -455,7 +455,7 @@ public abstract class ParentComponentMonitor extends Monitor { GroupMonitor monitor1 = (GroupMonitor) monitor; try { ApplicationHolder.acquireReadLock(); - if (monitor1.verifyGroupStatus(instanceId, GroupStatus.Active)) { + if (monitor1.verifyGroupStatus(context1.getId(), instanceId, GroupStatus.Active)) { parentsActive = true; }
