support group/cluster created upon termination of all members when the application is not in Terminating
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/38221dbd Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/38221dbd Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/38221dbd Branch: refs/heads/docker-grouping-merge Commit: 38221dbd73ba241a22e49c85dca00763bd6ee0af Parents: 65d96bc Author: reka <[email protected]> Authored: Thu Oct 30 18:17:58 2014 +0530 Committer: reka <[email protected]> Committed: Thu Oct 30 18:17:58 2014 +0530 ---------------------------------------------------------------------- .../grouping/topic/StatusEventPublisher.java | 36 +++- .../status/checker/StatusChecker.java | 179 ++++++++++--------- 2 files changed, 125 insertions(+), 90 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/38221dbd/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/topic/StatusEventPublisher.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/topic/StatusEventPublisher.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/topic/StatusEventPublisher.java index 8058c85..9b39a52 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/topic/StatusEventPublisher.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/topic/StatusEventPublisher.java @@ -24,17 +24,17 @@ public class StatusEventPublisher { Service service = TopologyManager.getTopology().getService(serviceName); if (service != null) { Cluster cluster = service.getCluster(clusterId); - if (cluster.isStateTransitionValid(ClusterStatus.Active)) { + if (cluster.isStateTransitionValid(ClusterStatus.Created)) { if (log.isInfoEnabled()) { - log.info("Publishing Cluster activated event for [application]: " + appId + + log.info("Publishing Cluster created event for [application]: " + appId + " [cluster]: " + clusterId); } - AppStatusClusterActivatedEvent clusterActivatedEvent = - new AppStatusClusterActivatedEvent(appId, serviceName, clusterId); + AppStatusClusterCreatedEvent clusterCreatedEvent = + new AppStatusClusterCreatedEvent(appId, serviceName, clusterId); - publishEvent(clusterActivatedEvent); + publishEvent(clusterCreatedEvent); } else { - log.warn("Active is not in the possible state list of [cluster] " + clusterId); + log.warn("Created is not in the possible state list of [cluster] " + clusterId); } } } finally { @@ -143,6 +143,30 @@ public class StatusEventPublisher { } } + public static void sendGroupCreatedEvent(String appId, String groupId) { + try { + TopologyManager.acquireReadLockForApplication(appId); + Application application = TopologyManager.getTopology().getApplication(appId); + if (application != null) { + Group group = application.getGroupRecursively(groupId); + if (group.isStateTransitionValid(GroupStatus.Created)) { + if (log.isInfoEnabled()) { + log.info("Publishing Group created event for [application]: " + appId + + " [group]: " + groupId); + } + AppStatusGroupCreatedEvent groupCreatedEvent = + new AppStatusGroupCreatedEvent(appId, groupId); + + publishEvent(groupCreatedEvent); + } else { + log.warn("Created is not in the possible state list of [group] " + groupId); + } + } + } finally { + TopologyManager.releaseReadLockForApplication(appId); + } + } + public static void sendGroupActivatedEvent(String appId, String groupId) { try { TopologyManager.acquireReadLockForApplication(appId); http://git-wip-us.apache.org/repos/asf/stratos/blob/38221dbd/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/StatusChecker.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/StatusChecker.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/StatusChecker.java index 97f6476..348537e 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/StatusChecker.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/StatusChecker.java @@ -98,18 +98,18 @@ public class StatusChecker { TopologyManager.acquireReadLockForApplication(appId); Application application = TopologyManager.getTopology().getApplication(appId); - if (!clusterMonitorHasMembers && cluster.getStatus() == ClusterStatus.Terminating) { - if(application.getStatus() == ApplicationStatus.Terminating) { - StatusEventPublisher.sendClusterTerminatedEvent(appId, monitor.getServiceId(), - monitor.getClusterId()); - } else { - StatusEventPublisher.sendClusterCreatedEvent(appId, monitor.getServiceId(), - monitor.getClusterId()); - } + if (!clusterMonitorHasMembers && cluster.getStatus() == ClusterStatus.Terminating) { + if (application.getStatus() == ApplicationStatus.Terminating) { + StatusEventPublisher.sendClusterTerminatedEvent(appId, monitor.getServiceId(), + monitor.getClusterId()); + } else { + StatusEventPublisher.sendClusterCreatedEvent(appId, monitor.getServiceId(), + monitor.getClusterId()); + } - } else { - log.info("Cluster has non terminated [members] and in the [status] " - + cluster.getStatus().toString()); + } else { + log.info("Cluster has non terminated [members] and in the [status] " + + cluster.getStatus().toString()); /*if(!clusterActive && !(cluster.getStatus() == ClusterStatus.Inactive || cluster.getStatus() == ClusterStatus.Terminating)) { @@ -118,7 +118,7 @@ public class StatusChecker { monitor.getServiceId(), clusterId); }*/ - } + } } finally { TopologyManager.releaseReadLockForApplication(appId); } @@ -182,7 +182,7 @@ public class StatusChecker { String appId = monitor.getAppId(); if (clusterInActive) { //if the monitor is dependent, temporarily pausing it - if(monitor.isDependent()) { + if (monitor.isDependent()) { monitor.setHasFaultyMember(true); } //send cluster In-Active event to cluster status topic @@ -201,7 +201,7 @@ public class StatusChecker { groupThread.start(); } - private boolean getClusterInActive(AbstractClusterMonitor monitor, String partitionId) { + private boolean getClusterInActive(AbstractClusterMonitor monitor, String partitionId) { boolean clusterInActive = false; for (NetworkPartitionContext networkPartitionContext : monitor.getNetworkPartitionCtxts().values()) { for (PartitionContext partition : networkPartitionContext.getPartitionCtxts().values()) { @@ -267,10 +267,6 @@ public class StatusChecker { */ private boolean updateChildStatus(String appId, String id, Map<String, Group> groups, Map<String, ClusterDataHolder> clusterData, ParentComponent parent) { - boolean groupsActive = false; - boolean groupsTerminated = false; - boolean groupsInActive = false; - boolean groupsTerminating = false; ClusterStatus clusterStatus; GroupStatus groupStatus; boolean childFound = false; @@ -286,42 +282,42 @@ public class StatusChecker { childFound = true; clusterStatus = getClusterStatus(clusterData); groupStatus = getGroupStatus(groups); - - if (groups.isEmpty() && clusterStatus == ClusterStatus.Active || - clusterData.isEmpty() && groupStatus == GroupStatus.Active || - groupStatus == GroupStatus.Active && clusterStatus == ClusterStatus.Active) { - //send activation event - if (parent instanceof Application) { - //send application activated event - log.info("sending app activate: " + appId); - StatusEventPublisher.sendApplicationActivatedEvent(appId); - } else if (parent instanceof Group) { - //send activation to the parent - log.info("sending group activate: " + parent.getUniqueIdentifier()); - StatusEventPublisher.sendGroupActivatedEvent(appId, parent.getUniqueIdentifier()); - } - } else if (groups.isEmpty() && clusterStatus == ClusterStatus.Inactive || - clusterData.isEmpty() && groupStatus == GroupStatus.Inactive || - groupStatus == GroupStatus.Inactive && clusterStatus == ClusterStatus.Inactive) { - //send the in activation event - if (parent instanceof Application) { - //send application activated event - log.warn("Application can't be in in-active : " + appId); - //StatusEventPublisher.sendApplicationInactivatedEvent(appId); - } else if (parent instanceof Group) { - //send activation to the parent - log.info("sending group in-active: " + parent.getUniqueIdentifier()); - StatusEventPublisher.sendGroupInActivateEvent(appId, parent.getUniqueIdentifier()); - } - } else if (groups.isEmpty() && clusterStatus == ClusterStatus.Terminated || - clusterData.isEmpty() && groupStatus == GroupStatus.Terminated || - groupStatus == GroupStatus.Terminated && clusterStatus == ClusterStatus.Terminated) { - //send the terminated event - if (parent instanceof Application) { - //validating the life cycle - try { - TopologyManager.acquireReadLockForApplication(appId); - Application application = TopologyManager.getTopology().getApplication(appId); + try { + TopologyManager.acquireReadLockForApplication(appId); + Application application = TopologyManager.getTopology().getApplication(appId); + + if (groups.isEmpty() && clusterStatus == ClusterStatus.Active || + clusterData.isEmpty() && groupStatus == GroupStatus.Active || + groupStatus == GroupStatus.Active && clusterStatus == ClusterStatus.Active) { + //send activation event + if (parent instanceof Application) { + //send application activated event + log.info("sending app activate: " + appId); + StatusEventPublisher.sendApplicationActivatedEvent(appId); + } else if (parent instanceof Group) { + //send activation to the parent + log.info("sending group activate: " + parent.getUniqueIdentifier()); + StatusEventPublisher.sendGroupActivatedEvent(appId, parent.getUniqueIdentifier()); + } + } else if (groups.isEmpty() && clusterStatus == ClusterStatus.Inactive || + clusterData.isEmpty() && groupStatus == GroupStatus.Inactive || + groupStatus == GroupStatus.Inactive && clusterStatus == ClusterStatus.Inactive) { + //send the in activation event + if (parent instanceof Application) { + //send application activated event + log.warn("Application can't be in in-active : " + appId); + //StatusEventPublisher.sendApplicationInactivatedEvent(appId); + } else if (parent instanceof Group) { + //send activation to the parent + log.info("sending group in-active: " + parent.getUniqueIdentifier()); + StatusEventPublisher.sendGroupInActivateEvent(appId, parent.getUniqueIdentifier()); + } + } else if (groups.isEmpty() && clusterStatus == ClusterStatus.Terminated || + clusterData.isEmpty() && groupStatus == GroupStatus.Terminated || + groupStatus == GroupStatus.Terminated && clusterStatus == ClusterStatus.Terminated) { + //send the terminated event + if (parent instanceof Application) { + //validating the life cycle if (application.getStatus().equals(ApplicationStatus.Terminating)) { log.info("sending app terminated: " + appId); StatusEventPublisher.sendApplicationTerminatedEvent(appId, parent.getClusterDataRecursively()); @@ -329,33 +325,38 @@ public class StatusChecker { log.info("[Application] " + appId + " is in the [status] " + application.getStatus().toString() + ". Hence not sending terminated event"); } - - } finally { - TopologyManager.releaseReadLockForApplication(appId); + //StatusEventPublisher.sendApp(appId); + } else if (parent instanceof Group) { + //send activation to the parent + log.info("sending group created : " + parent.getUniqueIdentifier()); + StatusEventPublisher.sendGroupCreatedEvent(appId, parent.getUniqueIdentifier()); } - - //StatusEventPublisher.sendApp(appId); - } else if (parent instanceof Group) { - //send activation to the parent - log.info("sending group terminated : " + parent.getUniqueIdentifier()); - StatusEventPublisher.sendGroupTerminatedEvent(appId, parent.getUniqueIdentifier()); - } - } else if (groups.isEmpty() && clusterStatus == ClusterStatus.Terminating || - clusterData.isEmpty() && groupStatus == GroupStatus.Terminating || - groupStatus == GroupStatus.Terminating && clusterStatus == ClusterStatus.Terminating) { - //send the terminated event - if (parent instanceof Application) { - //send application activated event - log.warn("Application can't be in terminating: " + appId); - //StatusEventPublisher.sendApplicationTerminatingEvent(appId); - //StatusEventPublisher.sendApp(appId); - } else if (parent instanceof Group) { - //send activation to the parent - log.info("sending group terminating : " + parent.getUniqueIdentifier()); - StatusEventPublisher.sendGroupTerminatingEvent(appId, parent.getUniqueIdentifier()); + } else if (groups.isEmpty() && clusterStatus == ClusterStatus.Terminating || + clusterData.isEmpty() && groupStatus == GroupStatus.Terminating || + groupStatus == GroupStatus.Terminating && clusterStatus == ClusterStatus.Terminating) { + if (parent instanceof Application) { + log.info("Application can't be in terminating: " + appId); + } else if (parent instanceof Group) { + //send activation to the parent + log.info("sending group terminating : " + parent.getUniqueIdentifier()); + StatusEventPublisher.sendGroupTerminatingEvent(appId, parent.getUniqueIdentifier()); + } + } else if (groups.isEmpty() && clusterStatus == ClusterStatus.Created || + clusterData.isEmpty() && groupStatus == GroupStatus.Created || + groupStatus == GroupStatus.Created && clusterStatus == ClusterStatus.Created) { + if (parent instanceof Application) { + log.info("[Application] " + appId + "couldn't change to Created, since it is" + + "already in " + application.getStatus().toString()); + } else if (parent instanceof Group) { + //send activation to the parent + log.info("sending group created : " + parent.getUniqueIdentifier()); + StatusEventPublisher.sendGroupCreatedEvent(appId, parent.getUniqueIdentifier()); + } + } else { + log.warn("Clusters/groups not found in this [component] " + appId); } - } else { - log.warn("Clusters/groups not found in this [component] " + appId); + } finally { + TopologyManager.releaseReadLockForApplication(appId); } @@ -371,24 +372,28 @@ public class StatusChecker { GroupStatus status = null; boolean groupActive = true; boolean groupTerminated = true; + boolean groupCreated = true; for (Group group : groups.values()) { if (group.getStatus() == GroupStatus.Active) { groupActive = groupActive && true; - groupTerminated = false; + groupTerminated = false; + groupCreated = false; } else if (group.getStatus() == GroupStatus.Inactive) { status = GroupStatus.Inactive; break; } else if (group.getStatus() == GroupStatus.Terminated) { groupActive = false; + groupCreated = false; groupTerminated = groupTerminated && true; } else if (group.getStatus() == GroupStatus.Created) { groupActive = false; groupTerminated = false; - status = GroupStatus.Created; + groupCreated = groupCreated && true; } else if (group.getStatus() == GroupStatus.Terminating) { groupActive = false; groupTerminated = false; + groupCreated = false; status = GroupStatus.Terminating; } @@ -398,6 +403,8 @@ public class StatusChecker { status = GroupStatus.Active; } else if (groupTerminated) { status = GroupStatus.Terminated; + } else if(groupCreated) { + status = GroupStatus.Created; } return status; @@ -407,28 +414,30 @@ public class StatusChecker { ClusterStatus status = null; boolean clusterActive = true; boolean clusterTerminated = true; + boolean clusterCreated = true; for (Map.Entry<String, ClusterDataHolder> clusterDataHolderEntry : clusterData.entrySet()) { Service service = TopologyManager.getTopology().getService(clusterDataHolderEntry.getValue().getServiceType()); Cluster cluster = service.getCluster(clusterDataHolderEntry.getValue().getClusterId()); if (cluster.getStatus() == ClusterStatus.Active) { clusterActive = clusterActive && true; clusterTerminated = false; + clusterCreated = false; } else if (cluster.getStatus() == ClusterStatus.Inactive) { status = ClusterStatus.Inactive; - clusterActive = false; - clusterTerminated = false; break; } else if (cluster.getStatus() == ClusterStatus.Terminated) { clusterActive = false; + clusterCreated = false; clusterTerminated = clusterTerminated && true; } else if (cluster.getStatus() == ClusterStatus.Terminating) { status = ClusterStatus.Terminating; clusterActive = false; clusterTerminated = false; + clusterCreated = false; } else if (cluster.getStatus() == ClusterStatus.Created) { - status = ClusterStatus.Created; clusterActive = false; clusterTerminated = false; + clusterCreated = clusterCreated && true; } } @@ -436,6 +445,8 @@ public class StatusChecker { status = ClusterStatus.Active; } else if (clusterTerminated) { status = ClusterStatus.Terminated; + } else if(clusterCreated) { + status = ClusterStatus.Created; } return status; }
