Repository: stratos Updated Branches: refs/heads/master 2a3bfc436 -> 0e2e70402
fixing faulty member case for multiple dependent cluster Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/0e2e7040 Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/0e2e7040 Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/0e2e7040 Branch: refs/heads/master Commit: 0e2e704021663594e2c520eec685f034b709b7bf Parents: 2a3bfc4 Author: reka <[email protected]> Authored: Mon Nov 10 15:11:30 2014 +0530 Committer: reka <[email protected]> Committed: Mon Nov 10 15:11:30 2014 +0530 ---------------------------------------------------------------------- .../applications/topic/ApplicationBuilder.java | 16 +++++------ .../stratos/autoscaler/monitor/Monitor.java | 8 ++++++ .../monitor/application/ApplicationMonitor.java | 28 +++++++++++++++----- .../monitor/cluster/AbstractClusterMonitor.java | 4 +-- .../autoscaler/monitor/group/GroupMonitor.java | 6 ----- 5 files changed, 39 insertions(+), 23 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/0e2e7040/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java index d3c4c6f..d0ff90b 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java @@ -96,7 +96,7 @@ public class ApplicationBuilder { updateApplicationMonitor(appId, status); ApplicationHolder.persistApplication(application); //publishing data - ApplicationsEventPublisher.sendApplicationActivatedEvent(appId); + //TODO ApplicationsEventPublisher.sendApplicationActivatedEvent(appId); } else { log.warn(String.format("Application state transition is not valid: [application-id] %s " + " [current-status] %s [status-requested] %s", appId, application.getStatus(), status)); @@ -131,7 +131,7 @@ public class ApplicationBuilder { updateApplicationMonitor(appId, status); ApplicationHolder.persistApplication(application); //publishing data - ApplicationsEventPublisher.sendApplicationActivatedEvent(appId); + //TODO ApplicationsEventPublisher.sendApplicationActivatedEvent(appId); } else { log.warn(String.format("Application state transition is not valid: [application-id] %s " + " [current-status] %s [status-requested] %s", appId, application.getStatus(), status)); @@ -168,7 +168,7 @@ public class ApplicationBuilder { //Removing the application from memory and registry ApplicationHolder.removeApplication(appId); log.info("Application is removed: [application-id] " + appId); - ApplicationsEventPublisher.sendApplicationTerminatedEvent(appId); + //TODO ApplicationsEventPublisher.sendApplicationTerminatedEvent(appId); } else { log.warn(String.format("Application state transition is not valid: [application-id] %s " + " [current-status] %s [status-requested] %s", appId, application.getStatus(), status)); @@ -244,7 +244,7 @@ public class ApplicationBuilder { //updating the groupMonitor updateGroupMonitor(appId, groupId, status); //publishing data - ApplicationsEventPublisher.sendGroupTerminatedEvent(appId, groupId); + //TODO ApplicationsEventPublisher.sendGroupTerminatedEvent(appId, groupId); } else { log.warn(String.format("Group state transition is not valid: [group-id] %s [current-status] %s " + " [requested-status] %s", groupId, group.getStatus(), status)); @@ -286,7 +286,7 @@ public class ApplicationBuilder { //updating the groupMonitor updateGroupMonitor(appId, groupId, status); //publishing data - ApplicationsEventPublisher.sendGroupActivatedEvent(appId, groupId); + //TODO ApplicationsEventPublisher.sendGroupActivatedEvent(appId, groupId); } else { log.warn(String.format("Group state transition is not valid: [group-id] %s [current-status] %s " + " [requested-status] %s", groupId, group.getStatus(), status)); @@ -328,7 +328,7 @@ public class ApplicationBuilder { //updating the groupMonitor updateGroupMonitor(appId, groupId, status); //publishing data - ApplicationsEventPublisher.sendGroupCreatedEvent(appId, groupId); + //TODO ApplicationsEventPublisher.sendGroupCreatedEvent(appId, groupId); } else { log.warn("Group state transition is not valid: [group-id] " + groupId + " [current-state] " + group.getStatus() + "[requested-state] " + status); @@ -371,7 +371,7 @@ public class ApplicationBuilder { //updating the groupMonitor updateGroupMonitor(appId, groupId, status); //publishing data - ApplicationsEventPublisher.sendGroupInActivateEvent(appId, groupId); + //TODO ApplicationsEventPublisher.sendGroupInActivateEvent(appId, groupId); } else { log.warn("Group state transition is not valid: [group-id] " + groupId + " [current-state] " + group.getStatus() + "[requested-state] " + status); @@ -413,7 +413,7 @@ public class ApplicationBuilder { //updating the groupMonitor updateGroupMonitor(appId, groupId, status); //publishing data - ApplicationsEventPublisher.sendGroupTerminatingEvent(appId, groupId); + //TODO ApplicationsEventPublisher.sendGroupTerminatingEvent(appId, groupId); } else { log.warn("Group state transition is not valid: [group-id] " + groupId + " [current-state] " + group.getStatus() + "[requested-state] " + status); http://git-wip-us.apache.org/repos/asf/stratos/blob/0e2e7040/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/Monitor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/Monitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/Monitor.java index 791f7a0..a4ec80e 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/Monitor.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/Monitor.java @@ -105,4 +105,12 @@ public abstract class Monitor implements EventHandler { } return hasInDepChild; } + + public Map<String, Monitor> getAliasToInActiveMonitorsMap() { + return this.aliasToInactiveMonitorsMap; + } + + public void setAliasToInActiveMonitorsMap(Map<String, Monitor> aliasToInActiveMonitorsMap) { + this.aliasToInactiveMonitorsMap = aliasToInActiveMonitorsMap; + } } http://git-wip-us.apache.org/repos/asf/stratos/blob/0e2e7040/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitor.java index abe64ba..d91477f 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitor.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitor.java @@ -22,10 +22,10 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.stratos.autoscaler.exception.DependencyBuilderException; import org.apache.stratos.autoscaler.exception.TopologyInConsistentException; -import org.apache.stratos.autoscaler.monitor.cluster.AbstractClusterMonitor; import org.apache.stratos.autoscaler.monitor.Monitor; import org.apache.stratos.autoscaler.monitor.MonitorStatusEventBuilder; import org.apache.stratos.autoscaler.monitor.ParentComponentMonitor; +import org.apache.stratos.autoscaler.monitor.cluster.AbstractClusterMonitor; import org.apache.stratos.autoscaler.monitor.events.ApplicationStatusEvent; import org.apache.stratos.autoscaler.monitor.events.MonitorScalingEvent; import org.apache.stratos.autoscaler.monitor.events.MonitorStatusEvent; @@ -33,8 +33,8 @@ import org.apache.stratos.autoscaler.monitor.events.MonitorTerminateAllEvent; import org.apache.stratos.autoscaler.status.checker.StatusChecker; import org.apache.stratos.messaging.domain.applications.Application; import org.apache.stratos.messaging.domain.applications.ApplicationStatus; -import org.apache.stratos.messaging.domain.topology.ClusterStatus; import org.apache.stratos.messaging.domain.applications.GroupStatus; +import org.apache.stratos.messaging.domain.topology.ClusterStatus; import org.apache.stratos.messaging.domain.topology.lifecycle.LifeCycleState; import java.util.Collection; @@ -107,9 +107,11 @@ public class ApplicationMonitor extends ParentComponentMonitor { */ public Monitor findGroupMonitorWithId(String groupId) { Monitor monitor; - monitor = findGroupMonitor(groupId, aliasToActiveMonitorsMap.values()); + //searching within active monitors + monitor = findGroupMonitor(groupId, aliasToActiveMonitorsMap.values(), true); if (monitor == null) { - monitor = findGroupMonitor(groupId, aliasToInactiveMonitorsMap.values()); + //searching within inActive monitors + monitor = findGroupMonitor(groupId, aliasToInactiveMonitorsMap.values(), false); } return monitor; } @@ -122,15 +124,18 @@ public class ApplicationMonitor extends ParentComponentMonitor { * @param monitors the group monitors found in the app monitor * @return the found GroupMonitor */ - private Monitor findGroupMonitor(String id, Collection<Monitor> monitors) { + private Monitor findGroupMonitor(String id, Collection<Monitor> monitors, boolean active) { for (Monitor monitor : monitors) { // check if alias is equal, if so, return if (monitor.getId().equals(id)) { return monitor; } else { // check if this Group has nested sub Groups. If so, traverse them as well - if (monitor.getAliasToActiveMonitorsMap() != null) { - return findGroupMonitor(id, monitor.getAliasToActiveMonitorsMap().values()); + if (monitor.getAliasToActiveMonitorsMap() != null && active) { + return findGroupMonitor(id, monitor.getAliasToActiveMonitorsMap().values(), active); + } else if (monitor.getAliasToInActiveMonitorsMap() != null && !active) { + return findGroupMonitor(id, monitor.getAliasToInActiveMonitorsMap().values(), active); + } } } @@ -166,6 +171,15 @@ public class ApplicationMonitor extends ParentComponentMonitor { //mark the child monitor as inActive in the map this.markMonitorAsInactive(id); + } else if (status1 == ClusterStatus.Created || status1 == GroupStatus.Created) { + if (this.aliasToInactiveMonitorsMap.containsKey(id)) { + this.aliasToInactiveMonitorsMap.remove(id); + } + if (this.status == ApplicationStatus.Terminating) { + StatusChecker.getInstance().onChildStatusChange(id, this.id, this.appId); + } else { + onChildTerminatedEvent(id); + } } else if (status1 == ClusterStatus.Terminated || status1 == GroupStatus.Terminated) { //Check whether all dependent goes Terminated and then start them in parallel. if(this.aliasToInactiveMonitorsMap.containsKey(id)) { http://git-wip-us.apache.org/repos/asf/stratos/blob/0e2e7040/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/AbstractClusterMonitor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/AbstractClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/AbstractClusterMonitor.java index 48db321..1dd68ac 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/AbstractClusterMonitor.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/AbstractClusterMonitor.java @@ -235,11 +235,11 @@ public abstract class AbstractClusterMonitor extends Monitor implements Runnable log.info("[Cluster] " + clusterId + "is not notifying the parent, " + "since it is identified as the independent unit"); - } else if (status == ClusterStatus.Terminating) { + /*} else if (status == ClusterStatus.Terminating) { // notify parent log.info("[Cluster] " + clusterId + " is not notifying the parent, " + "since it is in Terminating State"); - +*/ } else { MonitorStatusEventBuilder.handleClusterStatusEvent(this.parent, this.status, this.clusterId); } http://git-wip-us.apache.org/repos/asf/stratos/blob/0e2e7040/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/group/GroupMonitor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/group/GroupMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/group/GroupMonitor.java index 8f355af..b39be0a 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/group/GroupMonitor.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/group/GroupMonitor.java @@ -160,17 +160,11 @@ public class GroupMonitor extends ParentComponentMonitor implements EventHandler if (status == GroupStatus.Inactive && !this.hasDependent) { log.info("[Group] " + this.id + "is not notifying the parent, " + "since it is identified as the independent unit"); - - /*} else if (status == GroupStatus.Terminating) { - log.info("[Group] " + this.id + " is not notifying the parent, " + - "since it is in Terminating State"); -*/ } else { // notify parent log.info("[Group] " + this.id + "is notifying the [parent] " + this.parent.getId()); MonitorStatusEventBuilder.handleGroupStatusEvent(this.parent, this.status, this.id); } - //} //notify the children about the state change MonitorStatusEventBuilder.notifyChildren(this, new GroupStatusEvent(status, getId())); }
