You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by re...@apache.org on 2014/12/11 14:55:22 UTC

[1/3] stratos git commit: Got clusterdata before delete and modified logs

Repository: stratos
Updated Branches:
  refs/heads/4.1.0-test d64f31438 -> b1f3b9bd3


Got clusterdata before delete and modified logs


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

Branch: refs/heads/4.1.0-test
Commit: 1433fc9c46558cc5c934eeb74d2247c30878ce9a
Parents: 2ba19d8
Author: Shiro <sh...@wso2.com>
Authored: Thu Dec 11 17:55:00 2014 +0530
Committer: Shiro <sh...@wso2.com>
Committed: Thu Dec 11 18:03:06 2014 +0530

----------------------------------------------------------------------
 .../autoscaler/api/AutoScalerServiceImpl.java   |  3 +--
 .../applications/topic/ApplicationBuilder.java  | 23 +++++++++++-----
 .../topic/ApplicationsEventPublisher.java       |  4 +--
 .../applications/ApplicationDeletedEvent.java   | 18 +++++--------
 .../ApplicationCreatedMessageProcessor.java     |  8 ++++--
 .../ApplicationDeletedMessageProcessor.java     | 28 +++++++++-----------
 .../rest/endpoint/api/StratosApiV41.java        |  2 +-
 7 files changed, 46 insertions(+), 40 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/1433fc9c/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
index a2b371e..41d027f 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
@@ -275,8 +275,7 @@ public class AutoScalerServiceImpl implements AutoScalerServiceInterface {
     @Override
     public void unDeployApplicationDefinition(String applicationId, int tenantId, String tenantDomain)
             throws ApplicationDefinitionException {
-
-        ApplicationBuilder.handleApplicationUndeployed(applicationId);
+        ApplicationBuilder.handleApplicationDeleted(applicationId);
     }
 
     public void updateClusterMonitor(String clusterId, Properties properties) throws InvalidArgumentException {

http://git-wip-us.apache.org/repos/asf/stratos/blob/1433fc9c/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 81581b8..1a2fb41 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
@@ -37,6 +37,7 @@ import org.apache.stratos.messaging.domain.topology.Service;
 import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
 
 import java.util.Collection;
+import java.util.HashSet;
 import java.util.Set;
 
 /**
@@ -176,11 +177,11 @@ public class ApplicationBuilder {
         }
     }
 
-    public static void handleApplicationUndeployed(String appId) {
+    public static void handleApplicationDeleted(String appId) {
         if (log.isDebugEnabled()) {
             log.debug("Handling application unDeployment for [application-id] " + appId);
         }
-        Set<ClusterDataHolder> clusterData;
+        Set<ClusterDataHolder> appClusterDataToSend;
         Application application;
         ApplicationHolder.acquireWriteLock();
         try {
@@ -192,22 +193,32 @@ public class ApplicationBuilder {
                         appId));
                 return;
             } else {
+            	// Check whether given application is deployed
                 org.apache.stratos.autoscaler.pojo.policy.deployment.DeploymentPolicy policy =
                         PolicyManager.getInstance().getDeploymentPolicyByApplication(appId);
                 if (policy != null) {
                     log.warn(String.format("Application has been found in the ApplicationsTopology" +
-                                    ": [application-id] %s, Please unDeploy the Application Policy.",
+                                    ": [application-id] %s, Please unDeploy the Application Policy before deleting the Application definition.",
                             appId));
+                    return;
                 }
             }
+            
+            //get cluster data to send in event before deleting the application
+            appClusterDataToSend = new HashSet<ClusterDataHolder>();
+            Set<ClusterDataHolder> appClusterData = application.getClusterDataRecursively();
+            for (ClusterDataHolder currClusterData : appClusterData) {
+            	ClusterDataHolder newClusterData = new ClusterDataHolder(currClusterData.getServiceType(), currClusterData.getClusterId());
+            	appClusterDataToSend.add(newClusterData);
+            }
+            
             ApplicationHolder.removeApplication(appId);
 
         } finally {
             ApplicationHolder.releaseWriteLock();
         }
-
-        log.info("[Application] " + appId + " has been successfully undeployed");
-        ApplicationsEventPublisher.sendApplicationDeletedEvent(application);
+        
+        ApplicationsEventPublisher.sendApplicationDeletedEvent(appId, appClusterDataToSend);
     }
 
     public static boolean handleApplicationPolicyUndeployed(String appId) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/1433fc9c/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 61417a6..7d85f06 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
@@ -31,9 +31,9 @@ public class ApplicationsEventPublisher {
         publishEvent(new ApplicationCreatedEvent(application));
     }
     
-    public static void sendApplicationDeletedEvent (Application application) {
+    public static void sendApplicationDeletedEvent (String appId, Set<ClusterDataHolder> clusterData) {
     	
-    	publishEvent(new ApplicationDeletedEvent(application));
+    	publishEvent(new ApplicationDeletedEvent(appId, clusterData));
     }
 
     public static void sendApplicationInstanceCreatedEvent(String appId,

http://git-wip-us.apache.org/repos/asf/stratos/blob/1433fc9c/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/ApplicationDeletedEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/ApplicationDeletedEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/ApplicationDeletedEvent.java
index 32970f2..c28a892 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/ApplicationDeletedEvent.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/ApplicationDeletedEvent.java
@@ -18,7 +18,6 @@
  */
 package org.apache.stratos.messaging.event.applications;
 
-import org.apache.stratos.messaging.domain.applications.Application;
 import org.apache.stratos.messaging.domain.applications.ClusterDataHolder;
 import org.apache.stratos.messaging.event.Event;
 
@@ -29,25 +28,22 @@ import java.util.Set;
  * This event will be fired upon the application deletion is detected.
  */
 public class ApplicationDeletedEvent extends Event implements Serializable {
-    private static final long serialVersionUID = 2625412714611885089L; //FIXME - correct UID
 
-    private Application application;
-    //private String appId;
+	private static final long serialVersionUID = 7541596367530563340L;	
+	private String applicationId;
     private Set<ClusterDataHolder> clusterData;
 
-    public ApplicationDeletedEvent(Application application) {
-        this.application = application;
+    public ApplicationDeletedEvent(String applicationId, Set<ClusterDataHolder> clusterData) {
+        this.applicationId = applicationId;
+        this.clusterData = clusterData;
     }
 
     public String getAppId() {
-        return application.getKey();
+        return applicationId;
     }
 
     public Set<ClusterDataHolder> getClusterData() {
-        return application.getClusterDataRecursively();
+        return clusterData;
     }
     
-    public Application getApplication() {
-        return application;
-    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/1433fc9c/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationCreatedMessageProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationCreatedMessageProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationCreatedMessageProcessor.java
index 4b25dcd..a945cd8 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationCreatedMessageProcessor.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationCreatedMessageProcessor.java
@@ -88,11 +88,15 @@ public class ApplicationCreatedMessageProcessor extends MessageProcessor {
 
         // check if an Application with same name exists in applications
         if (applications.applicationExists(event.getApplication().getUniqueIdentifier())) {
-            log.warn("Application with id [ " + event.getApplication().getUniqueIdentifier() + " ] already exists");
-
+            if(log.isDebugEnabled()) {
+            	log.debug("Application with id [ " + event.getApplication().getUniqueIdentifier() + " ] already exists");	
+            }
         } else {
             // add application and the clusters to Topology
             applications.addApplication(event.getApplication());
+            if(log.isInfoEnabled()) {
+            	log.info("Application with id [ " + event.getApplication().getUniqueIdentifier() + " ] created");	
+            }
         }
 
         notifyEventListeners(event);

http://git-wip-us.apache.org/repos/asf/stratos/blob/1433fc9c/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationDeletedMessageProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationDeletedMessageProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationDeletedMessageProcessor.java
index c2fc99f..51bf741 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationDeletedMessageProcessor.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationDeletedMessageProcessor.java
@@ -22,7 +22,6 @@ 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.Applications;
-import org.apache.stratos.messaging.event.applications.ApplicationCreatedEvent;
 import org.apache.stratos.messaging.event.applications.ApplicationDeletedEvent;
 import org.apache.stratos.messaging.message.processor.MessageProcessor;
 import org.apache.stratos.messaging.message.processor.applications.updater.ApplicationsUpdater;
@@ -30,7 +29,7 @@ import org.apache.stratos.messaging.util.Util;
 
 public class ApplicationDeletedMessageProcessor extends MessageProcessor {
 
-    private static final Log log = LogFactory.getLog(ApplicationCreatedMessageProcessor.class);
+    private static final Log log = LogFactory.getLog(ApplicationDeletedMessageProcessor.class);
     private MessageProcessor nextProcessor;
 
     @Override
@@ -72,27 +71,24 @@ public class ApplicationDeletedMessageProcessor extends MessageProcessor {
         }
     }
 
-    private boolean doProcess(ApplicationDeletedEvent event, Applications applications) {
-
-        // check if required properties are available
-        if (event.getApplication() == null) {
-            String errorMsg = "Application object of application deleted event is invalid";
-            log.error(errorMsg);
-            throw new RuntimeException(errorMsg);
-        }
-
-        if (event.getApplication().getUniqueIdentifier() == null || event.getApplication().getUniqueIdentifier().isEmpty()) {
-            String errorMsg = "App id of application deleted event is invalid: [ " + event.getApplication().getUniqueIdentifier() + " ]";
+    private boolean doProcess(ApplicationDeletedEvent event, Applications applications) {    	
+        
+    	// check if required properties are available
+        if (event.getAppId() == null || event.getAppId().isEmpty()) {
+            String errorMsg = "App id of application deleted event is invalid: [ " + event.getAppId() + " ]";
             log.error(errorMsg);
             throw new RuntimeException(errorMsg);
         }
-
-        //TODO Check before removing whether there are any deloyments alive
-        
+      
     	// Remove application and clusters from topology
         applications.removeApplication(event.getAppId());
 
         notifyEventListeners(event);
+        
+        if (log.isInfoEnabled()) {
+        	log.info("[Application] " + event.getAppId() + " has been successfully removed");
+        }
+        
         return true;
     }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/1433fc9c/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
index 32f83c1..23893ea 100644
--- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
+++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
@@ -578,7 +578,7 @@ public class StratosApiV41 extends AbstractApi {
     @SuperTenantService(true)
     public Response deleteApplicationDefinition(@PathParam("applicationId") String applicationId)
             throws RestAPIException {
-        StratosApiV41Utils.removeApplicationDefinition(applicationId, getConfigContext(), getUsername(),
+		StratosApiV41Utils.removeApplicationDefinition(applicationId, getConfigContext(), getUsername(),
                 getTenantDomain());
         return Response.noContent().build();
     }


[2/3] stratos git commit: Added required event, listener, message processor and added to processor chain

Posted by re...@apache.org.
Added required event, listener, message processor and added to processor chain


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

Branch: refs/heads/4.1.0-test
Commit: 2ba19d85cdaaff007970329f8671707f3ed52356
Parents: fb8f23e
Author: Shiro <sh...@wso2.com>
Authored: Wed Dec 10 20:12:17 2014 +0530
Committer: Shiro <sh...@wso2.com>
Committed: Thu Dec 11 18:03:06 2014 +0530

----------------------------------------------------------------------
 .../applications/topic/ApplicationBuilder.java  |  4 +-
 .../topic/ApplicationsEventPublisher.java       |  5 +
 .../application/ApplicationTopicReceiver.java   | 14 +--
 .../applications/ApplicationDeletedEvent.java   | 53 +++++++++++
 .../ApplicationDeletedEventListener.java        | 27 ++++++
 .../ApplicationDeletedMessageProcessor.java     | 98 ++++++++++++++++++++
 .../ApplicationsMessageProcessorChain.java      |  6 ++
 7 files changed, 200 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/2ba19d85/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..81581b8 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
@@ -181,10 +181,11 @@ public class ApplicationBuilder {
             log.debug("Handling application unDeployment for [application-id] " + appId);
         }
         Set<ClusterDataHolder> clusterData;
+        Application application;
         ApplicationHolder.acquireWriteLock();
         try {
             Applications applications = ApplicationHolder.getApplications();
-            Application application = applications.getApplication(appId);
+            application = applications.getApplication(appId);
             //update the status of the Group
             if (application == null) {
                 log.warn(String.format("Application does not exist: [application-id] %s",
@@ -206,6 +207,7 @@ public class ApplicationBuilder {
         }
 
         log.info("[Application] " + appId + " has been successfully undeployed");
+        ApplicationsEventPublisher.sendApplicationDeletedEvent(application);
     }
 
     public static boolean handleApplicationPolicyUndeployed(String appId) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/2ba19d85/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..61417a6 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
@@ -30,6 +30,11 @@ public class ApplicationsEventPublisher {
 
         publishEvent(new ApplicationCreatedEvent(application));
     }
+    
+    public static void sendApplicationDeletedEvent (Application application) {
+    	
+    	publishEvent(new ApplicationDeletedEvent(application));
+    }
 
     public static void sendApplicationInstanceCreatedEvent(String appId,
                                                            ApplicationInstance applicationInstance) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/2ba19d85/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/receiver/application/ApplicationTopicReceiver.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/receiver/application/ApplicationTopicReceiver.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/receiver/application/ApplicationTopicReceiver.java
index 3530b80..08a9ea4 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/receiver/application/ApplicationTopicReceiver.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/receiver/application/ApplicationTopicReceiver.java
@@ -22,7 +22,9 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.cloud.controller.messaging.topology.TopologyBuilder;
 import org.apache.stratos.messaging.event.Event;
+import org.apache.stratos.messaging.event.applications.ApplicationDeletedEvent;
 import org.apache.stratos.messaging.event.applications.ApplicationInstanceTerminatedEvent;
+import org.apache.stratos.messaging.listener.applications.ApplicationDeletedEventListener;
 import org.apache.stratos.messaging.listener.applications.ApplicationInstanceTerminatedEventListener;
 import org.apache.stratos.messaging.listener.applications.ApplicationUndeployedEventListener;
 import org.apache.stratos.messaging.message.receiver.applications.ApplicationsEventReceiver;
@@ -68,16 +70,16 @@ public class ApplicationTopicReceiver {
 	}
 
     private void addEventListeners() {
-        /*applicationsEventReceiver.addEventListener(new ApplicationUndeployedEventListener() {
+        applicationsEventReceiver.addEventListener(new ApplicationDeletedEventListener() {
             @Override
             protected void onEvent(Event event) {
                 //Remove the application related data
-                ApplicationInstanceTerminatedEvent terminatedEvent = (ApplicationInstanceTerminatedEvent)event;
-                log.info("ApplicationTerminatedEvent received for [application] " + terminatedEvent.getAppId());
-                String appId = terminatedEvent.getAppId();
-                TopologyBuilder.handleApplicationClustersRemoved(appId, terminatedEvent.getClusterData());
+                ApplicationDeletedEvent deletedEvent = (ApplicationDeletedEvent)event;
+                log.info("ApplicationDeletedEvent received for [application] " + deletedEvent.getAppId());
+                String appId = deletedEvent.getAppId();
+                TopologyBuilder.handleApplicationClustersRemoved(appId, deletedEvent.getClusterData());
             }
-        });*/
+        });
     }
 
 	public void setExecutorService(ExecutorService executorService) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/2ba19d85/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/ApplicationDeletedEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/ApplicationDeletedEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/ApplicationDeletedEvent.java
new file mode 100644
index 0000000..32970f2
--- /dev/null
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/ApplicationDeletedEvent.java
@@ -0,0 +1,53 @@
+/*
+ * 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.applications;
+
+import org.apache.stratos.messaging.domain.applications.Application;
+import org.apache.stratos.messaging.domain.applications.ClusterDataHolder;
+import org.apache.stratos.messaging.event.Event;
+
+import java.io.Serializable;
+import java.util.Set;
+
+/**
+ * This event will be fired upon the application deletion is detected.
+ */
+public class ApplicationDeletedEvent extends Event implements Serializable {
+    private static final long serialVersionUID = 2625412714611885089L; //FIXME - correct UID
+
+    private Application application;
+    //private String appId;
+    private Set<ClusterDataHolder> clusterData;
+
+    public ApplicationDeletedEvent(Application application) {
+        this.application = application;
+    }
+
+    public String getAppId() {
+        return application.getKey();
+    }
+
+    public Set<ClusterDataHolder> getClusterData() {
+        return application.getClusterDataRecursively();
+    }
+    
+    public Application getApplication() {
+        return application;
+    }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/2ba19d85/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/applications/ApplicationDeletedEventListener.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/applications/ApplicationDeletedEventListener.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/applications/ApplicationDeletedEventListener.java
new file mode 100644
index 0000000..3d9cccc
--- /dev/null
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/applications/ApplicationDeletedEventListener.java
@@ -0,0 +1,27 @@
+/*
+ * 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.applications;
+
+import org.apache.stratos.messaging.listener.EventListener;
+
+/**
+ * This listener will get triggered upon the application deleted event.
+ */
+public abstract class ApplicationDeletedEventListener extends EventListener {
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/2ba19d85/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationDeletedMessageProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationDeletedMessageProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationDeletedMessageProcessor.java
new file mode 100644
index 0000000..c2fc99f
--- /dev/null
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationDeletedMessageProcessor.java
@@ -0,0 +1,98 @@
+/*
+ * 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.applications;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.messaging.domain.applications.Applications;
+import org.apache.stratos.messaging.event.applications.ApplicationCreatedEvent;
+import org.apache.stratos.messaging.event.applications.ApplicationDeletedEvent;
+import org.apache.stratos.messaging.message.processor.MessageProcessor;
+import org.apache.stratos.messaging.message.processor.applications.updater.ApplicationsUpdater;
+import org.apache.stratos.messaging.util.Util;
+
+public class ApplicationDeletedMessageProcessor 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) {
+
+        Applications applications = (Applications) object;
+
+        if (ApplicationDeletedEvent.class.getName().equals(type)) {
+            if (!applications.isInitialized()) {
+                return false;
+            }
+
+            ApplicationDeletedEvent event = (ApplicationDeletedEvent) Util.jsonToObject(message, ApplicationDeletedEvent.class);
+            if (event == null) {
+                log.error("Unable to convert the JSON message to ApplicationDeletedEvent");
+                return false;
+            }
+
+            ApplicationsUpdater.acquireWriteLockForApplications();
+            try {
+                return doProcess(event, applications);
+
+            } finally {
+                ApplicationsUpdater.releaseWriteLockForApplications();
+            }
+
+        } else {
+            if (nextProcessor != null) {
+                // ask the next processor to take care of the message.
+                return nextProcessor.process(type, message, applications);
+            } else {
+                throw new RuntimeException(String.format("Failed to process message using available message processors: [type] %s [body] %s", type, message));
+            }
+        }
+    }
+
+    private boolean doProcess(ApplicationDeletedEvent event, Applications applications) {
+
+        // check if required properties are available
+        if (event.getApplication() == null) {
+            String errorMsg = "Application object of application deleted event is invalid";
+            log.error(errorMsg);
+            throw new RuntimeException(errorMsg);
+        }
+
+        if (event.getApplication().getUniqueIdentifier() == null || event.getApplication().getUniqueIdentifier().isEmpty()) {
+            String errorMsg = "App id of application deleted event is invalid: [ " + event.getApplication().getUniqueIdentifier() + " ]";
+            log.error(errorMsg);
+            throw new RuntimeException(errorMsg);
+        }
+
+        //TODO Check before removing whether there are any deloyments alive
+        
+    	// Remove application and clusters from topology
+        applications.removeApplication(event.getAppId());
+
+        notifyEventListeners(event);
+        return true;
+    }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/2ba19d85/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationsMessageProcessorChain.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationsMessageProcessorChain.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationsMessageProcessorChain.java
index 98b34ad..916a96a 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationsMessageProcessorChain.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationsMessageProcessorChain.java
@@ -39,6 +39,7 @@ public class ApplicationsMessageProcessorChain extends MessageProcessorChain {
     private ApplicationInstanceCreatedMessageProcessor applicationInstanceCreatedMessageProcessor;
     private ApplicationInstanceActivatedMessageProcessor applicationActivatedMessageProcessor;
     private ApplicationCreatedMessageProcessor applicationCreatedMessageProcessor;
+    private ApplicationDeletedMessageProcessor applicationDeletedMessageProcessor;
     private ApplicationInstanceInactivatedMessageProcessor applicationInactivatedMessageProcessor;
     private ApplicationInstanceTerminatedMessageProcessor applicationTerminatedMessageProcessor;
     private ApplicationInstanceTerminatingMessageProcessor applicationTerminatingMessageProcessor;
@@ -70,6 +71,9 @@ public class ApplicationsMessageProcessorChain extends MessageProcessorChain {
 
         applicationCreatedMessageProcessor = new ApplicationCreatedMessageProcessor();
         add(applicationCreatedMessageProcessor);
+        
+        applicationDeletedMessageProcessor = new ApplicationDeletedMessageProcessor();
+        add(applicationDeletedMessageProcessor);
 
         applicationInactivatedMessageProcessor = new ApplicationInstanceInactivatedMessageProcessor();
         add(applicationInactivatedMessageProcessor);
@@ -104,6 +108,8 @@ public class ApplicationsMessageProcessorChain extends MessageProcessorChain {
             applicationInstanceCreatedMessageProcessor.addEventListener(eventListener);
         } else if (eventListener instanceof ApplicationCreatedEventListener) {
             applicationCreatedMessageProcessor.addEventListener(eventListener);
+        } else if (eventListener instanceof ApplicationDeletedEventListener) {
+            applicationDeletedMessageProcessor.addEventListener(eventListener); 
         } else if (eventListener instanceof ApplicationInstanceActivatedEventListener) {
             applicationActivatedMessageProcessor.addEventListener(eventListener);
         } else if (eventListener instanceof ApplicationInstanceInactivatedEventListener) {


[3/3] stratos git commit: This closes #149

Posted by re...@apache.org.
This closes #149

Merge branch 'app-delete-on-test' of https://github.com/shirolk/stratos into 4.1.0-test


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

Branch: refs/heads/4.1.0-test
Commit: b1f3b9bd3064c3352345598128dcb353086a6ab4
Parents: d64f314 1433fc9
Author: reka <rt...@gmail.com>
Authored: Thu Dec 11 19:24:50 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Thu Dec 11 19:24:50 2014 +0530

----------------------------------------------------------------------
 .../autoscaler/api/AutoScalerServiceImpl.java   |  3 +-
 .../applications/topic/ApplicationBuilder.java  | 25 ++++--
 .../topic/ApplicationsEventPublisher.java       |  5 ++
 .../application/ApplicationTopicReceiver.java   | 14 +--
 .../applications/ApplicationDeletedEvent.java   | 49 ++++++++++
 .../ApplicationDeletedEventListener.java        | 27 ++++++
 .../ApplicationCreatedMessageProcessor.java     |  8 +-
 .../ApplicationDeletedMessageProcessor.java     | 94 ++++++++++++++++++++
 .../ApplicationsMessageProcessorChain.java      |  6 ++
 .../rest/endpoint/api/StratosApiV41.java        |  2 +-
 10 files changed, 216 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/b1f3b9bd/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/stratos/blob/b1f3b9bd/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationsEventPublisher.java
----------------------------------------------------------------------