Repository: stratos Updated Branches: refs/heads/master de9b62bb1 -> 159f1c766
refactoring the Applications hierarchy to contain Instance Context info. for group based scaling Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/159f1c76 Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/159f1c76 Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/159f1c76 Branch: refs/heads/master Commit: 159f1c766283b95c0e9d2a792e69e6acb5ae7570 Parents: de9b62b Author: Isuru Haththotuwa <[email protected]> Authored: Fri Nov 21 15:55:15 2014 +0530 Committer: Isuru Haththotuwa <[email protected]> Committed: Fri Nov 21 15:55:51 2014 +0530 ---------------------------------------------------------------------- .../dependency/DependencyBuilder.java | 7 ++- .../context/ApplicationChildContextFactory.java | 2 +- .../applications/topic/ApplicationBuilder.java | 61 ++++++++++---------- .../monitor/application/ApplicationMonitor.java | 2 +- .../application/ApplicationMonitorFactory.java | 4 +- .../autoscaler/monitor/group/GroupMonitor.java | 2 +- .../status/checker/StatusChecker.java | 20 +++---- .../domain/applications/Application.java | 34 +++++------ .../messaging/domain/applications/Group.java | 39 ++++++------- .../domain/applications/ParentComponent.java | 39 ++++++++----- .../context/ApplicationInstanceContext.java | 56 ++++++++++++++++++ .../context/ClusterInstanceContext.java | 33 ++++++++++- .../instance/context/GroupInstanceContext.java | 33 ++++++++++- .../instance/context/InstanceContext.java | 20 ++----- .../ApplicationActivatedMessageProcessor.java | 6 +- .../ApplicationInactivatedMessageProcessor.java | 6 +- .../ApplicationTerminatingMessageProcessor.java | 6 +- .../applications/GroupActivatedProcessor.java | 6 +- .../applications/GroupInActivateProcessor.java | 2 +- .../applications/GroupResetProcessor.java | 6 +- .../applications/GroupTerminatedProcessor.java | 6 +- .../applications/GroupTerminatingProcessor.java | 6 +- .../bean/util/converter/PojoConverter.java | 2 +- 23 files changed, 256 insertions(+), 142 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/DependencyBuilder.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/DependencyBuilder.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/DependencyBuilder.java index ef26c13..6b26247 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/DependencyBuilder.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/DependencyBuilder.java @@ -26,6 +26,7 @@ import org.apache.stratos.autoscaler.applications.dependency.context.Application import org.apache.stratos.autoscaler.exception.DependencyBuilderException; import org.apache.stratos.messaging.domain.applications.*; +import java.util.Collection; import java.util.Set; /** @@ -197,13 +198,15 @@ public class DependencyBuilder { //adding the rest of the children who are independent to the top level // as they can start in parallel. - for (Group group1 : component.getAliasToGroupMap().values()) { + Collection<Group> groups = component.getAliasToGroupMap().values(); + for (Group group1 : groups) { if (dependencyTree.findApplicationContextWithIdInPrimaryTree(group1.getAlias()) == null) { ApplicationChildContext context = ApplicationChildContextFactory.getGroupChildContext(group1.getAlias(), dependencyTree.isTerminateDependent()); dependencyTree.addPrimaryApplicationContext(context); } } - for (ClusterDataHolder dataHolder : component.getClusterDataMap().values()) { + Collection<ClusterDataHolder> clusterData = component.getClusterDataMap().values(); + for (ClusterDataHolder dataHolder : clusterData) { if (dependencyTree.findApplicationContextWithIdInPrimaryTree(dataHolder.getClusterId()) == null) { ApplicationChildContext context = ApplicationChildContextFactory.getClusterChildContext(dataHolder, dependencyTree.isTerminateDependent()); http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/context/ApplicationChildContextFactory.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/context/ApplicationChildContextFactory.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/context/ApplicationChildContextFactory.java index c08d190..679a57c 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/context/ApplicationChildContextFactory.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/context/ApplicationChildContextFactory.java @@ -53,7 +53,7 @@ public class ApplicationChildContextFactory { //getting the cluster alias id = getClusterFromStartupOrder(order); //getting the cluster-id from cluster alias - ClusterDataHolder clusterDataHolder = component.getClusterDataMap().get(id); + ClusterDataHolder clusterDataHolder = (ClusterDataHolder) component.getClusterDataMap().get(id); applicationContext = getClusterChildContext(clusterDataHolder, hasDependents); } else { http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/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 14707c8..de45f62 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 @@ -28,7 +28,6 @@ import org.apache.stratos.autoscaler.event.publisher.ClusterStatusEventPublisher import org.apache.stratos.autoscaler.monitor.application.ApplicationMonitor; import org.apache.stratos.autoscaler.monitor.group.GroupMonitor; import org.apache.stratos.messaging.domain.applications.*; -import org.apache.stratos.messaging.domain.topology.Cluster; import java.util.Collection; import java.util.Set; @@ -90,15 +89,15 @@ public class ApplicationBuilder { } ApplicationStatus status = ApplicationStatus.Active; - if (application.isStateTransitionValid(status)) { + if (application.isStateTransitionValid(status, null)) { //setting the status, persist and publish - application.setStatus(status); + application.setStatus(status, null); updateApplicationMonitor(appId, status); ApplicationHolder.persistApplication(application); 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)); + " [current-status] %s [status-requested] %s", appId, application.getStatus(null), status)); } } @@ -121,16 +120,16 @@ public class ApplicationBuilder { try { ApplicationHolder.acquireWriteLock(); ApplicationStatus status = ApplicationStatus.Terminating; - if (application.isStateTransitionValid(status)) { + if (application.isStateTransitionValid(status, null)) { //setting the status, persist and publish - application.setStatus(status); + application.setStatus(status, null); updateApplicationMonitor(appId, status); ApplicationHolder.persistApplication(application); //ApplicationsEventPublisher.sendApplicationTerminatingEvent(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)); + " [current-status] %s [status-requested] %s", appId, application.getStatus(null), status)); } } finally { ApplicationHolder.releaseWriteLock(); @@ -161,9 +160,9 @@ public class ApplicationBuilder { Set<ClusterDataHolder> clusterData = application.getClusterDataRecursively(); ApplicationStatus status = ApplicationStatus.Terminated; - if (application.isStateTransitionValid(status)) { + if (application.isStateTransitionValid(status, null)) { //setting the status, persist and publish - application.setStatus(status); + application.setStatus(status, null); updateApplicationMonitor(appId, status); //removing the monitor AutoscalerContext.getInstance().removeAppMonitor(appId); @@ -174,7 +173,7 @@ public class ApplicationBuilder { ApplicationsEventPublisher.sendApplicationTerminatedEvent(appId, clusterData); } else { log.warn(String.format("Application state transition is not valid: [application-id] %s " + - " [current-status] %s [status-requested] %s", appId, application.getStatus(), status)); + " [current-status] %s [status-requested] %s", appId, application.getStatus(null), status)); } } } @@ -196,16 +195,16 @@ public class ApplicationBuilder { Application application = applications.getApplication(applicationId); // check and update application status to 'Terminating' ApplicationStatus status = ApplicationStatus.Terminating; - if (application.isStateTransitionValid(status)) { + if (application.isStateTransitionValid(status, null)) { // for now anyway update the status forcefully //setting the status, persist and publish - application.setStatus(status); + application.setStatus(status, null); updateApplicationMonitor(applicationId, status); ApplicationHolder.persistApplication(application); ApplicationsEventPublisher.sendApplicationTerminatingEvent(applicationId); } else { log.warn(String.format("Application state transition is not valid: [application-id] %s " + - " [current-status] %s [status-requested] %s", applicationId, application.getStatus(), status)); + " [current-status] %s [status-requested] %s", applicationId, application.getStatus(null), status)); } } finally { ApplicationHolder.releaseWriteLock(); @@ -235,15 +234,15 @@ public class ApplicationBuilder { } GroupStatus status = GroupStatus.Terminated; - if (group.isStateTransitionValid(status)) { + if (group.isStateTransitionValid(status, null)) { //setting the status, persist and publish - group.setStatus(status); + group.setStatus(status, null); updateGroupMonitor(appId, groupId, status); ApplicationHolder.persistApplication(application); 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)); + " [requested-status] %s", groupId, group.getStatus(null), status)); } } @@ -271,15 +270,15 @@ public class ApplicationBuilder { } GroupStatus status = GroupStatus.Active; - if (group.isStateTransitionValid(status)) { + if (group.isStateTransitionValid(status, null)) { //setting the status, persist and publish - group.setStatus(status); + group.setStatus(status, null); updateGroupMonitor(appId, groupId, status); ApplicationHolder.persistApplication(application); 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)); + " [requested-status] %s", groupId, group.getStatus(null), status)); } } @@ -306,14 +305,14 @@ public class ApplicationBuilder { } GroupStatus status = GroupStatus.Created; - if (group.isStateTransitionValid(status)) { + if (group.isStateTransitionValid(status, null)) { //setting the status, persist and publish - group.setStatus(status); + group.setStatus(status, null); updateGroupMonitor(appId, groupId, status); ApplicationHolder.persistApplication(application); ApplicationsEventPublisher.sendGroupCreatedEvent(appId, groupId); } else { - log.warn("Group state transition is not valid: [group-id] " + groupId + " [current-state] " + group.getStatus() + log.warn("Group state transition is not valid: [group-id] " + groupId + " [current-state] " + group.getStatus(null) + "[requested-state] " + status); } } @@ -341,14 +340,14 @@ public class ApplicationBuilder { } GroupStatus status = GroupStatus.Inactive; - if (group.isStateTransitionValid(status)) { + if (group.isStateTransitionValid(status, null)) { //setting the status, persist and publish - group.setStatus(status); + group.setStatus(status, null); updateGroupMonitor(appId, groupId, status); ApplicationHolder.persistApplication(application); ApplicationsEventPublisher.sendGroupInActivateEvent(appId, groupId); } else { - log.warn("Group state transition is not valid: [group-id] " + groupId + " [current-state] " + group.getStatus() + log.warn("Group state transition is not valid: [group-id] " + groupId + " [current-state] " + group.getStatus(null) + "[requested-state] " + status); } } @@ -378,14 +377,14 @@ public class ApplicationBuilder { try { ApplicationHolder.acquireWriteLock(); GroupStatus status = GroupStatus.Terminating; - if (group.isStateTransitionValid(status)) { + if (group.isStateTransitionValid(status, null)) { //setting the status, persist and publish - group.setStatus(status); + group.setStatus(status, null); updateGroupMonitor(appId, groupId, status); ApplicationHolder.persistApplication(application); ApplicationsEventPublisher.sendGroupTerminatingEvent(appId, groupId); } else { - log.warn("Group state transition is not valid: [group-id] " + groupId + " [current-state] " + group.getStatus() + log.warn("Group state transition is not valid: [group-id] " + groupId + " [current-state] " + group.getStatus(null) + "[requested-state] " + status); } } finally { @@ -396,11 +395,11 @@ public class ApplicationBuilder { private static void updateGroupStatusesRecursively(GroupStatus groupStatus, Collection<Group> groups) { for (Group group : groups) { - if (!group.isStateTransitionValid(groupStatus)) { - log.error("Invalid state transfer from " + group.getStatus() + " to " + groupStatus); + if (!group.isStateTransitionValid(groupStatus, null)) { + log.error("Invalid state transfer from " + group.getStatus(null) + " to " + groupStatus); } // force update for now - group.setStatus(groupStatus); + group.setStatus(groupStatus, null); // go recursively and update if (group.getGroups() != null) { http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/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 f230918..a90bc12 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 @@ -49,7 +49,7 @@ public class ApplicationMonitor extends ParentComponentMonitor { super(application); //setting the appId for the application this.appId = application.getUniqueIdentifier(); - this.status = application.getStatus(); + this.status = application.getStatus(null); //starting the first set of dependencies from its children startDependency(); http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitorFactory.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitorFactory.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitorFactory.java index c7be7c9..cb8a4fa 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitorFactory.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitorFactory.java @@ -107,10 +107,10 @@ public class ApplicationMonitorFactory { } //TODO make sure when it is async - if (group.getStatus() != groupMonitor.getStatus()) { + if (group.getStatus(null) != groupMonitor.getStatus()) { //updating the status, if the group is not in created state when creating group Monitor //so that groupMonitor will notify the parent (useful when restarting stratos) - groupMonitor.setStatus(group.getStatus()); + groupMonitor.setStatus(group.getStatus(null)); } } http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/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 53d77ea..d6d293e 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 @@ -59,7 +59,7 @@ public class GroupMonitor extends ParentComponentMonitor implements EventHandler TopologyInConsistentException { super(group); this.appId = appId; - this.status = group.getStatus(); + this.status = group.getStatus(null); startDependency(); } http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/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 c1dc547..73f9b27 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 @@ -114,7 +114,7 @@ public class StatusChecker { //if all members removed from the cluster and cluster is in terminating, // either it has to be terminated or Reset if (!clusterMonitorHasMembers && cluster.getStatus() == ClusterStatus.Terminating) { - if (application.getStatus() == ApplicationStatus.Terminating) { + if (application.getStatus(null) == ApplicationStatus.Terminating) { if (log.isInfoEnabled()) { log.info("Publishing Cluster terminated event for [application]: " + appId + " [cluster]: " + clusterId); @@ -309,13 +309,13 @@ public class StatusChecker { //send activation event if (component instanceof Application) { //send application activated event - if (((Application) component).getStatus() != ApplicationStatus.Active) { + if (((Application) component).getStatus(null) != ApplicationStatus.Active) { log.info("sending app activate: " + appId); ApplicationBuilder.handleApplicationActivatedEvent(appId); } } else if (component instanceof Group) { //send activation to the parent - if (((Group) component).getStatus() != GroupStatus.Active) { + if (((Group) component).getStatus(null) != GroupStatus.Active) { log.info("sending group activate: " + component.getUniqueIdentifier()); ApplicationBuilder.handleGroupActivatedEvent(appId, component.getUniqueIdentifier()); } @@ -330,7 +330,7 @@ public class StatusChecker { ApplicationBuilder.handleApplicationTerminatedEvent(appId); } else if (component instanceof Group) { //send activation to the parent - if (((Group) component).getStatus() != GroupStatus.Terminated) { + if (((Group) component).getStatus(null) != GroupStatus.Terminated) { log.info("sending group terminated : " + component.getUniqueIdentifier()); ApplicationBuilder.handleGroupTerminatedEvent(appId, component.getUniqueIdentifier()); } @@ -341,10 +341,10 @@ public class StatusChecker { getAllGroupInSameState(groups, GroupStatus.Created)) { if (component instanceof Application) { log.info("[Application] " + appId + "couldn't change to Created, since it is" + - "already in " + ((Application) component).getStatus().toString()); + "already in " + ((Application) component).getStatus(null).toString()); } else if (component instanceof Group) { //send activation to the parent - if (((Group) component).getStatus() != GroupStatus.Created) { + if (((Group) component).getStatus(null) != GroupStatus.Created) { log.info("sending group created : " + component.getUniqueIdentifier()); ApplicationBuilder.handleGroupCreatedEvent(appId, component.getUniqueIdentifier()); } @@ -359,7 +359,7 @@ public class StatusChecker { //StatusEventPublisher.sendApplicationInactivatedEvent(appId); } else if (component instanceof Group) { //send activation to the parent - if (((Group) component).getStatus() != GroupStatus.Inactive) { + if (((Group) component).getStatus(null) != GroupStatus.Inactive) { log.info("sending group in-active: " + component.getUniqueIdentifier()); ApplicationBuilder.handleGroupInActivateEvent(appId, component.getUniqueIdentifier()); } @@ -371,7 +371,7 @@ public class StatusChecker { //StatusEventPublisher.sendApplicationInactivatedEvent(appId); } else if (component instanceof Group) { //send activation to the parent - if (((Group) component).getStatus() != GroupStatus.Inactive) { + if (((Group) component).getStatus(null) != GroupStatus.Inactive) { log.info("sending group in-active: " + component.getUniqueIdentifier()); ApplicationBuilder.handleGroupInActivateEvent(appId, component.getUniqueIdentifier()); } @@ -392,7 +392,7 @@ public class StatusChecker { private boolean getAllGroupInActive(Map<String, Group> groups) { boolean groupStat = false; for (Group group : groups.values()) { - if (group.getStatus() == GroupStatus.Inactive) { + if (group.getStatus(null) == GroupStatus.Inactive) { groupStat = true; return groupStat; } else { @@ -412,7 +412,7 @@ public class StatusChecker { private boolean getAllGroupInSameState(Map<String, Group> groups, GroupStatus status) { boolean groupStat = false; for (Group group : groups.values()) { - if (group.getStatus() == status) { + if (group.getStatus(null) == status) { groupStat = true; } else { groupStat = false; http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Application.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Application.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Application.java index 4bfa559..1579bc1 100644 --- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Application.java +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Application.java @@ -19,9 +19,10 @@ package org.apache.stratos.messaging.domain.applications; +import org.apache.axis2.extensions.spring.receivers.ApplicationContextHolder; import org.apache.commons.lang3.RandomStringUtils; -import org.apache.stratos.messaging.domain.topology.LifeCycleStateTransitionBehavior; -import org.apache.stratos.messaging.domain.topology.lifecycle.LifeCycleStateManager; +import org.apache.stratos.messaging.domain.applications.scaling.instance.context.ApplicationInstanceContext; +import org.apache.stratos.messaging.domain.applications.scaling.instance.context.InstanceContext; import java.util.*; @@ -29,7 +30,7 @@ import java.util.*; * Represents an Application in the Topology */ -public class Application extends ParentComponent implements LifeCycleStateTransitionBehavior<ApplicationStatus> { +public class Application extends ParentComponent<ApplicationInstanceContext> { private static final long serialVersionUID = -5092959597171649688L; // Unique id for the Application, defined in Application Definition @@ -43,14 +44,15 @@ public class Application extends ParentComponent implements LifeCycleStateTransi // tenant admin user private String tenantAdminUserName; // Life cycle state manager - protected LifeCycleStateManager<ApplicationStatus> applicationStateManager; + //protected LifeCycleStateManager<ApplicationStatus> applicationStateManager; public Application (String id) { super(); this.id = id; this.key = RandomStringUtils.randomAlphanumeric(16); - this.applicationStateManager = - new LifeCycleStateManager<ApplicationStatus>(ApplicationStatus.Created, id); + this.instanceIdToInstanceContextMap = new HashMap<String, ApplicationInstanceContext>(); + //this.applicationStateManager = + //new LifeCycleStateManager<ApplicationStatus>(ApplicationStatus.Created, id); } public String getUniqueIdentifier() { @@ -85,24 +87,20 @@ public class Application extends ParentComponent implements LifeCycleStateTransi this.tenantAdminUserName = tenantAdminUserName; } - @Override - public boolean isStateTransitionValid(ApplicationStatus newState) { - return this.applicationStateManager.isStateTransitionValid(newState); + public boolean isStateTransitionValid(ApplicationStatus newState, String applicationInstancetId) { + return this.instanceIdToInstanceContextMap.get(applicationInstancetId).isStateTransitionValid(newState); } - @Override - public Stack<ApplicationStatus> getTransitionedStates() { - return this.applicationStateManager.getStateStack(); + public Stack<ApplicationStatus> getTransitionedStates(String applicationInstancetId) { + return this.instanceIdToInstanceContextMap.get(applicationInstancetId).getTransitionedStates(); } - @Override - public ApplicationStatus getStatus() { - return this.applicationStateManager.getCurrentState(); + public ApplicationStatus getStatus(String applicationInstanceId) { + return this.instanceIdToInstanceContextMap.get(applicationInstanceId).getStatus(); } - @Override - public boolean setStatus(ApplicationStatus newState) { - return this.applicationStateManager.changeState(newState); + public boolean setStatus(ApplicationStatus newState, String applicationInstanceId) { + return this.instanceIdToInstanceContextMap.get(applicationInstanceId).setStatus(newState); } public boolean equals(Object other) { http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Group.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Group.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Group.java index adaed23..6990572 100644 --- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Group.java +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Group.java @@ -19,18 +19,16 @@ package org.apache.stratos.messaging.domain.applications; -import org.apache.stratos.messaging.domain.topology.LifeCycleStateTransitionBehavior; -import org.apache.stratos.messaging.domain.topology.lifecycle.LifeCycleStateManager; +import org.apache.stratos.messaging.domain.applications.scaling.instance.context.ApplicationInstanceContext; +import org.apache.stratos.messaging.domain.applications.scaling.instance.context.GroupInstanceContext; -import java.util.HashMap; -import java.util.Map; -import java.util.Stack; +import java.util.*; /** * Represents a Group/nested Group in an Application/Group */ -public class Group extends ParentComponent implements LifeCycleStateTransitionBehavior<GroupStatus> { +public class Group extends ParentComponent<GroupInstanceContext> { private static final long serialVersionUID = 8347096598203655846L; // Name of the Group, specified in Group Definition @@ -45,8 +43,10 @@ public class Group extends ParentComponent implements LifeCycleStateTransitionBe private String applicationId; // flag for Group level scaling private boolean isGroupScalingEnabled; + // Group/Cluster Instance Context map, key = instance id +// private final Map<String, Set<InstanceContext>> instanceIdToInstanceContextMap; // Life cycle state manager - protected LifeCycleStateManager<GroupStatus> groupStateManager; + //protected LifeCycleStateManager<GroupStatus> groupStateManager; public Group (String applicationId, String name, String alias) { super(); @@ -54,7 +54,9 @@ public class Group extends ParentComponent implements LifeCycleStateTransitionBe this.name = name; this.alias = alias; this.isGroupScalingEnabled = false; - this.groupStateManager = new LifeCycleStateManager<GroupStatus>(GroupStatus.Created, alias); + this.instanceIdToInstanceContextMap = new HashMap<String, GroupInstanceContext>(); + //instanceIdToInstanceContextMap = new HashMap<String, Set<InstanceContext>>(); + //this.groupStateManager = new LifeCycleStateManager<GroupStatus>(GroupStatus.Created, alias); } public String getUniqueIdentifier() { @@ -81,24 +83,20 @@ public class Group extends ParentComponent implements LifeCycleStateTransitionBe this.autoscalingPolicy = autoscalingPolicy; } - @Override - public boolean isStateTransitionValid(GroupStatus newState) { - return groupStateManager.isStateTransitionValid(newState); + public boolean isStateTransitionValid(GroupStatus newState, String groupInstanceId) { + return instanceIdToInstanceContextMap.get(groupInstanceId).isStateTransitionValid(newState); } - @Override - public Stack<GroupStatus> getTransitionedStates() { - return groupStateManager.getStateStack(); + public Stack<GroupStatus> getTransitionedStates(String groupInstanceId) { + return instanceIdToInstanceContextMap.get(groupInstanceId).getTransitionedStates(); } - @Override - public GroupStatus getStatus() { - return groupStateManager.getCurrentState(); + public GroupStatus getStatus(String groupInstanceId) { + return instanceIdToInstanceContextMap.get(groupInstanceId).getStatus(); } - @Override - public boolean setStatus(GroupStatus newState) { - return this.groupStateManager.changeState(newState); + public boolean setStatus(GroupStatus newState, String groupInstanceId) { + return this.instanceIdToInstanceContextMap.get(groupInstanceId).setStatus(newState); } public boolean equals(Object other) { @@ -129,4 +127,5 @@ public class Group extends ParentComponent implements LifeCycleStateTransitionBe public void setGroupScalingEnabled(boolean isGroupScalingEnabled) { this.isGroupScalingEnabled = isGroupScalingEnabled; } + } http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java index ce3dd56..2b3b64f 100644 --- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java @@ -19,6 +19,8 @@ package org.apache.stratos.messaging.domain.applications; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.apache.stratos.messaging.domain.applications.scaling.instance.context.InstanceContext; import java.io.Serializable; @@ -29,7 +31,9 @@ import java.util.*; * in an Application within the Topology */ -public abstract class ParentComponent implements Serializable { +public abstract class ParentComponent<T extends InstanceContext> implements Serializable { + + private static final Log log = LogFactory.getLog(ParentComponent.class); // Dependency Order private DependencyOrder dependencyOrder; @@ -38,12 +42,11 @@ public abstract class ParentComponent implements Serializable { // Cluster Id map, key = subscription alias for the cartridge type private final Map<String, ClusterDataHolder> aliasToClusterDataMap; // Group/Cluster Instance Context map, key = instance id - private final Map<String, Set<InstanceContext>> instanceIdToInstanceContextMap; + protected Map<String, T> instanceIdToInstanceContextMap; public ParentComponent () { aliasToGroupMap = new HashMap<String, Group>(); aliasToClusterDataMap = new HashMap<String, ClusterDataHolder>(); - instanceIdToInstanceContextMap = new HashMap<String, Set<InstanceContext>>(); } /** @@ -208,29 +211,35 @@ public abstract class ParentComponent implements Serializable { * @param instanceId instance id of child * @param instanceContext InstanceContext object */ - public void addInstanceContext (String instanceId, InstanceContext instanceContext) { + public void addInstanceContext (String instanceId, T instanceContext) { - // check if there is an existing entry of the instance id synchronized (instanceIdToInstanceContextMap) { - Set<InstanceContext> instanceContexts = instanceIdToInstanceContextMap.get(instanceId); - if (instanceContexts == null) { - // create a new HashSet which includes the given InstanceContext element - instanceIdToInstanceContextMap.put(instanceId, - new HashSet<InstanceContext>(Arrays.asList(instanceContext))); + if (instanceIdToInstanceContextMap.get(instanceId) != null) { + if (log.isDebugEnabled()) { + log.debug("InstanceContext for instance id " + instanceId + " already exists"); + } } else { - // entry exists, update - instanceContexts.add(instanceContext); + instanceIdToInstanceContextMap.put(instanceId, instanceContext); } } } /** - * Retrieves InstanceContext set for the given instance id + * Retrieves InstanceContext obj. for the given instance id * * @param instanceId instance id - * @return Set of InstanceContext objects if exists, else null + * @return InstanceContext obj. if exists, else null */ - public Set<InstanceContext> getInstanceContexts (String instanceId) { + public T getInstanceContexts (String instanceId) { + // if map is empty, return null + if (instanceIdToInstanceContextMap.isEmpty()) { + return null; + } + + // if instanceId is null, just get the first InstanceContext + if (instanceId == null) { + return instanceIdToInstanceContextMap.entrySet().iterator().next().getValue(); + } return instanceIdToInstanceContextMap.get(instanceId); } http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/scaling/instance/context/ApplicationInstanceContext.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/scaling/instance/context/ApplicationInstanceContext.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/scaling/instance/context/ApplicationInstanceContext.java new file mode 100644 index 0000000..266b698 --- /dev/null +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/scaling/instance/context/ApplicationInstanceContext.java @@ -0,0 +1,56 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.stratos.messaging.domain.applications.scaling.instance.context; + +import org.apache.stratos.messaging.domain.applications.ApplicationStatus; +import org.apache.stratos.messaging.domain.topology.LifeCycleStateTransitionBehavior; +import org.apache.stratos.messaging.domain.topology.lifecycle.LifeCycleStateManager; + +import java.util.Stack; + +public class ApplicationInstanceContext extends InstanceContext implements LifeCycleStateTransitionBehavior<ApplicationStatus> { + + // Life cycle state manager + protected LifeCycleStateManager<ApplicationStatus> lifeCycleStateManager; + + public ApplicationInstanceContext(String alias, String instanceId) { + super(alias, instanceId); + } + + @Override + public boolean isStateTransitionValid(ApplicationStatus newState) { + return lifeCycleStateManager.isStateTransitionValid(newState); + } + + @Override + public Stack<ApplicationStatus> getTransitionedStates() { + return lifeCycleStateManager.getStateStack(); + } + + @Override + public ApplicationStatus getStatus() { + return lifeCycleStateManager.getCurrentState(); + } + + @Override + public boolean setStatus(ApplicationStatus newState) { + return this.lifeCycleStateManager.changeState(newState); + } +} http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/scaling/instance/context/ClusterInstanceContext.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/scaling/instance/context/ClusterInstanceContext.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/scaling/instance/context/ClusterInstanceContext.java index 8dca37a..dcaa201 100644 --- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/scaling/instance/context/ClusterInstanceContext.java +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/scaling/instance/context/ClusterInstanceContext.java @@ -19,9 +19,40 @@ package org.apache.stratos.messaging.domain.applications.scaling.instance.context; -public class ClusterInstanceContext extends InstanceContext { +import org.apache.stratos.messaging.domain.topology.ClusterStatus; +import org.apache.stratos.messaging.domain.topology.LifeCycleStateTransitionBehavior; +import org.apache.stratos.messaging.domain.topology.lifecycle.LifeCycleStateManager; + +import java.util.Stack; + +public class ClusterInstanceContext extends InstanceContext implements LifeCycleStateTransitionBehavior<ClusterStatus> { + + // Life cycle state manager + protected LifeCycleStateManager<ClusterStatus> lifeCycleStateManager; public ClusterInstanceContext(String alias, String instanceId) { super(alias, instanceId); + this.lifeCycleStateManager = new LifeCycleStateManager<ClusterStatus>(ClusterStatus.Created, + alias + "_" + instanceId); + } + + @Override + public boolean isStateTransitionValid(ClusterStatus newState) { + return lifeCycleStateManager.isStateTransitionValid(newState); + } + + @Override + public Stack<ClusterStatus> getTransitionedStates() { + return lifeCycleStateManager.getStateStack(); + } + + @Override + public ClusterStatus getStatus() { + return lifeCycleStateManager.getCurrentState(); + } + + @Override + public boolean setStatus(ClusterStatus newState) { + return this.lifeCycleStateManager.changeState(newState); } } http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/scaling/instance/context/GroupInstanceContext.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/scaling/instance/context/GroupInstanceContext.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/scaling/instance/context/GroupInstanceContext.java index b567353..7a99be5 100644 --- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/scaling/instance/context/GroupInstanceContext.java +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/scaling/instance/context/GroupInstanceContext.java @@ -19,9 +19,40 @@ package org.apache.stratos.messaging.domain.applications.scaling.instance.context; -public class GroupInstanceContext extends InstanceContext { +import org.apache.stratos.messaging.domain.applications.GroupStatus; +import org.apache.stratos.messaging.domain.topology.LifeCycleStateTransitionBehavior; +import org.apache.stratos.messaging.domain.topology.lifecycle.LifeCycleStateManager; + +import java.util.Stack; + +public class GroupInstanceContext extends InstanceContext implements LifeCycleStateTransitionBehavior<GroupStatus> { + + // Life cycle state manager + protected LifeCycleStateManager<GroupStatus> lifeCycleStateManager; public GroupInstanceContext(String alias, String instanceId) { super(alias, instanceId); + this.lifeCycleStateManager = new LifeCycleStateManager<GroupStatus>(GroupStatus.Created, + alias + "_" + instanceId); + } + + @Override + public boolean isStateTransitionValid(GroupStatus newState) { + return lifeCycleStateManager.isStateTransitionValid(newState); + } + + @Override + public Stack<GroupStatus> getTransitionedStates() { + return lifeCycleStateManager.getStateStack(); + } + + @Override + public GroupStatus getStatus() { + return lifeCycleStateManager.getCurrentState(); + } + + @Override + public boolean setStatus(GroupStatus newState) { + return this.lifeCycleStateManager.changeState(newState); } } http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/scaling/instance/context/InstanceContext.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/scaling/instance/context/InstanceContext.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/scaling/instance/context/InstanceContext.java index b66f1d7..eba15c1 100644 --- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/scaling/instance/context/InstanceContext.java +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/scaling/instance/context/InstanceContext.java @@ -19,21 +19,17 @@ package org.apache.stratos.messaging.domain.applications.scaling.instance.context; -import org.apache.stratos.messaging.domain.topology.lifecycle.LifeCycleState; - import java.io.Serializable; import java.util.Properties; public abstract class InstanceContext implements Serializable { - // current state - private LifeCycleState state; // group/cluster level alias - private String alias; - - private String instanceId; + protected String alias; + // instance id + protected String instanceId; - private Properties instanceProperties; + protected Properties instanceProperties; public InstanceContext (String alias, String instanceId) { this.alias = alias; @@ -41,14 +37,6 @@ public abstract class InstanceContext implements Serializable { this.instanceProperties = new Properties(); } - public LifeCycleState getState() { - return state; - } - - public void setState(LifeCycleState state) { - this.state = state; - } - public void addProperty (String name, String value) { instanceProperties.put(name, value); } http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationActivatedMessageProcessor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationActivatedMessageProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationActivatedMessageProcessor.java index 7dc0f4c..94d1642 100644 --- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationActivatedMessageProcessor.java +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationActivatedMessageProcessor.java @@ -88,11 +88,11 @@ public class ApplicationActivatedMessageProcessor extends MessageProcessor { return false; } else { // Apply changes to the applications - if (!application.isStateTransitionValid(ApplicationStatus.Active)) { - log.error("Invalid State transfer from [ " + application.getStatus() + + if (!application.isStateTransitionValid(ApplicationStatus.Active, null)) { + log.error("Invalid State transfer from [ " + application.getStatus(null) + " ] to [ " + ApplicationStatus.Active + " ]"); } - application.setStatus(ApplicationStatus.Active); + application.setStatus(ApplicationStatus.Active, null); } http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationInactivatedMessageProcessor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationInactivatedMessageProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationInactivatedMessageProcessor.java index 3fb77ec..d5e6672 100644 --- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationInactivatedMessageProcessor.java +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationInactivatedMessageProcessor.java @@ -88,11 +88,11 @@ public class ApplicationInactivatedMessageProcessor extends MessageProcessor { return false; } else { // Apply changes to the applications - if (!application.isStateTransitionValid(ApplicationStatus.Inactive)) { - log.error("Invalid State transfer from [ " + application.getStatus() + + if (!application.isStateTransitionValid(ApplicationStatus.Inactive, null)) { + log.error("Invalid State transfer from [ " + application.getStatus(null) + " ] to [ " + ApplicationStatus.Inactive + " ]"); } - application.setStatus(ApplicationStatus.Inactive); + application.setStatus(ApplicationStatus.Inactive, null); } http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationTerminatingMessageProcessor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationTerminatingMessageProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationTerminatingMessageProcessor.java index 2161214..f517f2e 100644 --- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationTerminatingMessageProcessor.java +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationTerminatingMessageProcessor.java @@ -88,11 +88,11 @@ public class ApplicationTerminatingMessageProcessor extends MessageProcessor { return false; } else { // Apply changes to the applications - if (!application.isStateTransitionValid(ApplicationStatus.Terminating)) { - log.error("Invalid State transfer from [ " + application.getStatus() + + if (!application.isStateTransitionValid(ApplicationStatus.Terminating, null)) { + log.error("Invalid State transfer from [ " + application.getStatus(null) + " ] to [ " + ApplicationStatus.Terminating + " ]"); } - application.setStatus(ApplicationStatus.Terminating); + application.setStatus(ApplicationStatus.Terminating, null); } http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupActivatedProcessor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupActivatedProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupActivatedProcessor.java index add943a..9b2f380 100644 --- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupActivatedProcessor.java +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupActivatedProcessor.java @@ -93,10 +93,10 @@ public class GroupActivatedProcessor extends MessageProcessor { } } else { // Apply changes to the topology - if (!group.isStateTransitionValid(GroupStatus.Active)) { - log.error("Invalid State Transition from " + group.getStatus() + " to " + GroupStatus.Active); + if (!group.isStateTransitionValid(GroupStatus.Active, null)) { + log.error("Invalid State Transition from " + group.getStatus(null) + " to " + GroupStatus.Active); } - group.setStatus(GroupStatus.Active); + group.setStatus(GroupStatus.Active, null); } http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupInActivateProcessor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupInActivateProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupInActivateProcessor.java index 8800608..ae27d7d 100644 --- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupInActivateProcessor.java +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupInActivateProcessor.java @@ -92,7 +92,7 @@ public class GroupInActivateProcessor extends MessageProcessor { event.getGroupId())); } } else { - group.setStatus(GroupStatus.Inactive); + group.setStatus(GroupStatus.Inactive, null); if (log.isInfoEnabled()) { log.info(String.format("Group updated as in-activated : %s", group.getUniqueIdentifier())); http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupResetProcessor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupResetProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupResetProcessor.java index 5c50e0b..e7e951c 100644 --- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupResetProcessor.java +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupResetProcessor.java @@ -93,11 +93,11 @@ public class GroupResetProcessor extends MessageProcessor { } } else { // Apply changes to the applications - if (!group.isStateTransitionValid(GroupStatus.Created)) { - log.error("Invalid State Transition from " + group.getStatus() + " to " + GroupStatus.Created + " " + + if (!group.isStateTransitionValid(GroupStatus.Created, null)) { + log.error("Invalid State Transition from " + group.getStatus(null) + " to " + GroupStatus.Created + " " + "for Group " + group.getAlias()); } - group.setStatus(GroupStatus.Created); + group.setStatus(GroupStatus.Created, null); } http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupTerminatedProcessor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupTerminatedProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupTerminatedProcessor.java index 4dc8876..19ffbec 100644 --- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupTerminatedProcessor.java +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupTerminatedProcessor.java @@ -93,10 +93,10 @@ public class GroupTerminatedProcessor extends MessageProcessor { } } else { // Apply changes to the applications - if (!group.isStateTransitionValid(GroupStatus.Terminated)) { - log.error("Invalid State Transition from " + group.getStatus() + " to " + GroupStatus.Terminated); + if (!group.isStateTransitionValid(GroupStatus.Terminated, null)) { + log.error("Invalid State Transition from " + group.getStatus(null) + " to " + GroupStatus.Terminated); } - group.setStatus(GroupStatus.Terminated); + group.setStatus(GroupStatus.Terminated, null); } http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupTerminatingProcessor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupTerminatingProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupTerminatingProcessor.java index 2123f77..82d5716 100644 --- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupTerminatingProcessor.java +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupTerminatingProcessor.java @@ -93,10 +93,10 @@ public class GroupTerminatingProcessor extends MessageProcessor { } } else { // Apply changes to the applications - if (!group.isStateTransitionValid(GroupStatus.Terminating)) { - log.error("Invalid State Transition from " + group.getStatus() + " to " + GroupStatus.Active); + if (!group.isStateTransitionValid(GroupStatus.Terminating, null)) { + log.error("Invalid State Transition from " + group.getStatus(null) + " to " + GroupStatus.Active); } - group.setStatus(GroupStatus.Terminating); + group.setStatus(GroupStatus.Terminating, null); } http://git-wip-us.apache.org/repos/asf/stratos/blob/159f1c76/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java index bd9a025..775f431 100644 --- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java +++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java @@ -1055,7 +1055,7 @@ public class PojoConverter { } GroupBean groupBean = new GroupBean(); - groupBean.setStatus(group.getStatus().toString()); + groupBean.setStatus(group.getStatus(null).toString()); groupBean.setAlias(group.getUniqueIdentifier()); groupBean.setDeploymentPolicy(group.getDeploymentPolicy()); groupBean.setAutoScalingPolicy(group.getAutoscalingPolicy());
