Repository: stratos Updated Branches: refs/heads/master 3ac0be5cb -> b21f3ec93
supporting cluster Inactive with app InActive Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/e325e9ad Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/e325e9ad Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/e325e9ad Branch: refs/heads/master Commit: e325e9adda90d50a9d6780d5f4d6a4c49e0d0b43 Parents: 0b7e94e Author: reka <[email protected]> Authored: Sun Dec 7 22:06:02 2014 +0530 Committer: reka <[email protected]> Committed: Sun Dec 7 22:10:30 2014 +0530 ---------------------------------------------------------------------- .../applications/dependency/DependencyTree.java | 7 +++-- .../applications/topic/ApplicationBuilder.java | 29 ++++++++++++++++++++ .../topic/ApplicationsEventPublisher.java | 2 +- .../publisher/ClusterStatusEventPublisher.java | 4 ++- .../monitor/cluster/AbstractClusterMonitor.java | 6 ++-- .../monitor/cluster/VMClusterMonitor.java | 14 ++++++++++ .../cluster/ClusterStatusInActiveProcessor.java | 9 +----- .../cluster/ClusterStatusProcessor.java | 2 +- .../ClusterStatusTerminatedProcessor.java | 2 +- .../group/GroupStatusInActiveProcessor.java | 5 +++- 10 files changed, 62 insertions(+), 18 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/e325e9ad/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/DependencyTree.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/DependencyTree.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/DependencyTree.java index d0e35a7..8ca1733 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/DependencyTree.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/DependencyTree.java @@ -199,8 +199,6 @@ public class DependencyTree { public List<ApplicationChildContext> getTerminationDependencies(String id) { List<ApplicationChildContext> allChildrenOfAppContext = new ArrayList<ApplicationChildContext>(); ApplicationChildContext applicationContext = findApplicationContextWithIdInPrimaryTree(id); - //adding the terminated one to the list - allChildrenOfAppContext.add(applicationContext); if (getTerminationBehavior() == TerminationBehavior.TERMINATE_DEPENDENT) { //finding the ApplicationContext of the given id //finding all the children of the found application context @@ -213,6 +211,11 @@ public class DependencyTree { allChildrenOfAppContext); } + //If only particular cluster, then no need to terminated it. + if(allChildrenOfAppContext.size() > 0) { + //adding the terminated one to the list + allChildrenOfAppContext.add(applicationContext); + } //return empty for the kill-none case, what ever returns here will be killed in return allChildrenOfAppContext; } http://git-wip-us.apache.org/repos/asf/stratos/blob/e325e9ad/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 27457f4..20c92a1 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 @@ -147,6 +147,35 @@ public class ApplicationBuilder { } } + public static void handleApplicationInstanceInactivateEvent(String appId, String instanceId) { + if (log.isDebugEnabled()) { + log.debug("Handling application Inactive event: [application-id] " + appId); + } + + Applications applications = ApplicationHolder.getApplications(); + Application application = applications.getApplication(appId); + //update the status of the Group + if (application == null) { + log.warn(String.format("Application does not exist: [application-id] %s", + appId)); + return; + } + + ApplicationStatus status = ApplicationStatus.Inactive; + ApplicationInstance context = application.getInstanceContexts(instanceId); + if (context.isStateTransitionValid(status)) { + //setting the status, persist and publish + application.setStatus(status, instanceId); + updateApplicationMonitor(appId, status, instanceId); + ApplicationHolder.persistApplication(application); + ApplicationsEventPublisher.sendApplicationInstanceActivatedEvent(appId, instanceId); + } else { + log.warn(String.format("Application state transition is not valid: [application-id] %s " + + " [instance-id] %s [current-status] %s [status-requested] %s", + appId, instanceId, context.getStatus(), status)); + } + } + public static void handleApplicationUndeployed(String appId) { if (log.isDebugEnabled()) { log.debug("Handling application unDeployment for [application-id] " + appId); http://git-wip-us.apache.org/repos/asf/stratos/blob/e325e9ad/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationsEventPublisher.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationsEventPublisher.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationsEventPublisher.java index 305b4e7..4ecbbbe 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationsEventPublisher.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationsEventPublisher.java @@ -92,7 +92,7 @@ public class ApplicationsEventPublisher { public static void sendApplicationInstanceActivatedEvent(String appId, String instanceId) { if (log.isInfoEnabled()) { - log.info("Publishing Application activated event for [application]: " + appId); + log.info("Publishing Application Inactivate event for [application]: " + appId); } ApplicationInstanceActivatedEvent applicationActivatedEvent = new ApplicationInstanceActivatedEvent(appId, instanceId); http://git-wip-us.apache.org/repos/asf/stratos/blob/e325e9ad/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/publisher/ClusterStatusEventPublisher.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/publisher/ClusterStatusEventPublisher.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/publisher/ClusterStatusEventPublisher.java index ed968c5..be94547 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/publisher/ClusterStatusEventPublisher.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/publisher/ClusterStatusEventPublisher.java @@ -200,7 +200,9 @@ public class ClusterStatusEventPublisher { publishEvent(appStatusClusterTerminatedEvent); } else { - log.warn("Terminated is not in the possible state list of [cluster] " + clusterId); + log.warn("Terminated is not in the possible state list for [ClusterInstance] " + + clusterInstance.getInstanceId() + " of [cluster] " + + clusterId + " as it is current state is " + clusterInstance.getStatus()); } } } finally { http://git-wip-us.apache.org/repos/asf/stratos/blob/e325e9ad/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 edfe063..5710ef4 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 @@ -219,12 +219,12 @@ public abstract class AbstractClusterMonitor extends Monitor implements Runnable if(instance == null) { log.warn("The required cluster [instance] " + instanceId + " not found in the ClusterMonitor"); } else { - if (instance.getStatus() == ClusterStatus.Inactive && !this.hasStartupDependents) { + /*if (instance.getStatus() == ClusterStatus.Inactive && !this.hasStartupDependents) { log.info("[Cluster] " + clusterId + "is not notifying the parent, " + "since it is identified as the independent unit"); - } else { + } else {*/ MonitorStatusEventBuilder.handleClusterStatusEvent(this.parent, status, this.clusterId, instanceId); - } + //} } } http://git-wip-us.apache.org/repos/asf/stratos/blob/e325e9ad/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java index 90c12c4..9a4019c 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java @@ -286,6 +286,20 @@ public class VMClusterMonitor extends AbstractClusterMonitor { }; monitoringRunnable.run(); } + + for (final ClusterLevelPartitionContext partitionContext : instanceContext.getPartitionCtxts()) { + Runnable monitoringRunnable = new Runnable() { + @Override + public void run() { + obsoleteCheckFactHandle = AutoscalerRuleEvaluator.evaluate( + getObsoleteCheckKnowledgeSession(), obsoleteCheckFactHandle, partitionContext); + } + }; + + monitoringRunnable.run(); + + } + } } } http://git-wip-us.apache.org/repos/asf/stratos/blob/e325e9ad/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusInActiveProcessor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusInActiveProcessor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusInActiveProcessor.java index f0f2e9f..a6db835 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusInActiveProcessor.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusInActiveProcessor.java @@ -79,14 +79,7 @@ public class ClusterStatusInActiveProcessor extends ClusterStatusProcessor { //send cluster In-Active event to cluster status topic ClusterStatusEventPublisher.sendClusterInActivateEvent(monitor.getAppId(), monitor.getServiceId(), clusterId, instanceId); - } /*else { - if (log.isInfoEnabled()) { - log.info("Publishing Cluster active event for [application]: " - + monitor.getAppId() + " [cluster]: " + clusterId); - } - //ClusterStatusEventPublisher.sendClusterActivatedEvent(monitor.getAppId(), - // monitor.getServiceId(), clusterId, instanceId); - }*/ + } return clusterInActive; } http://git-wip-us.apache.org/repos/asf/stratos/blob/e325e9ad/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusProcessor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusProcessor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusProcessor.java index bc167b2..6e0e80b 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusProcessor.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusProcessor.java @@ -21,7 +21,7 @@ package org.apache.stratos.autoscaler.status.processor.cluster; import org.apache.stratos.autoscaler.status.processor.StatusProcessor; /** - * Created by reka on 11/25/14. + * This will process the cluster status upon member state changes */ public abstract class ClusterStatusProcessor extends StatusProcessor { /** http://git-wip-us.apache.org/repos/asf/stratos/blob/e325e9ad/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusTerminatedProcessor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusTerminatedProcessor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusTerminatedProcessor.java index 2c433f8..45d6c2e 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusTerminatedProcessor.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusTerminatedProcessor.java @@ -36,7 +36,7 @@ import org.apache.stratos.messaging.message.receiver.topology.TopologyManager; * Cluster terminated checking processor. */ public class ClusterStatusTerminatedProcessor extends ClusterStatusProcessor { - private static final Log log = LogFactory.getLog(ClusterStatusInActiveProcessor.class); + private static final Log log = LogFactory.getLog(ClusterStatusTerminatedProcessor.class); private ClusterStatusProcessor nextProcessor; @Override http://git-wip-us.apache.org/repos/asf/stratos/blob/e325e9ad/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusInActiveProcessor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusInActiveProcessor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusInActiveProcessor.java index e322a91..e4be4b5 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusInActiveProcessor.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusInActiveProcessor.java @@ -96,7 +96,10 @@ public class GroupStatusInActiveProcessor extends GroupStatusProcessor { //send the in activation event if (component instanceof Application) { //send application activated event - log.warn("Application can't be in in-active : " + appId); + log.warn("Sending application instance in-active for [Application] " + appId + + " [ApplicationInstance] " + instanceId); + ApplicationBuilder.handleApplicationInstanceInactivateEvent(appId, instanceId); + return true; //ApplicationBuilder.handleApp(appId); } else if (component instanceof Group) {
