adding a map to keep track of inactive and terminating instances
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/dc5ae90d Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/dc5ae90d Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/dc5ae90d Branch: refs/heads/4.1.0-test Commit: dc5ae90d86e48fd0e96247b1977bcd79d515a841 Parents: 590a4f6 Author: reka <[email protected]> Authored: Wed Dec 10 20:27:48 2014 +0530 Committer: reka <[email protected]> Committed: Thu Dec 11 19:23:20 2014 +0530 ---------------------------------------------------------------------- .../monitor/component/ApplicationMonitor.java | 2 +- .../monitor/component/GroupMonitor.java | 73 ++++++++------------ .../component/ParentComponentMonitor.java | 6 +- 3 files changed, 34 insertions(+), 47 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/dc5ae90d/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 ae8ba9a..f8f2e82 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 @@ -141,7 +141,7 @@ public class ApplicationMonitor extends ParentComponentMonitor { onChildInactiveEvent(childId, instanceId); } else if (status1 == ClusterStatus.Terminating || status1 == GroupStatus.Terminating) { - //mark the child monitor as inactive in the map + //mark the child monitor as inActive in the map markInstanceAsTerminating(childId, instanceId); } else if (status1 == ClusterStatus.Terminated || status1 == GroupStatus.Terminated) { http://git-wip-us.apache.org/repos/asf/stratos/blob/dc5ae90d/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 00ac964..10bcec1 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 @@ -173,54 +173,41 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable { @Override public void onChildStatusEvent(MonitorStatusEvent statusEvent) { - final String childId = statusEvent.getId(); - final String instanceId = statusEvent.getInstanceId(); - final LifeCycleState status1 = statusEvent.getStatus(); - final String id = this.id; - //TODO get lock when executing this - Runnable monitoringRunnable = new Runnable() { - @Override - public void run() { - //Events coming from parent are In_Active(in faulty detection), Scaling events, termination + String childId = statusEvent.getId(); + String instanceId = statusEvent.getInstanceId(); + LifeCycleState status1 = statusEvent.getStatus(); + //Events coming from parent are In_Active(in faulty detection), Scaling events, termination - if (status1 == ClusterStatus.Active || status1 == GroupStatus.Active) { - onChildActivatedEvent(childId, instanceId); + if (status1 == ClusterStatus.Active || status1 == GroupStatus.Active) { + onChildActivatedEvent(childId, instanceId); - } else if (status1 == ClusterStatus.Inactive || status1 == GroupStatus.Inactive) { - //handling restart of stratos - if (!aliasToActiveMonitorsMap.get(childId).hasStartupDependents()) { - onChildActivatedEvent(childId, instanceId); - } else { - markInstanceAsInactive(childId, instanceId); - onChildInactiveEvent(childId, instanceId); - } + } else if (status1 == ClusterStatus.Inactive || status1 == GroupStatus.Inactive) { + //handling restart of stratos + if (!this.aliasToActiveMonitorsMap.get(childId).hasStartupDependents()) { + onChildActivatedEvent(childId, instanceId); + } else { + this.markInstanceAsInactive(childId, instanceId); + onChildInactiveEvent(childId, instanceId); + } - } else if (status1 == ClusterStatus.Terminating || status1 == GroupStatus.Terminating) { - //mark the child monitor as inactive in the map - markInstanceAsTerminating(childId, instanceId); - - } else if (status1 == ClusterStatus.Terminated || status1 == GroupStatus.Terminated) { - //Check whether all dependent goes Terminated and then start them in parallel. - removeInstanceFromFromInactiveMap(childId, instanceId); - removeInstanceFromFromTerminatingMap(childId, instanceId); - - GroupInstance instance = (GroupInstance) instanceIdToInstanceMap.get(instanceId); - if (instance != null) { - if (instance.getStatus() == GroupStatus.Terminating || instance.getStatus() == GroupStatus.Terminated) { - ServiceReferenceHolder.getInstance().getGroupStatusProcessorChain().process(id, - appId, instanceId); - } else { - onChildTerminatedEvent(childId, instanceId); - } - } else { - log.warn("The required instance cannot be found in the the [GroupMonitor] " + - id); - } + } else if (status1 == ClusterStatus.Terminating || status1 == GroupStatus.Terminating) { + //mark the child monitor as inActive in the map + markInstanceAsTerminating(childId, instanceId); + + } else if (status1 == ClusterStatus.Terminated || status1 == GroupStatus.Terminated) { + //Check whether all dependent goes Terminated and then start them in parallel. + removeInstanceFromFromInactiveMap(childId, instanceId); + removeInstanceFromFromTerminatingMap(childId, instanceId); + GroupInstance instance = (GroupInstance) this.instanceIdToInstanceMap.get(instanceId); + if (instance != null) { + if (instance.getStatus() == GroupStatus.Terminating || instance.getStatus() == GroupStatus.Terminated) { + ServiceReferenceHolder.getInstance().getGroupStatusProcessorChain().process(this.id, + appId, instanceId); + } else { + onChildTerminatedEvent(childId, instanceId); } } - }; - monitoringRunnable.run(); - + } } http://git-wip-us.apache.org/repos/asf/stratos/blob/dc5ae90d/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 6156015..2b6ce96 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 @@ -45,6 +45,7 @@ import org.apache.stratos.autoscaler.util.ServiceReferenceHolder; import org.apache.stratos.messaging.domain.applications.GroupStatus; import org.apache.stratos.messaging.domain.applications.ParentComponent; import org.apache.stratos.messaging.domain.instance.ClusterInstance; +import org.apache.stratos.messaging.domain.instance.Instance; import org.apache.stratos.messaging.domain.topology.ClusterStatus; import org.apache.stratos.messaging.message.receiver.topology.TopologyManager; @@ -497,8 +498,7 @@ public abstract class ParentComponentMonitor extends Monitor { // move to inactive monitors list to use in the Terminated event protected synchronized void markInstanceAsInactive(String childId, String instanceId) { - - if (this.inactiveInstancesMap.containsKey(childId)) { + if (!this.inactiveInstancesMap.containsKey(childId)) { this.inactiveInstancesMap.get(childId).add(instanceId); } else { List<String> instanceIds = new ArrayList<String>(); @@ -531,7 +531,7 @@ public abstract class ParentComponentMonitor extends Monitor { // move to inactive monitors list to use in the Terminated event protected synchronized void markInstanceAsTerminating(String childId, String instanceId) { - if (this.terminatingInstancesMap.containsKey(childId)) { + if (!this.terminatingInstancesMap.containsKey(childId)) { if (this.inactiveInstancesMap.containsKey(childId) && this.inactiveInstancesMap.get(childId).contains(instanceId)) { this.inactiveInstancesMap.get(childId).remove(instanceId);
