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:23 UTC
[2/3] stratos git commit: Added required event, listener,
message processor and added to processor chain
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) {