fixing undeployment issue by removing the instances
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/196336cb Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/196336cb Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/196336cb Branch: refs/heads/4.1.0-test Commit: 196336cbee7254f65b2c6ae1a1b0f900f4f18b17 Parents: dc5ae90 Author: reka <[email protected]> Authored: Thu Dec 11 14:19:04 2014 +0530 Committer: reka <[email protected]> Committed: Thu Dec 11 19:24:11 2014 +0530 ---------------------------------------------------------------------- .../applications/topic/ApplicationBuilder.java | 2 +- .../topic/ApplicationsEventPublisher.java | 4 +- .../partition/ClusterLevelPartitionContext.java | 9 +++++ .../AutoscalerTopologyEventReceiver.java | 1 + .../monitor/cluster/VMClusterMonitor.java | 20 ++++++---- .../monitor/component/ApplicationMonitor.java | 2 +- .../monitor/component/GroupMonitor.java | 27 ++++++++----- .../group/GroupStatusActiveProcessor.java | 36 ++++++++---------- .../group/GroupStatusTerminatedProcessor.java | 33 ++++++++-------- .../group/GroupStatusTerminatingProcessor.java | 40 +++++++++----------- .../ApplicationInstanceTerminatedEvent.java | 11 +++--- ...licationInstanceCreatedMessageProcessor.java | 3 +- ...ationInstanceTerminatedMessageProcessor.java | 11 +++++- .../ClusterInstanceTerminatedProcessor.java | 3 ++ 14 files changed, 113 insertions(+), 89 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/196336cb/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 d46a232..1194a6f 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 @@ -304,7 +304,7 @@ public class ApplicationBuilder { //ApplicationHolder.removeApplication(appId); log.info("Application run time is removed: [application-id] " + appId); } - ApplicationsEventPublisher.sendApplicationInstanceTerminatedEvent(appId, clusterData); + ApplicationsEventPublisher.sendApplicationInstanceTerminatedEvent(appId, instanceId); } else { log.warn(String.format("Application state transition is not valid: [application-id] %s " + " [current-status] %s [status-requested] %s", appId, http://git-wip-us.apache.org/repos/asf/stratos/blob/196336cb/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 52e8c55..c03a92b 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 @@ -119,12 +119,12 @@ public class ApplicationsEventPublisher { publishEvent(applicationTerminatingEvent); } - public static void sendApplicationInstanceTerminatedEvent(String appId, Set<ClusterDataHolder> clusterData) { + public static void sendApplicationInstanceTerminatedEvent(String appId, String instanceId) { if (log.isInfoEnabled()) { log.info("Publishing Application terminated event for [application]: " + appId); } ApplicationInstanceTerminatedEvent applicationTerminatedEvent = - new ApplicationInstanceTerminatedEvent(appId, clusterData); + new ApplicationInstanceTerminatedEvent(appId, instanceId); publishEvent(applicationTerminatedEvent); } http://git-wip-us.apache.org/repos/asf/stratos/blob/196336cb/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java index 663f301..f3f5046 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java @@ -539,6 +539,15 @@ public class ClusterLevelPartitionContext extends PartitionContext implements Se return null; } + public MemberContext getObsoleteMember(String memberId) { + for (MemberContext memberContext : obsoletedMembers.values()) { + if (memberId.equals(memberContext.getMemberId())) { + return memberContext; + } + } + return null; + } + public long getTerminationPendingMemberExpiryTime() { return terminationPendingMemberExpiryTime; } http://git-wip-us.apache.org/repos/asf/stratos/blob/196336cb/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java index 53d60b7..865cfb7 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java @@ -321,6 +321,7 @@ public class AutoscalerTopologyEventReceiver { @Override protected void onEvent(Event event) { try { + log.info("[MemberReadyToShutdownEvent] Received: " + event.getClass()); MemberReadyToShutdownEvent memberReadyToShutdownEvent = (MemberReadyToShutdownEvent) event; String clusterId = memberReadyToShutdownEvent.getClusterId(); AutoscalerContext asCtx = AutoscalerContext.getInstance(); http://git-wip-us.apache.org/repos/asf/stratos/blob/196336cb/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 cf1e090..f208edc 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 @@ -919,15 +919,19 @@ public class VMClusterMonitor extends AbstractClusterMonitor { //move member to pending termination list if (partitionCtxt.getPendingTerminationMember(memberId) != null) { partitionCtxt.movePendingTerminationMemberToObsoleteMembers(memberId); - } else if (partitionCtxt.getPendingTerminationMember(memberId) != null) { - // add member to obsolete list since the member is shutdown ready member - partitionCtxt.movePendingTerminationMemberToObsoleteMembers(memberId); - } + if (log.isInfoEnabled()) { + log.info(String.format("Member is removed from the pending termination members " + + "and moved to obsolete list: [member] %s " + + "[partition] %s [cluster] %s ", memberId, partitionId, clusterId)); + } + } else if(partitionCtxt.getObsoleteMember(memberId) != null) { + if (log.isInfoEnabled()) { + log.info(String.format("Member is in obsolete list: [member] %s " + + "[partition] %s [cluster] %s ", memberId, partitionId, clusterId)); + } + } //TODO else part + - if (log.isInfoEnabled()) { - log.info(String.format("Member is terminated and removed from the active members list: [member] %s " + - "[partition] %s [cluster] %s ", memberId, partitionId, clusterId)); - } } catch (Exception e) { String msg = "Error processing event " + e.getLocalizedMessage(); log.error(msg, e); http://git-wip-us.apache.org/repos/asf/stratos/blob/196336cb/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java index f8f2e82..9d0a943 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java @@ -151,7 +151,7 @@ public class ApplicationMonitor extends ParentComponentMonitor { ApplicationInstance instance = (ApplicationInstance) instanceIdToInstanceMap.get(instanceId); if (instance != null) { - if (instance.getStatus() == ApplicationStatus.Terminating) { + if (this.isTerminating()) { ServiceReferenceHolder.getInstance().getGroupStatusProcessorChain().process(this.id, appId, instanceId); } else { http://git-wip-us.apache.org/repos/asf/stratos/blob/196336cb/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java index 10bcec1..15aa733 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java @@ -173,9 +173,12 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable { @Override public void onChildStatusEvent(MonitorStatusEvent statusEvent) { - String childId = statusEvent.getId(); - String instanceId = statusEvent.getInstanceId(); - LifeCycleState status1 = statusEvent.getStatus(); + + String childId = statusEvent.getId(); + String instanceId = statusEvent.getInstanceId(); + LifeCycleState status1 = statusEvent.getStatus(); + String id = this.id; + //Events coming from parent are In_Active(in faulty detection), Scaling events, termination if (status1 == ClusterStatus.Active || status1 == GroupStatus.Active) { @@ -183,34 +186,40 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable { } else if (status1 == ClusterStatus.Inactive || status1 == GroupStatus.Inactive) { //handling restart of stratos - if (!this.aliasToActiveMonitorsMap.get(childId).hasStartupDependents()) { + if (!aliasToActiveMonitorsMap.get(childId).hasStartupDependents()) { onChildActivatedEvent(childId, instanceId); } else { - this.markInstanceAsInactive(childId, instanceId); + markInstanceAsInactive(childId, instanceId); onChildInactiveEvent(childId, instanceId); } } else if (status1 == ClusterStatus.Terminating || status1 == GroupStatus.Terminating) { - //mark the child monitor as inActive in the map + //mark the child monitor as inactive in the map markInstanceAsTerminating(childId, instanceId); } else if (status1 == ClusterStatus.Terminated || status1 == GroupStatus.Terminated) { //Check whether all dependent goes Terminated and then start them in parallel. removeInstanceFromFromInactiveMap(childId, instanceId); removeInstanceFromFromTerminatingMap(childId, instanceId); - GroupInstance instance = (GroupInstance) this.instanceIdToInstanceMap.get(instanceId); + + GroupInstance instance = (GroupInstance) instanceIdToInstanceMap.get(instanceId); if (instance != null) { if (instance.getStatus() == GroupStatus.Terminating || instance.getStatus() == GroupStatus.Terminated) { - ServiceReferenceHolder.getInstance().getGroupStatusProcessorChain().process(this.id, + ServiceReferenceHolder.getInstance().getGroupStatusProcessorChain().process(id, appId, instanceId); } else { onChildTerminatedEvent(childId, instanceId); } + } else { + log.warn("The required instance cannot be found in the the [GroupMonitor] " + + id); } } - } + + + @Override public void onParentStatusEvent(MonitorStatusEvent statusEvent) throws MonitorNotFoundException { http://git-wip-us.apache.org/repos/asf/stratos/blob/196336cb/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusActiveProcessor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusActiveProcessor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusActiveProcessor.java index da2562a..69a6bfa 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusActiveProcessor.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusActiveProcessor.java @@ -81,27 +81,23 @@ public class GroupStatusActiveProcessor extends GroupStatusProcessor { groups = component.getAliasToGroupMap(); clusterData = component.getClusterDataMap(); - if (component.isGroupScalingEnabled()) { - - } else { - if (groups.isEmpty() && getAllClusterInSameState(clusterData, ClusterStatus.Active, instanceId) || - clusterData.isEmpty() && getAllGroupInSameState(groups, GroupStatus.Active, instanceId) || - getAllClusterInSameState(clusterData, ClusterStatus.Active, instanceId) && - getAllGroupInSameState(groups, GroupStatus.Active, instanceId)) { - //send activation event - if (component instanceof Application) { - //send application activated event - log.info("sending app activate: " + appId); - ApplicationBuilder.handleApplicationInstanceActivatedEvent(appId, instanceId); - return true; - } else if (component instanceof Group) { - //send activation to the parent - log.info("sending group activate: " + component.getUniqueIdentifier()); - ApplicationBuilder.handleGroupInstanceActivatedEvent(appId, component.getUniqueIdentifier(), instanceId); - return true; - } - + if (groups.isEmpty() && getAllClusterInSameState(clusterData, ClusterStatus.Active, instanceId) || + clusterData.isEmpty() && getAllGroupInSameState(groups, GroupStatus.Active, instanceId) || + getAllClusterInSameState(clusterData, ClusterStatus.Active, instanceId) && + getAllGroupInSameState(groups, GroupStatus.Active, instanceId)) { + //send activation event + if (component instanceof Application) { + //send application activated event + log.info("sending app activate: " + appId); + ApplicationBuilder.handleApplicationInstanceActivatedEvent(appId, instanceId); + return true; + } else if (component instanceof Group) { + //send activation to the parent + log.info("sending group activate: " + component.getUniqueIdentifier()); + ApplicationBuilder.handleGroupInstanceActivatedEvent(appId, component.getUniqueIdentifier(), instanceId); + return true; } + } } finally { ApplicationHolder.releaseWriteLock(); http://git-wip-us.apache.org/repos/asf/stratos/blob/196336cb/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusTerminatedProcessor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusTerminatedProcessor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusTerminatedProcessor.java index b365d71..578037d 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusTerminatedProcessor.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusTerminatedProcessor.java @@ -39,6 +39,7 @@ public class GroupStatusTerminatedProcessor extends GroupStatusProcessor { public void setNext(StatusProcessor nextProcessor) { this.nextProcessor = (GroupStatusProcessor) nextProcessor; } + @Override public boolean process(String idOfComponent, String appId, String instanceId) { @@ -84,24 +85,20 @@ public class GroupStatusTerminatedProcessor extends GroupStatusProcessor { groups = component.getAliasToGroupMap(); clusterData = component.getClusterDataMap(); - if (component.isGroupScalingEnabled()) { - - } else { - if (groups.isEmpty() && getAllClusterInSameState(clusterData, ClusterStatus.Terminated, instanceId) || - clusterData.isEmpty() && getAllGroupInSameState(groups, GroupStatus.Terminated, instanceId) || - getAllClusterInSameState(clusterData, ClusterStatus.Terminated, instanceId) && - getAllGroupInSameState(groups, GroupStatus.Terminated, instanceId)) { - //send the terminated event - if (component instanceof Application) { - log.info("sending app terminated: " + appId); - ApplicationBuilder.handleApplicationInstanceTerminatedEvent(appId, instanceId); - return true; - } else if (component instanceof Group) { - log.info("sending group terminated : " + component.getUniqueIdentifier()); - ApplicationBuilder.handleGroupInstanceTerminatedEvent(appId, - component.getUniqueIdentifier(), instanceId); - return true; - } + if (groups.isEmpty() && getAllClusterInSameState(clusterData, ClusterStatus.Terminated, instanceId) || + clusterData.isEmpty() && getAllGroupInSameState(groups, GroupStatus.Terminated, instanceId) || + getAllClusterInSameState(clusterData, ClusterStatus.Terminated, instanceId) && + getAllGroupInSameState(groups, GroupStatus.Terminated, instanceId)) { + //send the terminated event + if (component instanceof Application) { + log.info("sending app terminated: " + appId); + ApplicationBuilder.handleApplicationInstanceTerminatedEvent(appId, instanceId); + return true; + } else if (component instanceof Group) { + log.info("sending group terminated : " + component.getUniqueIdentifier()); + ApplicationBuilder.handleGroupInstanceTerminatedEvent(appId, + component.getUniqueIdentifier(), instanceId); + return true; } } http://git-wip-us.apache.org/repos/asf/stratos/blob/196336cb/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusTerminatingProcessor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusTerminatingProcessor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusTerminatingProcessor.java index 2fe0cd4..c536146 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusTerminatingProcessor.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusTerminatingProcessor.java @@ -85,28 +85,24 @@ public class GroupStatusTerminatingProcessor extends GroupStatusProcessor { groups = component.getAliasToGroupMap(); clusterData = component.getClusterDataMap(); - if (component.isGroupScalingEnabled()) { - - } else { - if (groups.isEmpty() && getAllClusterInSameState(clusterData, ClusterStatus.Terminating, instanceId) || - clusterData.isEmpty() && getAllGroupInSameState(groups, GroupStatus.Terminating, instanceId) || - getAllClusterInSameState(clusterData, ClusterStatus.Terminating, instanceId) && - getAllGroupInSameState(groups, GroupStatus.Terminating, instanceId)) { - //send the terminated event - if (component instanceof Application) { - log.info("sending app terminating for [application] " + appId + " and for " + - " [instance] " + instanceId); - ApplicationBuilder.handleApplicationInstanceTerminatedEvent(appId, instanceId); - return true; - } else if (component instanceof Group) { - //send activation to the parent - log.info("sending group terminating for [group] " + - component.getUniqueIdentifier() + " and for [instance] " - + instanceId); - ApplicationBuilder.handleGroupTerminatingEvent(appId, - component.getUniqueIdentifier(), instanceId); - return true; - } + if (groups.isEmpty() && getAllClusterInSameState(clusterData, ClusterStatus.Terminating, instanceId) || + clusterData.isEmpty() && getAllGroupInSameState(groups, GroupStatus.Terminating, instanceId) || + getAllClusterInSameState(clusterData, ClusterStatus.Terminating, instanceId) && + getAllGroupInSameState(groups, GroupStatus.Terminating, instanceId)) { + //send the terminated event + if (component instanceof Application) { + log.info("sending app terminating for [application] " + appId + " and for " + + " [instance] " + instanceId); + ApplicationBuilder.handleApplicationInstanceTerminatedEvent(appId, instanceId); + return true; + } else if (component instanceof Group) { + //send activation to the parent + log.info("sending group terminating for [group] " + + component.getUniqueIdentifier() + " and for [instance] " + + instanceId); + ApplicationBuilder.handleGroupTerminatingEvent(appId, + component.getUniqueIdentifier(), instanceId); + return true; } } } finally { http://git-wip-us.apache.org/repos/asf/stratos/blob/196336cb/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/ApplicationInstanceTerminatedEvent.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/ApplicationInstanceTerminatedEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/ApplicationInstanceTerminatedEvent.java index 1d05ba3..25def05 100644 --- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/ApplicationInstanceTerminatedEvent.java +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/ApplicationInstanceTerminatedEvent.java @@ -31,18 +31,17 @@ public class ApplicationInstanceTerminatedEvent extends Event implements Seriali private static final long serialVersionUID = 2625412714611885089L; private String appId; - private Set<ClusterDataHolder> clusterData; - - public ApplicationInstanceTerminatedEvent(String appId, Set<ClusterDataHolder> clusterData) { + private String instanceId; + public ApplicationInstanceTerminatedEvent(String appId, String instanceId) { this.appId = appId; - this.clusterData = clusterData; + this.instanceId = instanceId; } public String getAppId() { return appId; } - public Set<ClusterDataHolder> getClusterData() { - return clusterData; + public String getInstanceId() { + return instanceId; } } http://git-wip-us.apache.org/repos/asf/stratos/blob/196336cb/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationInstanceCreatedMessageProcessor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationInstanceCreatedMessageProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationInstanceCreatedMessageProcessor.java index e92d581..fe6a3f9 100644 --- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationInstanceCreatedMessageProcessor.java +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationInstanceCreatedMessageProcessor.java @@ -95,7 +95,8 @@ public class ApplicationInstanceCreatedMessageProcessor extends MessageProcessor } // check if an Application instance with same name exists in applications instance - if (null != applications.getApplication(event.getApplicationId()).getInstanceByNetworkPartitionId(applicationInstance.getNetworkPartitionId())) { + if (null != applications.getApplication(event.getApplicationId()). + getInstanceByNetworkPartitionId(applicationInstance.getNetworkPartitionId())) { log.warn("Application instance with id [ " + applicationInstance.getInstanceId() + " ] already exists"); http://git-wip-us.apache.org/repos/asf/stratos/blob/196336cb/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationInstanceTerminatedMessageProcessor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationInstanceTerminatedMessageProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationInstanceTerminatedMessageProcessor.java index c7a39b5..ebba54b 100644 --- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationInstanceTerminatedMessageProcessor.java +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationInstanceTerminatedMessageProcessor.java @@ -20,7 +20,9 @@ package org.apache.stratos.messaging.message.processor.applications; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.stratos.messaging.domain.applications.ApplicationStatus; import org.apache.stratos.messaging.domain.applications.Applications; +import org.apache.stratos.messaging.domain.instance.ApplicationInstance; import org.apache.stratos.messaging.event.applications.ApplicationInstanceTerminatedEvent; import org.apache.stratos.messaging.message.processor.MessageProcessor; import org.apache.stratos.messaging.message.processor.applications.updater.ApplicationsUpdater; @@ -85,9 +87,16 @@ public class ApplicationInstanceTerminatedMessageProcessor extends MessageProces // check if an Application with same name exists in applications String appId = event.getAppId(); + String instanceId = event.getInstanceId(); if (applications.applicationExists(appId)) { log.warn("Application with id [ " + appId + " ] still exists in Applications, removing it"); - applications.removeApplication(appId); + ApplicationInstance instance = applications.getApplication(appId). + getInstanceContexts(instanceId); + if(instance == null) { + log.info("Application [Instance] " + instanceId + " has already been removed"); + } + instance.setStatus(ApplicationStatus.Terminated); + applications.getApplication(appId).removeInstance(instanceId); } notifyEventListeners(event); http://git-wip-us.apache.org/repos/asf/stratos/blob/196336cb/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterInstanceTerminatedProcessor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterInstanceTerminatedProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterInstanceTerminatedProcessor.java index 6f6d335..4e43f35 100644 --- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterInstanceTerminatedProcessor.java +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterInstanceTerminatedProcessor.java @@ -116,6 +116,7 @@ public class ClusterInstanceTerminatedProcessor extends MessageProcessor { if (log.isDebugEnabled()) { log.debug(String.format("Cluster not exists in service: [service] %s [cluster] %s", event.getServiceName(), event.getClusterId())); + return false; } } else { // Apply changes to the topology @@ -124,12 +125,14 @@ public class ClusterInstanceTerminatedProcessor extends MessageProcessor { log.warn("Cluster Instance Context is not found for [cluster] " + event.getClusterId() + " [instance-id] " + event.getInstanceId()); + return false; } ClusterStatus status = ClusterStatus.Terminated; if (!context.isStateTransitionValid(status)) { log.error("Invalid State Transition from " + context.getStatus() + " to " + status); } context.setStatus(status); + cluster.removeInstanceContext(event.getInstanceId()); }
