You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by im...@apache.org on 2014/10/30 05:13:30 UTC

[06/50] [abbrv] git commit: removing ApplicationRemovedEvent, ApplicationRemovedEventListener and ApplicationRemovedMessageProcessor

removing ApplicationRemovedEvent, ApplicationRemovedEventListener and ApplicationRemovedMessageProcessor


Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/b56e3285
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/b56e3285
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/b56e3285

Branch: refs/heads/docker-grouping-merge
Commit: b56e3285239b2c070d7e78062ae8dd9e26131e50
Parents: 4e4ba5b
Author: Isuru Haththotuwa <is...@apache.org>
Authored: Mon Oct 27 13:08:58 2014 +0530
Committer: Isuru Haththotuwa <is...@apache.org>
Committed: Mon Oct 27 13:08:58 2014 +0530

----------------------------------------------------------------------
 .../AutoscalerTopologyEventReceiver.java        |  97 ++++++++++---
 .../controller/topology/TopologyBuilder.java    |   4 +-
 .../topology/TopologyEventPublisher.java        |  18 +--
 .../StratosManagerTopologyEventReceiver.java    |  13 +-
 .../event/topology/ApplicationRemovedEvent.java |  62 --------
 .../topology/ApplicationTerminatedEvent.java    |  15 +-
 .../ApplicationRemovedEventListener.java        |  26 ----
 ...pStatusGroupTerminatingMessageProcessor.java |   8 +-
 .../ApplicationRemovedMessageProcessor.java     | 142 -------------------
 .../ApplicationTerminatedMessageProcessor.java  |  76 +++++++---
 .../topology/TopologyMessageProcessorChain.java |   6 -
 11 files changed, 166 insertions(+), 301 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/b56e3285/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
index 654d5b2..89fe51f 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
@@ -419,28 +419,83 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
             }
         });
 
-        topologyEventReceiver.addEventListener(new ApplicationRemovedEventListener() {
+//        topologyEventReceiver.addEventListener(new ApplicationRemovedEventListener() {
+//            @Override
+//            protected void onEvent(Event event) {
+//
+//                log.info("[ApplicationRemovedEvent] Received: " + event.getClass());
+//
+//                ApplicationRemovedEvent applicationRemovedEvent = (ApplicationRemovedEvent) event;
+//
+//                //acquire read lock
+//                TopologyManager.acquireReadLockForApplication(applicationRemovedEvent.getApplicationId());
+//                Set<ClusterDataHolder> clusterDataHolders = applicationRemovedEvent.getClusterData();
+//                if (clusterDataHolders != null) {
+//                    for (ClusterDataHolder clusterData : clusterDataHolders) {
+//                        TopologyManager.acquireReadLockForCluster(clusterData.getServiceType(),
+//                                clusterData.getClusterId());
+//                    }
+//                }
+//
+//                try {
+//                    //TODO remove monitors as well as any starting or pending threads
+//                    ApplicationMonitor monitor = AutoscalerContext.getInstance().
+//                            getAppMonitor(applicationRemovedEvent.getApplicationId());
+//                    if (monitor != null) {
+//                        //List<String> clusters = monitor.
+//                        //        findClustersOfApplication(applicationRemovedEvent.getApplicationId());
+//                        for (ClusterDataHolder clusterData : clusterDataHolders) {
+//                            //stopping the cluster monitor and remove it from the AS
+//                            ((ClusterMonitor) AutoscalerContext.getInstance().getMonitor(clusterData.getClusterId())).
+//                                    setDestroyed(true);
+//                            AutoscalerContext.getInstance().removeMonitor(clusterData.getClusterId());
+//                        }
+//                        //removing the application monitor
+//                        AutoscalerContext.getInstance().
+//                                removeAppMonitor(applicationRemovedEvent.getApplicationId());
+//                    } else {
+//                        log.warn("Application Monitor cannot be found for the removed [application] "
+//                                + applicationRemovedEvent.getApplicationId());
+//                    }
+//
+//
+//                } finally {
+//                    //release read lock
+//                    if (clusterDataHolders != null) {
+//                        for (ClusterDataHolder clusterData : clusterDataHolders) {
+//                            TopologyManager.releaseReadLockForCluster(clusterData.getServiceType(),
+//                                    clusterData.getClusterId());
+//                        }
+//                    }
+//                    TopologyManager.releaseReadLockForApplication(applicationRemovedEvent.getApplicationId());
+//                }
+//
+//            }
+//        });
+
+        topologyEventReceiver.addEventListener(new ApplicationTerminatedEventListener() {
             @Override
             protected void onEvent(Event event) {
 
-                log.info("[ApplicationRemovedEvent] Received: " + event.getClass());
+                log.info("[ApplicationTerminatedEvent] Received: " + event.getClass());
 
-                ApplicationRemovedEvent applicationRemovedEvent = (ApplicationRemovedEvent) event;
+                ApplicationTerminatedEvent applicationRemovedEvent = (ApplicationTerminatedEvent) event;
 
+                // no need to access the locks since the Topology is not accessed
                 //acquire read lock
-                TopologyManager.acquireReadLockForApplication(applicationRemovedEvent.getApplicationId());
+                //TopologyManager.acquireReadLockForApplication(applicationRemovedEvent.getAppId());
                 Set<ClusterDataHolder> clusterDataHolders = applicationRemovedEvent.getClusterData();
-                if (clusterDataHolders != null) {
-                    for (ClusterDataHolder clusterData : clusterDataHolders) {
-                        TopologyManager.acquireReadLockForCluster(clusterData.getServiceType(),
-                                clusterData.getClusterId());
-                    }
-                }
+//                if (clusterDataHolders != null) {
+//                    for (ClusterDataHolder clusterData : clusterDataHolders) {
+//                        TopologyManager.acquireReadLockForCluster(clusterData.getServiceType(),
+//                                clusterData.getClusterId());
+//                    }
+//                }
 
                 try {
                     //TODO remove monitors as well as any starting or pending threads
                     ApplicationMonitor monitor = AutoscalerContext.getInstance().
-                            getAppMonitor(applicationRemovedEvent.getApplicationId());
+                            getAppMonitor(applicationRemovedEvent.getAppId());
                     if (monitor != null) {
                         //List<String> clusters = monitor.
                         //        findClustersOfApplication(applicationRemovedEvent.getApplicationId());
@@ -452,22 +507,22 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
                         }
                         //removing the application monitor
                         AutoscalerContext.getInstance().
-                                removeAppMonitor(applicationRemovedEvent.getApplicationId());
+                                removeAppMonitor(applicationRemovedEvent.getAppId());
                     } else {
-                        log.warn("Application Monitor cannot be found for the removed [application] "
-                                + applicationRemovedEvent.getApplicationId());
+                        log.warn("Application Monitor cannot be found for the terminated [application] "
+                                + applicationRemovedEvent.getAppId());
                     }
 
 
                 } finally {
                     //release read lock
-                    if (clusterDataHolders != null) {
-                        for (ClusterDataHolder clusterData : clusterDataHolders) {
-                            TopologyManager.releaseReadLockForCluster(clusterData.getServiceType(),
-                                    clusterData.getClusterId());
-                        }
-                    }
-                    TopologyManager.releaseReadLockForApplication(applicationRemovedEvent.getApplicationId());
+//                    if (clusterDataHolders != null) {
+//                        for (ClusterDataHolder clusterData : clusterDataHolders) {
+//                            TopologyManager.releaseReadLockForCluster(clusterData.getServiceType(),
+//                                    clusterData.getClusterId());
+//                        }
+//                    }
+//                    TopologyManager.releaseReadLockForApplication(applicationRemovedEvent.getAppId());
                 }
 
             }

http://git-wip-us.apache.org/repos/asf/stratos/blob/b56e3285/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java
index 3e04311..f4606b8 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java
@@ -1044,8 +1044,8 @@ public class TopologyBuilder {
 
                 log.info("Removed application [ " + event.getAppId() + " ] from Topology");
 
-                TopologyEventPublisher.sendApplicationRemovedEvent(event.getAppId(),
-                        clusterData, tenantId, tenantDomain);
+                TopologyEventPublisher.sendApplicationTerminatedEvent(new ApplicationTerminatedEvent(event.getAppId(),
+                        clusterData, tenantId, tenantDomain));
             }
 
         } finally {

http://git-wip-us.apache.org/repos/asf/stratos/blob/b56e3285/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyEventPublisher.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyEventPublisher.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyEventPublisher.java
index cd13111..a3feb4d 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyEventPublisher.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyEventPublisher.java
@@ -103,15 +103,15 @@ public class TopologyEventPublisher {
         publishEvent(new ApplicationUndeployedEvent(applicationId, clusterData));
     }
 
-    public static void sendApplicationRemovedEvent(String applicationId, Set<ClusterDataHolder> clusterData,
-                                                   int tenantId, String tenantDomain) {
-
-        if(log.isInfoEnabled() || log.isDebugEnabled()) {
-            log.info("Publishing Application removed event: " + applicationId + " tenantId: " + tenantId);
-        }
-        
-        publishEvent(new ApplicationRemovedEvent(applicationId, clusterData, tenantId, tenantDomain));
-    }
+//    public static void sendApplicationRemovedEvent(String applicationId, Set<ClusterDataHolder> clusterData,
+//                                                   int tenantId, String tenantDomain) {
+//
+//        if(log.isInfoEnabled() || log.isDebugEnabled()) {
+//            log.info("Publishing Application removed event: " + applicationId + " tenantId: " + tenantId);
+//        }
+//
+//        publishEvent(new ApplicationRemovedEvent(applicationId, clusterData, tenantId, tenantDomain));
+//    }
 
     public static void sendClusterRemovedEvent(ClusterContext ctxt, String deploymentPolicy) {
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/b56e3285/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/topology/receiver/StratosManagerTopologyEventReceiver.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/topology/receiver/StratosManagerTopologyEventReceiver.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/topology/receiver/StratosManagerTopologyEventReceiver.java
index 699af72..6e8552b 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/topology/receiver/StratosManagerTopologyEventReceiver.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/topology/receiver/StratosManagerTopologyEventReceiver.java
@@ -355,21 +355,22 @@ public class StratosManagerTopologyEventReceiver implements Runnable {
         });
         
         //add listener 
-        topologyEventReceiver.addEventListener(new ApplicationRemovedEventListener() {
+        topologyEventReceiver.addEventListener(new ApplicationTerminatedEventListener() {
             @Override
             protected void onEvent(Event event) {
 
-            	ApplicationRemovedEvent appRemovedEvent = (ApplicationRemovedEvent) event;
+                ApplicationTerminatedEvent appRemovedEvent = (ApplicationTerminatedEvent) event;
 
-                log.info("[ApplicationRemovedEventListener] Received: " + event.getClass());
+                log.info("[ApplicationTerminatedEvent] Received: " + event.getClass());
 
                 try {
+                    // no need to lock since Topology is not accessed
                     //TopologyManager.acquireReadLock();
-                    TopologyManager.acquireReadLockForApplication(appRemovedEvent.getApplicationId());
+                    //TopologyManager.acquireReadLockForApplication(appRemovedEvent.getAppId());
                     
                     // create and persist Application subscritpion
                     CartridgeSubscriptionManager cartridgeSubscriptionManager = new CartridgeSubscriptionManager();
-                    String appId = appRemovedEvent.getApplicationId();
+                    String appId = appRemovedEvent.getAppId();
                     
                     int tenantId = appRemovedEvent.getTenantId();
                     String domain = appRemovedEvent.getTenantDomain();
@@ -393,7 +394,7 @@ public class StratosManagerTopologyEventReceiver implements Runnable {
                     }
                 } finally {
                     //TopologyManager.releaseReadLock();
-                    TopologyManager.releaseReadLockForApplication(appRemovedEvent.getApplicationId());
+                    //TopologyManager.releaseReadLockForApplication(appRemovedEvent.getAppId());
                 }
             }
         });

http://git-wip-us.apache.org/repos/asf/stratos/blob/b56e3285/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ApplicationRemovedEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ApplicationRemovedEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ApplicationRemovedEvent.java
deleted file mode 100644
index 3d5b9a4..0000000
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ApplicationRemovedEvent.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * 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.event.topology;
-
-
-import org.apache.stratos.messaging.domain.topology.ClusterDataHolder;
-
-import java.util.Set;
-
-public class ApplicationRemovedEvent extends TopologyEvent {
-
-    /**
-     *
-     */
-    private static final long serialVersionUID = -5499420725533165623L;
-    private final String applicationId;
-    private Set<ClusterDataHolder> clusterData;
-
-    private String tenantDomain;
-    private int tenantId;
-
-    public ApplicationRemovedEvent(String applicationId, Set<ClusterDataHolder> clusterData,
-                                   int tenantId, String tenantDomain) {
-        this.applicationId = applicationId;
-        this.clusterData = clusterData;
-        this.tenantId = tenantId;
-        this.tenantDomain = tenantDomain;
-    }
-
-    public String getApplicationId() {
-        return applicationId;
-    }
-
-    public int getTenantId() {
-        return tenantId;
-    }
-
-    public String getTenantDomain() {
-        return tenantDomain;
-    }
-
-    public Set<ClusterDataHolder> getClusterData() {
-        return clusterData;
-    }
-}

http://git-wip-us.apache.org/repos/asf/stratos/blob/b56e3285/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ApplicationTerminatedEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ApplicationTerminatedEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ApplicationTerminatedEvent.java
index 6607a02..fa0cd26 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ApplicationTerminatedEvent.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ApplicationTerminatedEvent.java
@@ -28,10 +28,15 @@ import java.util.Set;
 public class ApplicationTerminatedEvent extends TopologyEvent {
     private final String appId;
     private final Set<ClusterDataHolder> clusterData;
+    private String tenantDomain;
+    private int tenantId;
 
-    public ApplicationTerminatedEvent(String appId, Set<ClusterDataHolder> clusterData) {
+    public ApplicationTerminatedEvent(String appId, Set<ClusterDataHolder> clusterData,
+                                      int tenantId, String tenantDomain) {
         this.appId = appId;
         this.clusterData = clusterData;
+        this.tenantId = tenantId;
+        this.tenantDomain = tenantDomain;
     }
 
     public String getAppId() {
@@ -41,4 +46,12 @@ public class ApplicationTerminatedEvent extends TopologyEvent {
     public Set<ClusterDataHolder> getClusterData() {
         return clusterData;
     }
+
+    public String getTenantDomain() {
+        return tenantDomain;
+    }
+
+    public int getTenantId() {
+        return tenantId;
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/stratos/blob/b56e3285/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/topology/ApplicationRemovedEventListener.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/topology/ApplicationRemovedEventListener.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/topology/ApplicationRemovedEventListener.java
deleted file mode 100644
index c3a1178..0000000
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/topology/ApplicationRemovedEventListener.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * 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.listener.topology;
-
-import org.apache.stratos.messaging.listener.EventListener;
-
-public abstract class ApplicationRemovedEventListener extends EventListener {
-
-}

http://git-wip-us.apache.org/repos/asf/stratos/blob/b56e3285/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/application/status/AppStatusGroupTerminatingMessageProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/application/status/AppStatusGroupTerminatingMessageProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/application/status/AppStatusGroupTerminatingMessageProcessor.java
index 7445695..75012e0 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/application/status/AppStatusGroupTerminatingMessageProcessor.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/application/status/AppStatusGroupTerminatingMessageProcessor.java
@@ -21,7 +21,7 @@ package org.apache.stratos.messaging.message.processor.application.status;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.messaging.event.topology.GroupTerminatingEvent;
+import org.apache.stratos.messaging.event.application.status.AppStatusGroupTerminatingEvent;
 import org.apache.stratos.messaging.message.processor.MessageProcessor;
 import org.apache.stratos.messaging.util.Util;
 
@@ -37,10 +37,10 @@ public class AppStatusGroupTerminatingMessageProcessor extends MessageProcessor
 
     @Override
     public boolean process(String type, String message, Object object) {
-        if (GroupTerminatingEvent.class.getName().equals(type)) {
+        if (AppStatusGroupTerminatingEvent.class.getName().equals(type)) {
             // Parse complete message and build event
-            GroupTerminatingEvent event =
-                    (GroupTerminatingEvent) Util.jsonToObject(message, GroupTerminatingEvent.class);
+            AppStatusGroupTerminatingEvent event =
+                    (AppStatusGroupTerminatingEvent) Util.jsonToObject(message, AppStatusGroupTerminatingEvent.class);
 
             if (log.isDebugEnabled()) {
                 log.debug("Received GroupTerminatingEvent: " + event.toString());

http://git-wip-us.apache.org/repos/asf/stratos/blob/b56e3285/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ApplicationRemovedMessageProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ApplicationRemovedMessageProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ApplicationRemovedMessageProcessor.java
deleted file mode 100644
index 5e02565..0000000
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ApplicationRemovedMessageProcessor.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * 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.message.processor.topology;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.messaging.domain.topology.ClusterDataHolder;
-import org.apache.stratos.messaging.domain.topology.Service;
-import org.apache.stratos.messaging.domain.topology.Topology;
-import org.apache.stratos.messaging.event.topology.ApplicationRemovedEvent;
-import org.apache.stratos.messaging.message.processor.MessageProcessor;
-import org.apache.stratos.messaging.message.processor.topology.updater.TopologyUpdater;
-import org.apache.stratos.messaging.util.Util;
-
-import java.util.Set;
-
-public class ApplicationRemovedMessageProcessor extends MessageProcessor {
-	
-	private static final Log log = LogFactory.getLog(ApplicationCreatedMessageProcessor.class);
-
-	private MessageProcessor nextProcessor;
-
-    @Override
-    public void setNext(MessageProcessor nextProcessor) {
-        this.nextProcessor = nextProcessor;
-    }
-
-    @Override
-    public boolean process(String type, String message, Object object) {
-    	
-    	if (log.isDebugEnabled()) {
-    		log.debug("ApplicationRemovedMessageProcessor processing " + object);
-    	}
-    	
-    	Topology topology = (Topology) object;
-    	
-    	if (ApplicationRemovedEvent.class.getName().equals(type)) {
-	    	if (!topology.isInitialized()) {
-	    		if (log.isDebugEnabled()) {
-	        		log.debug("ApplicationRemovedMessageProcessor topology not initialized ... " + object);
-	        	}
-	            return false;
-	        }
-	
-	        ApplicationRemovedEvent event = (ApplicationRemovedEvent) Util.jsonToObject(message, ApplicationRemovedEvent.class);
-	        if (event == null) {
-	            log.error("Unable to convert the JSON message to ApplicationCreatedEvent");
-	            return false;
-	        }
-
-            TopologyUpdater.acquireWriteLockForApplications();
-            Set<ClusterDataHolder> clusterDataHolders = event.getClusterData();
-            if (clusterDataHolders != null) {
-                for (ClusterDataHolder clusterData : clusterDataHolders) {
-                    TopologyUpdater.acquireWriteLockForService(clusterData.getServiceType());
-                }
-            }
-
-            try {
-                return doProcess(event, topology);
-
-            } finally {
-                if (clusterDataHolders != null) {
-                    for (ClusterDataHolder clusterData : clusterDataHolders) {
-                        TopologyUpdater.releaseWriteLockForService(clusterData.getServiceType());
-                    }
-                }
-                TopologyUpdater.releaseWriteLockForApplications();
-            }
-        
-	    } else {
-	        if (nextProcessor != null) {
-	            // ask the next processor to take care of the message.
-	            return nextProcessor.process(type, message, topology);
-	        } else {
-	            throw new RuntimeException(String.format("Failed to process message using available message processors: [type] %s [body] %s", type, message));
-	        }
-	    }
-    }
-
-    private boolean doProcess (ApplicationRemovedEvent event, Topology topology) {
-
-        // check if required properties are available
-        if (event.getApplicationId() == null) {
-            String errorMsg = "Application Id of application removed event is invalid";
-            log.error(errorMsg);
-            throw new RuntimeException(errorMsg);
-        }
-
-        if (event.getTenantDomain()== null) {
-            String errorMsg = "Application tenant domain of application removed event is invalid";
-            log.error(errorMsg);
-            throw new RuntimeException(errorMsg);
-        }
-
-        // check if an Application with same name exists in topology
-        String appId = event.getApplicationId();
-        if (topology.applicationExists(appId)) {
-            log.warn("Application with id [ " + appId + " ] still exists in Topology, removing it");
-            topology.removeApplication(appId);
-        }
-
-        if (event.getClusterData() != null) {
-            // remove the Clusters from the Topology
-            for (ClusterDataHolder clusterData : event.getClusterData()) {
-                Service service = topology.getService(clusterData.getServiceType());
-                if (service != null) {
-                    service.removeCluster(clusterData.getClusterId());
-                    if (log.isDebugEnabled()) {
-                        log.debug("Removed the Cluster " + clusterData.getClusterId() + " from Topology");
-                    }
-                }  else {
-                    log.warn("Service " + clusterData.getServiceType() + " not found in Topology!");
-                }
-            }
-        }
-
-        if (log.isDebugEnabled()) {
-            log.debug("ApplicationRemovedMessageProcessor notifying listener ");
-        }
-
-        notifyEventListeners(event);
-        return true;
-    }
-}

http://git-wip-us.apache.org/repos/asf/stratos/blob/b56e3285/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ApplicationTerminatedMessageProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ApplicationTerminatedMessageProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ApplicationTerminatedMessageProcessor.java
index 2d22c6c..49a8d22 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ApplicationTerminatedMessageProcessor.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ApplicationTerminatedMessageProcessor.java
@@ -20,14 +20,15 @@ package org.apache.stratos.messaging.message.processor.topology;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.messaging.domain.topology.Application;
-import org.apache.stratos.messaging.domain.topology.ApplicationStatus;
-import org.apache.stratos.messaging.domain.topology.Topology;
+import org.apache.stratos.messaging.domain.topology.*;
 import org.apache.stratos.messaging.event.topology.ApplicationInactivatedEvent;
+import org.apache.stratos.messaging.event.topology.ApplicationTerminatedEvent;
 import org.apache.stratos.messaging.message.processor.MessageProcessor;
 import org.apache.stratos.messaging.message.processor.topology.updater.TopologyUpdater;
 import org.apache.stratos.messaging.util.Util;
 
+import java.util.Set;
+
 /**
  * This processor responsible to process the application Inactivation even and update the Topology.
  */
@@ -48,22 +49,33 @@ public class ApplicationTerminatedMessageProcessor extends MessageProcessor {
     public boolean process(String type, String message, Object object) {
         Topology topology = (Topology) object;
 
-        if (ApplicationInactivatedEvent.class.getName().equals(type)) {
+        if (ApplicationTerminatedEvent.class.getName().equals(type)) {
             // Return if topology has not been initialized
             if (!topology.isInitialized())
                 return false;
 
             // Parse complete message and build event
-            ApplicationInactivatedEvent event = (ApplicationInactivatedEvent) Util.
-                    jsonToObject(message, ApplicationInactivatedEvent.class);
+            ApplicationTerminatedEvent event = (ApplicationTerminatedEvent) Util.
+                    jsonToObject(message, ApplicationTerminatedEvent.class);
 
             TopologyUpdater.acquireWriteLockForApplication(event.getAppId());
+                        Set<ClusterDataHolder> clusterDataHolders = event.getClusterData();
+            if (clusterDataHolders != null) {
+                for (ClusterDataHolder clusterData : clusterDataHolders) {
+                    TopologyUpdater.acquireWriteLockForService(clusterData.getServiceType());
+                }
+            }
 
             try {
                 return doProcess(event, topology);
 
             } finally {
                 TopologyUpdater.releaseWriteLockForApplication(event.getAppId());
+                if (clusterDataHolders != null) {
+                    for (ClusterDataHolder clusterData : clusterDataHolders) {
+                        TopologyUpdater.releaseWriteLockForService(clusterData.getServiceType());
+                    }
+                }
             }
 
         } else {
@@ -76,27 +88,47 @@ public class ApplicationTerminatedMessageProcessor extends MessageProcessor {
         }
     }
 
-    private boolean doProcess (ApplicationInactivatedEvent event, Topology topology) {
+    private boolean doProcess (ApplicationTerminatedEvent event, Topology topology) {
 
-        // Validate event against the existing topology
-        Application application = topology.getApplication(event.getAppId());
-        if (application == null) {
-            if (log.isWarnEnabled()) {
-                log.warn(String.format("Application does not exist: [service] %s",
-                        event.getAppId()));
-            }
-            return false;
-        } else {
-            // Apply changes to the topology
-            if (!application.isStateTransitionValid(ApplicationStatus.Terminated)) {
-                log.error("Invalid State transfer from [ " + application.getStatus() +
-                        " ] to [ " + ApplicationStatus.Terminated + " ]");
+        // check if required properties are available
+        if (event.getAppId() == null) {
+            String errorMsg = "Application Id of application removed event is invalid";
+            log.error(errorMsg);
+            throw new RuntimeException(errorMsg);
+        }
+
+        if (event.getTenantDomain()== null) {
+            String errorMsg = "Application tenant domain of application removed event is invalid";
+            log.error(errorMsg);
+            throw new RuntimeException(errorMsg);
+        }
+
+        // check if an Application with same name exists in topology
+        String appId = event.getAppId();
+        if (topology.applicationExists(appId)) {
+            log.warn("Application with id [ " + appId + " ] still exists in Topology, removing it");
+            topology.removeApplication(appId);
+        }
+
+        if (event.getClusterData() != null) {
+            // remove the Clusters from the Topology
+            for (ClusterDataHolder clusterData : event.getClusterData()) {
+                Service service = topology.getService(clusterData.getServiceType());
+                if (service != null) {
+                    service.removeCluster(clusterData.getClusterId());
+                    if (log.isDebugEnabled()) {
+                        log.debug("Removed the Cluster " + clusterData.getClusterId() + " from Topology");
+                    }
+                }  else {
+                    log.warn("Service " + clusterData.getServiceType() + " not found in Topology!");
+                }
             }
-            application.setStatus(ApplicationStatus.Terminated);
+        }
 
+        if (log.isDebugEnabled()) {
+            log.debug("ApplicationRemovedMessageProcessor notifying listener ");
         }
 
-        // Notify event listeners
         notifyEventListeners(event);
         return true;
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/b56e3285/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/TopologyMessageProcessorChain.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/TopologyMessageProcessorChain.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/TopologyMessageProcessorChain.java
index 1b7ba13..4f6d3a9 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/TopologyMessageProcessorChain.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/TopologyMessageProcessorChain.java
@@ -50,7 +50,6 @@ public class TopologyMessageProcessorChain extends MessageProcessorChain {
     private GroupInActivateProcessor groupInActivateProcessor;
     private ApplicationCreatedMessageProcessor applicationCreatedMessageProcessor;
     private ApplicationUndeployedMessageProcessor applicationUndeployedMessageProcessor;
-    private ApplicationRemovedMessageProcessor applicationRemovedMessageProcessor;
     private ApplicationActivatedMessageProcessor applicationActivatedMessageProcessor;
     private ApplicationInactivatedMessageProcessor applicationInactivatedMessageProcessor;
     private ApplicationTerminatedMessageProcessor applicationTerminatedMessageProcessor;
@@ -128,9 +127,6 @@ public class TopologyMessageProcessorChain extends MessageProcessorChain {
         applicationUndeployedMessageProcessor = new ApplicationUndeployedMessageProcessor();
         add(applicationUndeployedMessageProcessor);
 
-        applicationRemovedMessageProcessor = new ApplicationRemovedMessageProcessor();
-        add(applicationRemovedMessageProcessor);
-
         applicationActivatedMessageProcessor = new ApplicationActivatedMessageProcessor();
         add(applicationActivatedMessageProcessor);
 
@@ -193,8 +189,6 @@ public class TopologyMessageProcessorChain extends MessageProcessorChain {
             applicationCreatedMessageProcessor.addEventListener(eventListener);
         } else if (eventListener instanceof ApplicationUndeployedEventListener) {
             applicationUndeployedMessageProcessor.addEventListener(eventListener);
-        } else if (eventListener instanceof ApplicationRemovedEventListener) {
-            applicationRemovedMessageProcessor.addEventListener(eventListener);
         } else if (eventListener instanceof ApplicationActivatedEventListener) {
             applicationActivatedMessageProcessor.addEventListener(eventListener);
         } else  if (eventListener instanceof ApplicationInActivateEventListener){