You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by is...@apache.org on 2014/08/28 11:57:33 UTC
[02/50] [abbrv] git commit: Unsubscription from a multi-tenant
cartridge doesn't clean up the GIT repository inside the Cartridge instances
Unsubscription from a multi-tenant cartridge doesn't clean up the GIT repository inside the Cartridge instances
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/ee75407f
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/ee75407f
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/ee75407f
Branch: refs/heads/4.0.0-grouping
Commit: ee75407f478a98f35f0f5dbea75c9fbc3dd4a39d
Parents: 9f0c67e
Author: Udara Liyanage <ud...@wso2.com>
Authored: Mon Aug 18 12:51:19 2014 +0530
Committer: Udara Liyanage <ud...@wso2.com>
Committed: Mon Aug 18 12:55:11 2014 +0530
----------------------------------------------------------------------
.../stratos/cartridge/agent/CartridgeAgent.java | 44 ++++++++++++++
.../git/impl/GitBasedArtifactRepository.java | 33 +++++++++++
.../extensions/DefaultExtensionHandler.java | 60 +++++++++++++++++---
.../agent/extensions/ExtensionHandler.java | 9 +++
.../agent/util/CartridgeAgentConstants.java | 2 +
.../cartridge/agent/util/ExtensionUtils.java | 30 ++++++++++
.../distribution/src/main/assembly/bin.xml | 2 +
.../distribution/src/main/bin/stratos.sh | 4 +-
.../src/main/extensions/artifacts-copy.sh | 3 +
.../src/main/extensions/tenant-subscribed.sh | 28 +++++++++
.../src/main/extensions/tenant-unsubscribed.sh | 28 +++++++++
11 files changed, 233 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/ee75407f/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java
index 35b9973..bce3c08 100644
--- a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java
+++ b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java
@@ -50,6 +50,8 @@ import org.apache.stratos.messaging.message.receiver.tenant.TenantEventReceiver;
import org.apache.stratos.messaging.event.tenant.CompleteTenantEvent;
import org.apache.stratos.messaging.event.tenant.SubscriptionDomainAddedEvent;
import org.apache.stratos.messaging.event.tenant.SubscriptionDomainRemovedEvent;
+import org.apache.stratos.messaging.event.tenant.TenantSubscribedEvent;
+import org.apache.stratos.messaging.event.tenant.TenantUnSubscribedEvent;
import org.apache.stratos.messaging.event.topology.*;
import org.apache.stratos.messaging.listener.instance.notifier.ArtifactUpdateEventListener;
import org.apache.stratos.messaging.listener.instance.notifier.InstanceCleanupClusterEventListener;
@@ -57,6 +59,8 @@ import org.apache.stratos.messaging.listener.instance.notifier.InstanceCleanupMe
import org.apache.stratos.messaging.listener.tenant.CompleteTenantEventListener;
import org.apache.stratos.messaging.listener.tenant.SubscriptionDomainsAddedEventListener;
import org.apache.stratos.messaging.listener.tenant.SubscriptionDomainsRemovedEventListener;
+import org.apache.stratos.messaging.listener.tenant.TenantSubscribedEventListener;
+import org.apache.stratos.messaging.listener.tenant.TenantUnSubscribedEventListener;
import org.apache.stratos.messaging.listener.topology.*;
import org.apache.stratos.messaging.message.receiver.instance.notifier.InstanceNotifierEventReceiver;
import org.apache.stratos.messaging.message.receiver.tenant.TenantEventReceiver;
@@ -502,6 +506,46 @@ public class CartridgeAgent implements Runnable {
}
});
+ tenantEventReceiver.addEventListener(new TenantSubscribedEventListener() {
+ @Override
+ protected void onEvent(Event event) {
+ try {
+ TenantManager.acquireReadLock();
+ if (log.isDebugEnabled()) {
+ log.debug("Tenant subscribed event received");
+ }
+ TenantSubscribedEvent tenantSubscribedEvent = (TenantSubscribedEvent) event;
+ extensionHandler.onTenantSubscribedEvent(tenantSubscribedEvent);
+ } catch (Exception e) {
+ if (log.isErrorEnabled()) {
+ log.error("Error processing tenant subscribed event", e);
+ }
+ } finally {
+ TenantManager.releaseReadLock();
+ }
+ }
+ });
+
+ tenantEventReceiver.addEventListener(new TenantUnSubscribedEventListener() {
+ @Override
+ protected void onEvent(Event event) {
+ try {
+ TenantManager.acquireReadLock();
+ if (log.isDebugEnabled()) {
+ log.debug("Tenant unSubscribed event received");
+ }
+ TenantUnSubscribedEvent tenantUnSubscribedEvent = (TenantUnSubscribedEvent) event;
+ extensionHandler.onTenantUnSubscribedEvent(tenantUnSubscribedEvent);
+ } catch (Exception e) {
+ if (log.isErrorEnabled()) {
+ log.error("Error processing tenant unSubscribed event", e);
+ }
+ } finally {
+ TenantManager.releaseReadLock();
+ }
+ }
+ });
+
Thread tenantEventReceiverThread = new Thread(tenantEventReceiver);
tenantEventReceiverThread.start();
if (log.isInfoEnabled()) {
http://git-wip-us.apache.org/repos/asf/stratos/blob/ee75407f/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/artifact/deployment/synchronizer/git/impl/GitBasedArtifactRepository.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/artifact/deployment/synchronizer/git/impl/GitBasedArtifactRepository.java b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/artifact/deployment/synchronizer/git/impl/GitBasedArtifactRepository.java
index ecb436e..49338a6 100644
--- a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/artifact/deployment/synchronizer/git/impl/GitBasedArtifactRepository.java
+++ b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/artifact/deployment/synchronizer/git/impl/GitBasedArtifactRepository.java
@@ -29,6 +29,8 @@ import org.apache.stratos.cartridge.agent.artifact.deployment.synchronizer.git.i
import org.apache.stratos.cartridge.agent.artifact.deployment.synchronizer.git.util.Utilities;
import org.apache.stratos.cartridge.agent.config.CartridgeAgentConfiguration;
import org.apache.stratos.cartridge.agent.extensions.ExtensionHandler;
+import org.apache.stratos.cartridge.agent.util.CartridgeAgentConstants;
+import org.apache.stratos.cartridge.agent.util.ExtensionUtils;
import org.eclipse.jgit.api.*;
import org.eclipse.jgit.api.errors.*;
import org.eclipse.jgit.lib.Ref;
@@ -37,6 +39,7 @@ import org.eclipse.jgit.lib.StoredConfig;
import org.eclipse.jgit.storage.file.FileRepository;
import org.eclipse.jgit.transport.SshSessionFactory;
import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider;
+import org.apache.commons.io.*;
import java.io.File;
import java.io.IOException;
@@ -246,6 +249,10 @@ public class GitBasedArtifactRepository {
return tenantToRepoContextMap.get(tenantId);
}
+ private void removeGitRepoContext(int tenantId) {
+ tenantToRepoContextMap.remove(tenantId);
+ }
+
/**
* Commits any changes in the local repository to the relevant remote repository
*
@@ -521,6 +528,32 @@ public class GitBasedArtifactRepository {
}
}
+ public boolean removeRepo(int tenantId) throws IOException {
+ RepositoryContext gitRepoCtx = retrieveCachedGitContext(tenantId);
+
+ log.info("git repository deleted for tenant " + gitRepoCtx.getTenantId());
+
+ // Stop the artifact update task
+ gitRepoCtx.getArtifactSyncSchedular().shutdown();
+ // Remove git repo for the tenant
+ FileUtils.deleteDirectory(gitRepoCtx.getLocalRepo().getDirectory());
+ FileUtils.deleteDirectory(new File(gitRepoCtx.getGitLocalRepoPath()));
+
+ removeGitRepoContext(tenantId);
+
+ if (tenantId == -1234) {
+ if (CartridgeAgentConfiguration.getInstance().isMultitenant()) {
+ ExtensionUtils.executeCopyArtifactsExtension(
+ CartridgeAgentConstants.SUPERTENANT_TEMP_PATH,
+ CartridgeAgentConfiguration.getInstance().getAppPath() + "/repository/deployment/server/"
+ );
+ }
+ }
+
+
+ return true;
+ }
+
private boolean pullAndHandleErrors (RepositoryContext gitRepoCtx) {
try {
http://git-wip-us.apache.org/repos/asf/stratos/blob/ee75407f/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/extensions/DefaultExtensionHandler.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/extensions/DefaultExtensionHandler.java b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/extensions/DefaultExtensionHandler.java
index e861819..c1a134f 100644
--- a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/extensions/DefaultExtensionHandler.java
+++ b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/extensions/DefaultExtensionHandler.java
@@ -39,12 +39,15 @@ import org.apache.stratos.messaging.event.instance.notifier.InstanceCleanupMembe
import org.apache.stratos.messaging.event.tenant.CompleteTenantEvent;
import org.apache.stratos.messaging.event.tenant.SubscriptionDomainAddedEvent;
import org.apache.stratos.messaging.event.tenant.SubscriptionDomainRemovedEvent;
+import org.apache.stratos.messaging.event.tenant.TenantSubscribedEvent;
+import org.apache.stratos.messaging.event.tenant.TenantUnSubscribedEvent;
import org.apache.stratos.messaging.event.topology.*;
import org.apache.stratos.messaging.message.receiver.tenant.TenantManager;
import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
import org.wso2.andes.util.Serial;
import java.io.File;
+import java.io.IOException;
import java.lang.reflect.Type;
import java.util.*;
@@ -66,6 +69,13 @@ public class DefaultExtensionHandler implements ExtensionHandler {
if (log.isDebugEnabled()) {
log.debug("Processing instance started event...");
}
+
+ if (CartridgeAgentConfiguration.getInstance().isMultitenant()) {
+ ExtensionUtils.executeCopyArtifactsExtension(
+ CartridgeAgentConfiguration.getInstance().getAppPath() + "/repository/deployment/server/",
+ CartridgeAgentConstants.SUPERTENANT_TEMP_PATH);
+ }
+
Map<String, String> env = new HashMap<String, String>();
ExtensionUtils.executeInstanceStartedExtension(env);
} catch (Exception e) {
@@ -173,15 +183,6 @@ public class DefaultExtensionHandler implements ExtensionHandler {
} else {
log.info("Artifact updating task disabled");
}
-
- // If supert tenant temp app path is available,
- // copy the artifacts to carbon server's deployment path
- String src = CartridgeAgentConstants.SUPERTENANT_TEMP_PATH;
- if (new File(src).exists() && tenantId.equals("-1234")) {
- ExtensionUtils.executeCopyArtifactsExtension(src,
- CartridgeAgentConfiguration.getInstance().getAppPath()+ "/repository/deployment/server/");
- }
-
}
}
@@ -989,4 +990,45 @@ public class DefaultExtensionHandler implements ExtensionHandler {
ExtensionUtils.executeCopyArtifactsExtension(src, des);
}
+ @Override
+ public void onTenantSubscribedEvent(TenantSubscribedEvent tenantSubscribedEvent) {
+ if (log.isInfoEnabled()) {
+ log.info(String.format("Tenant subscribed event received: [tenant] %s [service] %s [cluster] %s",
+ tenantSubscribedEvent.getTenantId(), tenantSubscribedEvent.getServiceName(),
+ tenantSubscribedEvent.getClusterIds())
+ );
+ }
+
+ if (log.isDebugEnabled()) {
+ String msg = gson.toJson(tenantSubscribedEvent);
+ log.debug("Tenant subscribed event msg:" + msg);
+ }
+ Map<String, String> env = new HashMap<String, String>();
+ ExtensionUtils.executeTenantSubscribedExtension(env);
+ }
+
+ @Override
+ public void onTenantUnSubscribedEvent(TenantUnSubscribedEvent tenantUnSubscribedEvent) {
+ if (log.isInfoEnabled()) {
+ log.info(String.format("Tenant unsubscribed event received: [tenant] %s [service] %s [cluster] %s",
+ tenantUnSubscribedEvent.getTenantId(), tenantUnSubscribedEvent.getServiceName(),
+ tenantUnSubscribedEvent.getClusterIds()));
+ }
+
+ if (log.isDebugEnabled()) {
+ String msg = gson.toJson(tenantUnSubscribedEvent);
+ log.debug("Tenant unsubscribed event msg:" + msg);
+ }
+
+ try {
+ if (CartridgeAgentConfiguration.getInstance().getServiceName().equals(tenantUnSubscribedEvent.getServiceName())) {
+ GitBasedArtifactRepository.getInstance().removeRepo(tenantUnSubscribedEvent.getTenantId());
+ }
+ } catch (Exception e) {
+ log.error(e);
+ }
+ Map<String, String> env = new HashMap<String, String>();
+ ExtensionUtils.executeTenantUnSubscribedExtension(env);
+ }
+
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/stratos/blob/ee75407f/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/extensions/ExtensionHandler.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/extensions/ExtensionHandler.java b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/extensions/ExtensionHandler.java
index 1ab380c..35cebbd 100644
--- a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/extensions/ExtensionHandler.java
+++ b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/extensions/ExtensionHandler.java
@@ -25,8 +25,12 @@ import org.apache.stratos.messaging.event.instance.notifier.InstanceCleanupMembe
import org.apache.stratos.messaging.event.tenant.CompleteTenantEvent;
import org.apache.stratos.messaging.event.tenant.SubscriptionDomainAddedEvent;
import org.apache.stratos.messaging.event.tenant.SubscriptionDomainRemovedEvent;
+import org.apache.stratos.messaging.event.tenant.TenantSubscribedEvent;
+import org.apache.stratos.messaging.event.tenant.TenantUnSubscribedEvent;
import org.apache.stratos.messaging.event.topology.*;
+import java.io.IOException;
+
public interface ExtensionHandler {
public void onInstanceStartedEvent();
@@ -61,4 +65,9 @@ public interface ExtensionHandler {
public void onSubscriptionDomainRemovedEvent(SubscriptionDomainRemovedEvent subscriptionDomainRemovedEvent);
public void onCopyArtifactsExtension(String src, String des);
+
+ public void onTenantSubscribedEvent(TenantSubscribedEvent tenantSubscribedEvent);
+
+ public void onTenantUnSubscribedEvent(TenantUnSubscribedEvent tenantUnSubscribedEvent);
+
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/stratos/blob/ee75407f/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/util/CartridgeAgentConstants.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/util/CartridgeAgentConstants.java b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/util/CartridgeAgentConstants.java
index d7c39f6..d0c4bc9 100644
--- a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/util/CartridgeAgentConstants.java
+++ b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/util/CartridgeAgentConstants.java
@@ -87,6 +87,8 @@ public class CartridgeAgentConstants implements Serializable{
public static final String SUBSCRIPTION_DOMAIN_ADDED_SCRIPT = "extension.subscription.domain.added";
public static final String SUBSCRIPTION_DOMAIN_REMOVED_SCRIPT = "extension.subscription.domain.removed";
public static final String ARTIFACTS_COPY_SCRIPT = "extension.artifacts.copy";
+ public static final String TENANT_SUBSCRIBED_SCRIPT = "extension.tenant.subscribed";
+ public static final String TENANT_UNSUBSCRIBED_SCRIPT = "extension.tenant.unsubscribed";
public static final String SERVICE_GROUP_TOPOLOGY_KEY = "payload_parameter.SERIVCE_GROUP";
public static final String CLUSTERING_TOPOLOGY_KEY = "payload_parameter.CLUSTERING";
http://git-wip-us.apache.org/repos/asf/stratos/blob/ee75407f/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/util/ExtensionUtils.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/util/ExtensionUtils.java b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/util/ExtensionUtils.java
index 51e7c30..ac61f86 100644
--- a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/util/ExtensionUtils.java
+++ b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/util/ExtensionUtils.java
@@ -501,6 +501,36 @@ public class ExtensionUtils {
}
}
+ public static void executeTenantSubscribedExtension(Map<String, String> envParameters) {
+ try {
+ if (log.isDebugEnabled()) {
+ log.debug("Executing tenant subscribed extension");
+ }
+ String script = System.getProperty(CartridgeAgentConstants.TENANT_SUBSCRIBED_SCRIPT);
+ String command = prepareCommand(script);
+ addPayloadParameters(envParameters);
+ cleanProcessParameters(envParameters);
+ String output = CommandUtils.executeCommand(command, envParameters);
+ } catch (Exception e) {
+ log.error("Could not execute tenant subscribed extension", e);
+ }
+ }
+
+ public static void executeTenantUnSubscribedExtension(Map<String, String> envParameters) {
+ try {
+ if (log.isDebugEnabled()) {
+ log.debug("Executing tenant un-subscribed extension");
+ }
+ String script = System.getProperty(CartridgeAgentConstants.TENANT_UNSUBSCRIBED_SCRIPT);
+ String command = prepareCommand(script);
+ addPayloadParameters(envParameters);
+ cleanProcessParameters(envParameters);
+ String output = CommandUtils.executeCommand(command, envParameters);
+ } catch (Exception e) {
+ log.error("Could not execute tenant un-subscribed extension", e);
+ }
+ }
+
public static boolean isTopologyInitialized() {
TopologyManager.acquireReadLock();
boolean active = TopologyManager.getTopology().isInitialized();
http://git-wip-us.apache.org/repos/asf/stratos/blob/ee75407f/products/cartridge-agent/modules/distribution/src/main/assembly/bin.xml
----------------------------------------------------------------------
diff --git a/products/cartridge-agent/modules/distribution/src/main/assembly/bin.xml b/products/cartridge-agent/modules/distribution/src/main/assembly/bin.xml
index 20bbf10..a433513 100644
--- a/products/cartridge-agent/modules/distribution/src/main/assembly/bin.xml
+++ b/products/cartridge-agent/modules/distribution/src/main/assembly/bin.xml
@@ -61,6 +61,8 @@
<include>subscription-domain-added.sh</include>
<include>subscription-domain-removed.sh</include>
<include>artifacts-copy.sh</include>
+ <include>tenant-subscribed.sh</include>
+ <include>tenant-unsubscribed.sh</include>
</includes>
</fileSet>
<fileSet>
http://git-wip-us.apache.org/repos/asf/stratos/blob/ee75407f/products/cartridge-agent/modules/distribution/src/main/bin/stratos.sh
----------------------------------------------------------------------
diff --git a/products/cartridge-agent/modules/distribution/src/main/bin/stratos.sh b/products/cartridge-agent/modules/distribution/src/main/bin/stratos.sh
index 0c24f39..2636e74 100644
--- a/products/cartridge-agent/modules/distribution/src/main/bin/stratos.sh
+++ b/products/cartridge-agent/modules/distribution/src/main/bin/stratos.sh
@@ -67,7 +67,9 @@ properties="-Dmb.ip=MB-IP
-Dextension.complete.tenant=complete-tenant.sh
-Dextension.subscription.domain.added=subscription-domain-added.sh
-Dextension.subscription.domain.removed=subscription-domain-removed.sh
- -Dextension.artifacts.copy=artifacts-copy.sh"
+ -Dextension.artifacts.copy=artifacts-copy.sh
+ -Dextension.tenant.subscribed=tenant-subscribed.sh
+ -Dextension.tenant.unsubscribed=tenant-unsubscribed.sh"
# Uncomment below line to enable remote debugging
#debug="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005"
http://git-wip-us.apache.org/repos/asf/stratos/blob/ee75407f/products/cartridge-agent/modules/distribution/src/main/extensions/artifacts-copy.sh
----------------------------------------------------------------------
diff --git a/products/cartridge-agent/modules/distribution/src/main/extensions/artifacts-copy.sh b/products/cartridge-agent/modules/distribution/src/main/extensions/artifacts-copy.sh
index 5cad830..baa0aeb 100644
--- a/products/cartridge-agent/modules/distribution/src/main/extensions/artifacts-copy.sh
+++ b/products/cartridge-agent/modules/distribution/src/main/extensions/artifacts-copy.sh
@@ -25,5 +25,8 @@
#
log=/var/log/apache-stratos/cartridge-agent-extensions.log
+if [[ ! -d $2 ]]; then
+ mkdir -p $2
+fi
cp -rf $1* $2
echo "Artifacts Copied" | tee -a $log
http://git-wip-us.apache.org/repos/asf/stratos/blob/ee75407f/products/cartridge-agent/modules/distribution/src/main/extensions/tenant-subscribed.sh
----------------------------------------------------------------------
diff --git a/products/cartridge-agent/modules/distribution/src/main/extensions/tenant-subscribed.sh b/products/cartridge-agent/modules/distribution/src/main/extensions/tenant-subscribed.sh
new file mode 100644
index 0000000..66f004c
--- /dev/null
+++ b/products/cartridge-agent/modules/distribution/src/main/extensions/tenant-subscribed.sh
@@ -0,0 +1,28 @@
+#!/bin/bash
+# --------------------------------------------------------------
+#
+# 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.
+#
+# --------------------------------------------------------------
+# This extension script will be executed once the update artifacts
+# event is received and they are copied to the given path.
+# --------------------------------------------------------------
+#
+
+log=/var/log/apache-stratos/cartridge-agent-extensions.log
+echo `date`": Tenant Subscribed Event" | tee -a $log
http://git-wip-us.apache.org/repos/asf/stratos/blob/ee75407f/products/cartridge-agent/modules/distribution/src/main/extensions/tenant-unsubscribed.sh
----------------------------------------------------------------------
diff --git a/products/cartridge-agent/modules/distribution/src/main/extensions/tenant-unsubscribed.sh b/products/cartridge-agent/modules/distribution/src/main/extensions/tenant-unsubscribed.sh
new file mode 100644
index 0000000..651015d
--- /dev/null
+++ b/products/cartridge-agent/modules/distribution/src/main/extensions/tenant-unsubscribed.sh
@@ -0,0 +1,28 @@
+#!/bin/bash
+# --------------------------------------------------------------
+#
+# 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.
+#
+# --------------------------------------------------------------
+# This extension script will be executed once the update artifacts
+# event is received and they are copied to the given path.
+# --------------------------------------------------------------
+#
+
+log=/var/log/apache-stratos/cartridge-agent-extensions.log
+echo `date`": Tenant UnSubscribed Event" | tee -a $log