Repository: stratos Updated Branches: refs/heads/master a39e8e0a6 -> d5f508620
fixing acting upon termination issue Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/d5f50862 Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/d5f50862 Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/d5f50862 Branch: refs/heads/master Commit: d5f508620a9aa2935b446e80b01adf6e844247e1 Parents: 5e79bbf Author: reka <[email protected]> Authored: Wed Apr 29 00:05:05 2015 +0530 Committer: reka <[email protected]> Committed: Wed Apr 29 00:05:46 2015 +0530 ---------------------------------------------------------------------- .../autoscaler/monitor/component/ApplicationMonitor.java | 3 ++- .../autoscaler/monitor/component/GroupMonitor.java | 11 ++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/d5f50862/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java index 072ffbb..2a99203 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java @@ -283,7 +283,8 @@ public class ApplicationMonitor extends ParentComponentMonitor { ApplicationInstance instance = (ApplicationInstance) instanceIdToInstanceMap.get(instanceId); if (instance != null) { - if (this.isTerminating()) { + if (isTerminating() || instance.getStatus() == ApplicationStatus.Terminating || + instance.getStatus() == ApplicationStatus.Terminated) { ServiceReferenceHolder.getInstance().getGroupStatusProcessorChain().process(this.id, appId, instanceId); } else { http://git-wip-us.apache.org/repos/asf/stratos/blob/d5f50862/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 980503f..5e49e13 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 @@ -410,8 +410,7 @@ public class GroupMonitor extends ParentComponentMonitor { markInstanceAsTerminating(childId, instanceId); } else if (status1 == ClusterStatus.Terminated || status1 == GroupStatus.Terminated) { - //Verifying whether all the minimum no of instances of child - // became active to take next action + //Act upon child instance termination onTerminationOfInstance(childId, instanceId); } } @@ -423,14 +422,20 @@ public class GroupMonitor extends ParentComponentMonitor { GroupInstance instance = (GroupInstance) instanceIdToInstanceMap.get(instanceId); if (instance != null) { + // If this parent instance is terminating, then based on child notification, + // it has to decide its state if (instance.getStatus() == GroupStatus.Terminating || instance.getStatus() == GroupStatus.Terminated) { ServiceReferenceHolder.getInstance().getGroupStatusProcessorChain().process(id, appId, instanceId); } else { + //Checking whether the child who notified is still active. + // If it is active(scale down case), no need to act upon it. + // Otherwise act upon Termination and see whether it is required to start + // instance again based on termination behavior boolean active = verifyGroupStatus(childId, instanceId, GroupStatus.Active); if (!active) { - onTerminationOfInstance(childId, instanceId); + onChildTerminatedEvent(childId, instanceId); } else { log.info("[Group Instance] " + instanceId + " is still active upon termination" + " of the [child] " + childId);
