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/11/23 16:14:47 UTC

[2/2] stratos git commit: adding instance id to applications events and topology envets

adding instance id to applications events and topology envets


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

Branch: refs/heads/master
Commit: 0e0c7102e8a9519e84fe71b2d01851645dd688b5
Parents: ce6856f
Author: reka <rt...@gmail.com>
Authored: Sun Nov 23 20:42:35 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Sun Nov 23 20:44:30 2014 +0530

----------------------------------------------------------------------
 .../applications/topic/ApplicationBuilder.java  | 235 ++++++++++---------
 .../topic/ApplicationsEventPublisher.java       |  26 +-
 .../publisher/ClusterStatusEventPublisher.java  |  22 +-
 .../AutoscalerTopologyEventReceiver.java        |   5 +-
 .../monitor/cluster/VMClusterMonitor.java       |   7 +-
 .../status/checker/StatusChecker.java           |  15 +-
 .../domain/applications/Application.java        |   8 +-
 .../messaging/domain/applications/Group.java    |   8 +-
 .../domain/applications/ParentComponent.java    |  15 +-
 .../applications/ApplicationActivatedEvent.java |   8 +-
 .../event/applications/GroupActivatedEvent.java |   8 +-
 .../applications/GroupInactivatedEvent.java     |  16 +-
 .../applications/GroupMaintenanceModeEvent.java |  12 +-
 .../applications/GroupReadyToShutdownEvent.java |  12 +-
 .../event/applications/GroupResetEvent.java     |   8 +-
 .../applications/GroupTerminatedEvent.java      |   8 +-
 .../applications/GroupTerminatingEvent.java     |   8 +-
 .../ClusterStatusClusterActivatedEvent.java     |   8 +-
 .../ClusterStatusClusterInactivateEvent.java    |   8 +-
 .../status/ClusterStatusClusterResetEvent.java  |   8 +-
 .../ClusterStatusClusterTerminatedEvent.java    |   8 +-
 .../ClusterStatusClusterTerminatingEvent.java   |   8 +-
 .../event/health/stat/MemberFaultEvent.java     |   9 +-
 .../event/topology/ClusterInactivateEvent.java  |   9 +-
 .../event/topology/ClusterResetEvent.java       |  10 +-
 .../event/topology/ClusterTerminatedEvent.java  |   9 +-
 .../event/topology/ClusterTerminatingEvent.java |   7 +-
 .../event/topology/InstanceSpawnedEvent.java    |  10 +-
 .../event/topology/MemberActivatedEvent.java    |   9 +-
 .../topology/MemberMaintenanceModeEvent.java    |  10 +-
 .../topology/MemberReadyToShutdownEvent.java    |  10 +-
 .../event/topology/MemberStartedEvent.java      |  11 +-
 .../event/topology/MemberSuspendedEvent.java    |   9 +-
 .../event/topology/MemberTerminatedEvent.java   |   9 +-
 34 files changed, 387 insertions(+), 186 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/0e0c7102/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 4959e51..1911862 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
@@ -24,12 +24,14 @@ import org.apache.stratos.autoscaler.AutoscalerContext;
 import org.apache.stratos.autoscaler.applications.ApplicationHolder;
 import org.apache.stratos.autoscaler.applications.pojo.ApplicationClusterContext;
 import org.apache.stratos.autoscaler.client.CloudControllerClient;
-import org.apache.stratos.autoscaler.event.publisher.ClusterStatusEventPublisher;
 import org.apache.stratos.autoscaler.monitor.application.ApplicationMonitor;
 import org.apache.stratos.autoscaler.monitor.group.GroupMonitor;
 import org.apache.stratos.messaging.domain.applications.*;
 import org.apache.stratos.messaging.domain.instance.context.ApplicationInstanceContext;
 import org.apache.stratos.messaging.domain.instance.context.GroupInstanceContext;
+import org.apache.stratos.messaging.domain.topology.Cluster;
+import org.apache.stratos.messaging.domain.topology.Service;
+import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
 
 import java.util.Collection;
 import java.util.Set;
@@ -107,7 +109,7 @@ public class ApplicationBuilder {
         }
     }
 
-    public static void handleApplicationActivatedEvent(String appId) {
+    public static void handleApplicationActivatedEvent(String appId, String instanceId) {
         if (log.isDebugEnabled()) {
             log.debug("Handling application activation event: [application-id] " + appId);
         }
@@ -122,15 +124,17 @@ public class ApplicationBuilder {
         }
 
         ApplicationStatus status = ApplicationStatus.Active;
-        if (application.isStateTransitionValid(status, null)) {
+        ApplicationInstanceContext context = application.getInstanceContexts(instanceId);
+        if (context.isStateTransitionValid(status)) {
             //setting the status, persist and publish
-            application.setStatus(status, null);
-            updateApplicationMonitor(appId, status);
+            application.setStatus(status, instanceId);
+            updateApplicationMonitor(appId, status, instanceId);
             ApplicationHolder.persistApplication(application);
-            ApplicationsEventPublisher.sendApplicationActivatedEvent(appId);
+            ApplicationsEventPublisher.sendApplicationActivatedEvent(appId, instanceId);
         } else {
             log.warn(String.format("Application state transition is not valid: [application-id] %s " +
-                    " [current-status] %s [status-requested] %s", appId, application.getStatus(null), status));
+                    " [instance-id] %s [current-status] %s [status-requested] %s",
+                    appId, instanceId, context.getStatus(), status));
         }
     }
 
@@ -138,44 +142,62 @@ public class ApplicationBuilder {
         if (log.isDebugEnabled()) {
             log.debug("Handling application terminating event: [application-id] " + appId);
         }
-
-        Applications applications = ApplicationHolder.getApplications();
-        Application application = applications.getApplication(appId);
-        //update the status of the Group
-        if (application == null) {
-            log.warn(String.format("Application does not exist: [application-id] %s",
-                    appId));
-            return;
-        }
-
-        Set<ClusterDataHolder> clusterData = application.getClusterDataRecursively();
-
+        Set<ClusterDataHolder> clusterData;
+        ApplicationHolder.acquireWriteLock();
         try {
-            ApplicationHolder.acquireWriteLock();
+            Applications applications = ApplicationHolder.getApplications();
+            Application application = applications.getApplication(appId);
+            //update the status of the Group
+            if (application == null) {
+                log.warn(String.format("Application does not exist: [application-id] %s",
+                        appId));
+                return;
+            }
+            clusterData = application.getClusterDataRecursively();
+            Collection<ApplicationInstanceContext> context = application.
+                    getInstanceIdToInstanceContextMap().values();
             ApplicationStatus status = ApplicationStatus.Terminating;
-            if (application.isStateTransitionValid(status, null)) {
-                //setting the status, persist and publish
-                application.setStatus(status, null);
-                updateApplicationMonitor(appId, status);
-
-                ApplicationHolder.persistApplication(application);
-                //ApplicationsEventPublisher.sendApplicationTerminatingEvent(appId);
-            } else {
-                log.warn(String.format("Application state transition is not valid: [application-id] %s " +
-                        " [current-status] %s [status-requested] %s", appId, application.getStatus(null), status));
+            for (ApplicationInstanceContext context1 : context) {
+                if (context1.isStateTransitionValid(status)) {
+                    //setting the status, persist and publish
+                    application.setStatus(status, context1.getInstanceId());
+                    updateApplicationMonitor(appId, status, context1.getInstanceId());
+                    ApplicationHolder.persistApplication(application);
+                    ApplicationsEventPublisher.sendApplicationTerminatingEvent(appId, context1.getInstanceId());
+                } else {
+                    log.warn(String.format("Application state transition is not valid: [application-id] %s " +
+                                    " [instance-id] %s [current-status] %s [status-requested] %s", appId,
+                            context1.getInstanceId() + context1.getStatus(), status));
+                }
             }
+
         } finally {
             ApplicationHolder.releaseWriteLock();
         }
-        ApplicationsEventPublisher.sendApplicationTerminatingEvent(appId);
 
         // if monitors is not found for any cluster, assume cluster is not there and send cluster terminating event.
         // this assumes the cluster monitor will not fail after creating members, but will only fail before
-        for (ClusterDataHolder aClusterData : clusterData){
+        for (ClusterDataHolder aClusterData : clusterData) {
             if (AutoscalerContext.getInstance().getClusterMonitor(aClusterData.getClusterId()) == null) {
-                ClusterStatusEventPublisher.sendClusterTerminatingEvent(appId, aClusterData.getServiceType(),
-                        aClusterData.getClusterId(), null);
-                                                        //TODO add instanceID******
+                TopologyManager.acquireReadLockForCluster(aClusterData.getServiceType(),
+                        aClusterData.getClusterId());
+                try {
+                    Service service = TopologyManager.getTopology().getService(aClusterData.getServiceType());
+                    if (service != null) {
+                        Cluster cluster = service.getCluster(aClusterData.getClusterId());
+                        if (cluster != null) {
+                            //TODO travese thr cluster context
+                            /*for() {
+                                ClusterStatusEventPublisher.sendClusterTerminatingEvent(appId, aClusterData.getServiceType(),
+                                        aClusterData.getClusterId(), null);
+                            }*/
+                        }
+                    }
+                } finally {
+                    TopologyManager.releaseReadLockForCluster(aClusterData.getServiceType(),
+                            aClusterData.getClusterId());
+                }
+
             }
         }
     }
@@ -197,7 +219,7 @@ public class ApplicationBuilder {
             if (application.isStateTransitionValid(status, null)) {
                 //setting the status, persist and publish
                 application.setStatus(status, null);
-                updateApplicationMonitor(appId, status);
+                updateApplicationMonitor(appId, status, null);
                 //removing the monitor
                 AutoscalerContext.getInstance().removeAppMonitor(appId);
                 //Removing the application from memory and registry
@@ -212,39 +234,6 @@ public class ApplicationBuilder {
         }
     }
 
-    public static void handleApplicationTerminatingEvent(String applicationId) {
-        if (log.isDebugEnabled()) {
-            log.debug("Handling application terminating event: [application-id] " + applicationId);
-        }
-
-        ApplicationHolder.acquireWriteLock();
-
-        try {
-            Applications applications = ApplicationHolder.getApplications();
-            if (!applications.applicationExists(applicationId)) {
-                log.warn("Application does not exist: [application-id] " + applicationId);
-                return;
-            }
-
-            Application application = applications.getApplication(applicationId);
-            // check and update application status to 'Terminating'
-            ApplicationStatus status = ApplicationStatus.Terminating;
-            if (application.isStateTransitionValid(status, null)) {
-                // for now anyway update the status forcefully
-                //setting the status, persist and publish
-                application.setStatus(status, null);
-                updateApplicationMonitor(applicationId, status);
-                ApplicationHolder.persistApplication(application);
-                ApplicationsEventPublisher.sendApplicationTerminatingEvent(applicationId);
-            } else {
-                log.warn(String.format("Application state transition is not valid: [application-id] %s " +
-                        " [current-status] %s [status-requested] %s", applicationId, application.getStatus(null), status));
-            }
-        } finally {
-            ApplicationHolder.releaseWriteLock();
-        }
-    }
-
     public static void handleGroupTerminatedEvent(String appId, String groupId, String instanceId) {
         if (log.isDebugEnabled()) {
             log.debug("Handling group terminated event: [group-id] " + groupId +
@@ -267,16 +256,23 @@ public class ApplicationBuilder {
             return;
         }
 
+        GroupInstanceContext context = group.getInstanceContexts(instanceId);
         GroupStatus status = GroupStatus.Terminated;
-        if (group.isStateTransitionValid(status, null)) {
-            //setting the status, persist and publish
-            group.setStatus(status, null);
-            updateGroupMonitor(appId, groupId, status);
-            ApplicationHolder.persistApplication(application);
-            ApplicationsEventPublisher.sendGroupTerminatedEvent(appId, groupId);
+        if (context != null) {
+            if (context.isStateTransitionValid(status)) {
+                //setting the status, persist and publish
+                updateGroupMonitor(appId, groupId, status, instanceId);
+                ApplicationHolder.persistApplication(application);
+                ApplicationsEventPublisher.sendGroupTerminatedEvent(appId, groupId, instanceId);
+            } else {
+                log.warn("Group state transition is not valid: [group-id] " + groupId +
+                        " [instance-id] " + instanceId + " [current-state] " + context.getStatus()
+                        + "[requested-state] " + status);
+            }
+
         } else {
-            log.warn(String.format("Group state transition is not valid: [group-id] %s [current-status] %s " +
-                    " [requested-status] %s", groupId, group.getStatus(null), status));
+            log.warn("Group Context is not found for [group-id] " + groupId +
+                    " [instance-id] " + instanceId);
         }
 
     }
@@ -303,16 +299,23 @@ public class ApplicationBuilder {
             return;
         }
 
+        GroupInstanceContext context = group.getInstanceContexts(instanceId);
         GroupStatus status = GroupStatus.Active;
-        if (group.isStateTransitionValid(status, null)) {
-            //setting the status, persist and publish
-            group.setStatus(status, null);
-            updateGroupMonitor(appId, groupId, status);
-            ApplicationHolder.persistApplication(application);
-            ApplicationsEventPublisher.sendGroupActivatedEvent(appId, groupId);
+        if (context != null) {
+            if (context.isStateTransitionValid(status)) {
+                //setting the status, persist and publish
+                updateGroupMonitor(appId, groupId, status, instanceId);
+                ApplicationHolder.persistApplication(application);
+                ApplicationsEventPublisher.sendGroupActivatedEvent(appId, groupId, instanceId);
+            } else {
+                log.warn("Group state transition is not valid: [group-id] " + groupId +
+                        " [instance-id] " + instanceId + " [current-state] " + context.getStatus()
+                        + "[requested-state] " + status);
+            }
+
         } else {
-            log.warn(String.format("Group state transition is not valid: [group-id] %s [current-status] %s " +
-                    " [requested-status] %s", groupId, group.getStatus(null), status));
+            log.warn("Group Context is not found for [group-id] " + groupId +
+                    " [instance-id] " + instanceId);
         }
     }
 
@@ -342,9 +345,9 @@ public class ApplicationBuilder {
         if (group.isStateTransitionValid(status, null)) {
             //setting the status, persist and publish
             group.setStatus(status, null);
-            updateGroupMonitor(appId, groupId, status);
+            updateGroupMonitor(appId, groupId, status, instanceId);
             ApplicationHolder.persistApplication(application);
-            ApplicationsEventPublisher.sendGroupCreatedEvent(appId, groupId);
+            ApplicationsEventPublisher.sendGroupCreatedEvent(appId, groupId, instanceId);
         } else {
             log.warn("Group state transition is not valid: [group-id] " + groupId + " [current-state] " + group.getStatus(null)
                     + "[requested-state] " + status);
@@ -385,7 +388,7 @@ public class ApplicationBuilder {
             //ApplicationsEventPublisher.sendGroupCreatedEvent(appId, groupId);
         } else {
             log.warn("Group Instance Context already exists: [group-id] " + groupId +
-                                    " [Group-Instance-Id] " + instanceId);
+                    " [Group-Instance-Id] " + instanceId);
         }
     }
 
@@ -412,16 +415,23 @@ public class ApplicationBuilder {
             return;
         }
 
+        GroupInstanceContext context = group.getInstanceContexts(instanceId);
         GroupStatus status = GroupStatus.Inactive;
-        if (group.isStateTransitionValid(status, null)) {
-            //setting the status, persist and publish
-            group.setStatus(status, null);
-            updateGroupMonitor(appId, groupId, status);
-            ApplicationHolder.persistApplication(application);
-            ApplicationsEventPublisher.sendGroupInActivateEvent(appId, groupId);
+        if (context != null) {
+            if (context.isStateTransitionValid(status)) {
+                //setting the status, persist and publish
+                updateGroupMonitor(appId, groupId, status, instanceId);
+                ApplicationHolder.persistApplication(application);
+                ApplicationsEventPublisher.sendGroupInActivateEvent(appId, groupId, instanceId);
+            } else {
+                log.warn("Group state transition is not valid: [group-id] " + groupId +
+                        " [instance-id] " + instanceId + " [current-state] " + context.getStatus()
+                        + "[requested-state] " + status);
+            }
+
         } else {
-            log.warn("Group state transition is not valid: [group-id] " + groupId + " [current-state] " + group.getStatus(null)
-                    + "[requested-state] " + status);
+            log.warn("Group Context is not found for [group-id] " + groupId +
+                    " [instance-id] " + instanceId);
         }
     }
 
@@ -449,16 +459,23 @@ public class ApplicationBuilder {
 
         try {
             ApplicationHolder.acquireWriteLock();
+            GroupInstanceContext context = group.getInstanceContexts(instanceId);
             GroupStatus status = GroupStatus.Terminating;
-            if (group.isStateTransitionValid(status, null)) {
-                //setting the status, persist and publish
-                group.setStatus(status, null);
-                updateGroupMonitor(appId, groupId, status);
-                ApplicationHolder.persistApplication(application);
-                ApplicationsEventPublisher.sendGroupTerminatingEvent(appId, groupId);
+            if (context != null) {
+                if (context.isStateTransitionValid(status)) {
+                    //setting the status, persist and publish
+                    updateGroupMonitor(appId, groupId, status, instanceId);
+                    ApplicationHolder.persistApplication(application);
+                    ApplicationsEventPublisher.sendGroupTerminatingEvent(appId, groupId, instanceId);
+                } else {
+                    log.warn("Group state transition is not valid: [group-id] " + groupId +
+                            " [instance-id] " + instanceId + " [current-state] " + context.getStatus()
+                            + "[requested-state] " + status);
+                }
+
             } else {
-                log.warn("Group state transition is not valid: [group-id] " + groupId + " [current-state] " + group.getStatus(null)
-                        + "[requested-state] " + status);
+                log.warn("Group Context is not found for [group-id] " + groupId +
+                        " [instance-id] " + instanceId);
             }
         } finally {
             ApplicationHolder.releaseWriteLock();
@@ -481,24 +498,24 @@ public class ApplicationBuilder {
         }
     }
 
-    private static void updateApplicationMonitor(String appId, ApplicationStatus status) {
+    private static void updateApplicationMonitor(String appId, ApplicationStatus status, String instanceId) {
         //Updating the Application Monitor
         ApplicationMonitor applicationMonitor = AutoscalerContext.getInstance().getAppMonitor(appId);
         if (applicationMonitor != null) {
-            applicationMonitor.setStatus(status, null);
+            applicationMonitor.setStatus(status, instanceId);
         } else {
             log.warn("Application monitor cannot be found: [application-id] " + appId);
         }
 
     }
 
-    private static void updateGroupMonitor(String appId, String groupId, GroupStatus status) {
+    private static void updateGroupMonitor(String appId, String groupId, GroupStatus status, String instanceId) {
         //Updating the Application Monitor
         ApplicationMonitor applicationMonitor = AutoscalerContext.getInstance().getAppMonitor(appId);
         if (applicationMonitor != null) {
             GroupMonitor monitor = (GroupMonitor) applicationMonitor.findGroupMonitorWithId(groupId);
-            if (monitor != null ) {
-                monitor.setStatus(status, null);
+            if (monitor != null) {
+                monitor.setStatus(status, instanceId);
             } else {
                 log.warn("Group monitor cannot be found: [group-id] " + groupId +
                         " [application-id] " + appId);

http://git-wip-us.apache.org/repos/asf/stratos/blob/0e0c7102/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 d4969fa..87fa854 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
@@ -29,65 +29,65 @@ public class ApplicationsEventPublisher {
         publishEvent(new ApplicationCreatedEvent(application));
     }
 
-    public static void sendGroupCreatedEvent(String appId, String groupId) {
+    public static void sendGroupCreatedEvent(String appId, String groupId, String instanceId) {
         if (log.isInfoEnabled()) {
             log.info("Publishing Group created event for [application]: " + appId +
                     " [group]: " + groupId);
         }
         GroupResetEvent groupCreatedEvent =
-                new GroupResetEvent(appId, groupId);
+                new GroupResetEvent(appId, groupId, instanceId);
 
         publishEvent(groupCreatedEvent);
     }
 
-    public static void sendGroupActivatedEvent(String appId, String groupId) {
+    public static void sendGroupActivatedEvent(String appId, String groupId, String instanceId) {
         if (log.isInfoEnabled()) {
             log.info("Publishing Group activated event for [application]: " + appId +
                     " [group]: " + groupId);
         }
         GroupActivatedEvent groupActivatedEvent =
-                new GroupActivatedEvent(appId, groupId);
+                new GroupActivatedEvent(appId, groupId, instanceId);
 
         publishEvent(groupActivatedEvent);
     }
 
-    public static void sendGroupInActivateEvent(String appId, String groupId) {
+    public static void sendGroupInActivateEvent(String appId, String groupId, String instanceId) {
         if (log.isInfoEnabled()) {
             log.info("Publishing Group in-activate event for [application]: " + appId +
                     " [group]: " + groupId);
         }
-        GroupInactivatedEvent groupInactivateEvent = new GroupInactivatedEvent(appId, groupId);
+        GroupInactivatedEvent groupInactivateEvent = new GroupInactivatedEvent(appId, groupId, instanceId);
 
         publishEvent(groupInactivateEvent);
     }
 
-    public static void sendGroupTerminatingEvent(String appId, String groupId) {
+    public static void sendGroupTerminatingEvent(String appId, String groupId, String instanceId) {
         if (log.isInfoEnabled()) {
             log.info("Publishing Group terminating event for [application]: " + appId +
                     " [group]: " + groupId);
         }
         GroupTerminatingEvent groupInTerminatingEvent =
-                new GroupTerminatingEvent(appId, groupId);
+                new GroupTerminatingEvent(appId, groupId, instanceId);
         publishEvent(groupInTerminatingEvent);
     }
 
-    public static void sendGroupTerminatedEvent(String appId, String groupId) {
+    public static void sendGroupTerminatedEvent(String appId, String groupId, String instanceId) {
 
         if (log.isInfoEnabled()) {
             log.info("Publishing Group terminated event for [application]: " + appId +
                     " [group]: " + groupId);
         }
         GroupTerminatedEvent groupInTerminatedEvent =
-                new GroupTerminatedEvent(appId, groupId);
+                new GroupTerminatedEvent(appId, groupId, instanceId);
         publishEvent(groupInTerminatedEvent);
     }
 
-    public static void sendApplicationActivatedEvent(String appId) {
+    public static void sendApplicationActivatedEvent(String appId, String instanceId) {
         if (log.isInfoEnabled()) {
             log.info("Publishing Application activated event for [application]: " + appId);
         }
         ApplicationActivatedEvent applicationActivatedEvent =
-                new ApplicationActivatedEvent(appId);
+                new ApplicationActivatedEvent(appId, instanceId);
 
         publishEvent(applicationActivatedEvent);
     }
@@ -102,7 +102,7 @@ public class ApplicationsEventPublisher {
 
     }
 
-    public static void sendApplicationTerminatingEvent(String appId) {
+    public static void sendApplicationTerminatingEvent(String appId, String instanceId) {
         if (log.isInfoEnabled()) {
             log.info("Publishing Application terminating event for [application]: " + appId);
         }

http://git-wip-us.apache.org/repos/asf/stratos/blob/0e0c7102/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/publisher/ClusterStatusEventPublisher.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/publisher/ClusterStatusEventPublisher.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/publisher/ClusterStatusEventPublisher.java
index 020e793..4a1678d 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/publisher/ClusterStatusEventPublisher.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/publisher/ClusterStatusEventPublisher.java
@@ -61,7 +61,8 @@ public class ClusterStatusEventPublisher {
         }
     }
 
-    public static void sendClusterResetEvent(String appId, String serviceName, String clusterId) {
+    public static void sendClusterResetEvent(String appId, String serviceName,
+                                             String clusterId, String instanceId) {
         try {
             TopologyManager.acquireReadLockForCluster(serviceName, clusterId);
             Service service = TopologyManager.getTopology().getService(serviceName);
@@ -70,7 +71,7 @@ public class ClusterStatusEventPublisher {
                 if (cluster.isStateTransitionValid(ClusterStatus.Created, null) &&
                         cluster.getStatus(null) != ClusterStatus.Created) {
                     ClusterStatusClusterResetEvent clusterCreatedEvent =
-                            new ClusterStatusClusterResetEvent(appId, serviceName, clusterId);
+                            new ClusterStatusClusterResetEvent(appId, serviceName, clusterId, instanceId);
 
                     publishEvent(clusterCreatedEvent);
                 } else {
@@ -91,7 +92,7 @@ public class ClusterStatusEventPublisher {
                 if (cluster.isStateTransitionValid(ClusterStatus.Active, null) &&
                         cluster.getStatus(null) != ClusterStatus.Active) {
                     ClusterStatusClusterActivatedEvent clusterActivatedEvent =
-                            new ClusterStatusClusterActivatedEvent(appId, serviceName, clusterId);
+                            new ClusterStatusClusterActivatedEvent(appId, serviceName, clusterId, "test***");
 
                     publishEvent(clusterActivatedEvent);
                 } else {
@@ -103,7 +104,8 @@ public class ClusterStatusEventPublisher {
         }
     }
 
-    public static void sendClusterInActivateEvent(String appId, String serviceName, String clusterId) {
+    public static void sendClusterInActivateEvent(String appId, String serviceName,
+                                                  String clusterId, String instanceId) {
         try {
             TopologyManager.acquireReadLockForCluster(serviceName, clusterId);
             Service service = TopologyManager.getTopology().getService(serviceName);
@@ -112,7 +114,7 @@ public class ClusterStatusEventPublisher {
                 if (cluster.isStateTransitionValid(ClusterStatus.Inactive, null) &&
                                                 cluster.getStatus(null) != ClusterStatus.Inactive) {
                     ClusterStatusClusterInactivateEvent clusterInActivateEvent =
-                            new ClusterStatusClusterInactivateEvent(appId, serviceName, clusterId);
+                            new ClusterStatusClusterInactivateEvent(appId, serviceName, clusterId, instanceId);
 
                     publishEvent(clusterInActivateEvent);
                 } else {
@@ -125,7 +127,8 @@ public class ClusterStatusEventPublisher {
         }
     }
 
-    public static void sendClusterTerminatingEvent(String appId, String serviceName, String clusterId, String instanceId) {
+    public static void sendClusterTerminatingEvent(String appId, String serviceName,
+                                                   String clusterId, String instanceId) {
 
         try {
             TopologyManager.acquireReadLockForCluster(serviceName, clusterId);
@@ -135,7 +138,7 @@ public class ClusterStatusEventPublisher {
                 if (cluster.isStateTransitionValid(ClusterStatus.Terminating, null) &&
                         cluster.getStatus(null) != ClusterStatus.Terminating) {
                     ClusterStatusClusterTerminatingEvent appStatusClusterTerminatingEvent =
-                            new ClusterStatusClusterTerminatingEvent(appId, serviceName, clusterId);
+                            new ClusterStatusClusterTerminatingEvent(appId, serviceName, clusterId, instanceId);
 
                     publishEvent(appStatusClusterTerminatingEvent);
                 } else {
@@ -149,7 +152,8 @@ public class ClusterStatusEventPublisher {
 
     }
 
-    public static void sendClusterTerminatedEvent(String appId, String serviceName, String clusterId) {
+    public static void sendClusterTerminatedEvent(String appId, String serviceName,
+                                                  String clusterId, String instanceId) {
         try {
             TopologyManager.acquireReadLockForCluster(serviceName, clusterId);
             Service service = TopologyManager.getTopology().getService(serviceName);
@@ -158,7 +162,7 @@ public class ClusterStatusEventPublisher {
                 if (cluster.isStateTransitionValid(ClusterStatus.Terminated, null) &&
                         cluster.getStatus(null) != ClusterStatus.Terminated) {
                     ClusterStatusClusterTerminatedEvent appStatusClusterTerminatedEvent =
-                            new ClusterStatusClusterTerminatedEvent(appId, serviceName, clusterId);
+                            new ClusterStatusClusterTerminatedEvent(appId, serviceName, clusterId, instanceId);
 
                     publishEvent(appStatusClusterTerminatedEvent);
                 } else {

http://git-wip-us.apache.org/repos/asf/stratos/blob/0e0c7102/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java
index a8306c2..bee7d83 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java
@@ -266,6 +266,7 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
                 log.info("[ClusterTerminatingEvent] Received: " + event.getClass());
                 ClusterTerminatingEvent clusterTerminatingEvent = (ClusterTerminatingEvent) event;
                 String clusterId = clusterTerminatingEvent.getClusterId();
+                String instanceId = clusterTerminatingEvent.getInstanceId();
                 AutoscalerContext asCtx = AutoscalerContext.getInstance();
                 AbstractClusterMonitor monitor;
                 monitor = asCtx.getClusterMonitor(clusterId);
@@ -276,7 +277,7 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
                     }
                     // if monitor does not exist, send cluster terminated event
                     ClusterStatusEventPublisher.sendClusterTerminatedEvent(clusterTerminatingEvent.getAppId(),
-                            clusterTerminatingEvent.getServiceName(), clusterId);
+                            clusterTerminatingEvent.getServiceName(), clusterId, instanceId);
                     return;
                 }
                 //changing the status in the monitor, will notify its parent monitor
@@ -288,7 +289,7 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
                 	monitor.setStatus(ClusterStatus.Terminating);
                 	monitor.terminateAllMembers();
                 }
-                StatusChecker.getInstance().onMemberTermination(clusterId);
+                StatusChecker.getInstance().onMemberTermination(clusterId, instanceId);
             }
         });
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/0e0c7102/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
index eae69e3..9cffc50 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
@@ -400,6 +400,7 @@ abstract public class VMClusterMonitor extends AbstractClusterMonitor {
 
         String memberId = memberFaultEvent.getMemberId();
         Member member = getMemberByMemberId(memberId);
+        String instanceId = memberFaultEvent.getInstanceId();
         if (null == member) {
             if (log.isDebugEnabled()) {
                 log.debug(String.format("Member not found in the Topology: [member] %s", memberId));
@@ -441,7 +442,8 @@ abstract public class VMClusterMonitor extends AbstractClusterMonitor {
                                    + "[member] %s [partition] %s [cluster] %s ", memberId, partitionId, clusterId));
         }
 
-        StatusChecker.getInstance().onMemberFaultEvent(memberFaultEvent.getClusterId(), partitionId);
+        StatusChecker.getInstance().onMemberFaultEvent(memberFaultEvent.getClusterId(),
+                                                        partitionId, instanceId);
     }
 
     @Override
@@ -521,6 +523,7 @@ abstract public class VMClusterMonitor extends AbstractClusterMonitor {
         String networkPartitionId = memberTerminatedEvent.getNetworkPartitionId();
         String memberId = memberTerminatedEvent.getMemberId();
         String clusterId = memberTerminatedEvent.getClusterId();
+        String instanceId = memberTerminatedEvent.getInstanceId();
         String partitionId = memberTerminatedEvent.getPartitionId();
         NetworkPartitionContext networkPartitionContext = getNetworkPartitionCtxt(networkPartitionId);
         PartitionContext partitionContext = networkPartitionContext.getPartitionCtxt(partitionId);
@@ -552,7 +555,7 @@ abstract public class VMClusterMonitor extends AbstractClusterMonitor {
                                    + "[member] %s", memberId));
         }
         //Checking whether the cluster state can be changed either from in_active to created/terminating to terminated
-		StatusChecker.getInstance().onMemberTermination(clusterId);
+		StatusChecker.getInstance().onMemberTermination(clusterId, instanceId);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/stratos/blob/0e0c7102/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/StatusChecker.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/StatusChecker.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/StatusChecker.java
index cdef592..342e231 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/StatusChecker.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/StatusChecker.java
@@ -93,7 +93,7 @@ public class StatusChecker {
      *
      * @param clusterId id of the cluster
      */
-    public void onMemberTermination(final String clusterId) {
+    public void onMemberTermination(final String clusterId, final String instanceId) {
         Runnable group = new Runnable() {
             public void run() {
                 VMClusterMonitor monitor = (VMClusterMonitor) AutoscalerContext.getInstance().getClusterMonitor(clusterId);
@@ -120,14 +120,14 @@ public class StatusChecker {
                                                     " [cluster]: " + clusterId);
                                         }
                                         ClusterStatusEventPublisher.sendClusterTerminatedEvent(appId, monitor.getServiceId(),
-                                                monitor.getClusterId());
+                                                monitor.getClusterId(), instanceId);
                                     } else {
                                         if (log.isInfoEnabled()) {
                                             log.info("Publishing Cluster created event for [application]: " + appId +
                                                     " [cluster]: " + clusterId);
                                         }
                                         ClusterStatusEventPublisher.sendClusterResetEvent(appId, monitor.getServiceId(),
-                                                monitor.getClusterId());
+                                                monitor.getClusterId(), instanceId);
                                     }
 
                                 } else {
@@ -138,7 +138,7 @@ public class StatusChecker {
                                                     + monitor.getAppId() + " [cluster]: " + clusterId);
                                         }
                                         ClusterStatusEventPublisher.sendClusterInActivateEvent(monitor.getAppId(),
-                                                monitor.getServiceId(), clusterId);
+                                                monitor.getServiceId(), clusterId, instanceId);
                                     } else {
                                         log.info("Cluster has non terminated [members] and in the [status] "
                                                 + cluster.getStatus(null).toString());
@@ -213,7 +213,7 @@ public class StatusChecker {
      * @param clusterId   id of the cluster
      * @param partitionId is to decide in which partition has less members while others have active members
      */
-    public void onMemberFaultEvent(final String clusterId, final String partitionId) {
+    public void onMemberFaultEvent(final String clusterId, final String partitionId, final String instanceId) {
         Runnable group = new Runnable() {
             public void run() {
                 VMClusterMonitor monitor = (VMClusterMonitor) AutoscalerContext.getInstance().getClusterMonitor(clusterId);
@@ -229,7 +229,8 @@ public class StatusChecker {
                                 + monitor.getAppId() + " [cluster]: " + clusterId);
                     }
                     //send cluster In-Active event to cluster status topic
-                    ClusterStatusEventPublisher.sendClusterInActivateEvent(appId, monitor.getServiceId(), clusterId);
+                    ClusterStatusEventPublisher.sendClusterInActivateEvent(appId,
+                            monitor.getServiceId(), clusterId, instanceId);
 
                 } else {
                     boolean clusterActive = clusterActive(monitor);
@@ -311,7 +312,7 @@ public class StatusChecker {
                     //send application activated event
                     if (((Application) component).getStatus(null) != ApplicationStatus.Active) {
                         log.info("sending app activate: " + appId);
-                        ApplicationBuilder.handleApplicationActivatedEvent(appId);
+                        ApplicationBuilder.handleApplicationActivatedEvent(appId, instanceId);
                     }
                 } else if (component instanceof Group) {
                     //send activation to the parent

http://git-wip-us.apache.org/repos/asf/stratos/blob/0e0c7102/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Application.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Application.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Application.java
index 4ffc182..5e72917 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Application.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Application.java
@@ -86,19 +86,19 @@ public class Application extends ParentComponent<ApplicationInstanceContext> {
     }
 
     public boolean isStateTransitionValid(ApplicationStatus newState, String applicationInstancetId) {
-        return this.instanceIdToInstanceContextMap.get(applicationInstancetId).isStateTransitionValid(newState);
+        return this.getInstanceIdToInstanceContextMap().get(applicationInstancetId).isStateTransitionValid(newState);
     }
 
     public Stack<ApplicationStatus> getTransitionedStates(String applicationInstancetId) {
-        return this.instanceIdToInstanceContextMap.get(applicationInstancetId).getTransitionedStates();
+        return this.getInstanceIdToInstanceContextMap().get(applicationInstancetId).getTransitionedStates();
     }
 
     public ApplicationStatus getStatus(String applicationInstanceId) {
-        return this.instanceIdToInstanceContextMap.get(applicationInstanceId).getStatus();
+        return this.getInstanceIdToInstanceContextMap().get(applicationInstanceId).getStatus();
     }
 
     public boolean setStatus(ApplicationStatus newState, String applicationInstanceId) {
-        return this.instanceIdToInstanceContextMap.get(applicationInstanceId).setStatus(newState);
+        return this.getInstanceIdToInstanceContextMap().get(applicationInstanceId).setStatus(newState);
     }
 
     public boolean equals(Object other) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/0e0c7102/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Group.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Group.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Group.java
index 814b54a..627b694 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Group.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Group.java
@@ -83,19 +83,19 @@ public class Group extends ParentComponent<GroupInstanceContext> {
     }
 
     public boolean isStateTransitionValid(GroupStatus newState, String groupInstanceId) {
-        return instanceIdToInstanceContextMap.get(groupInstanceId).isStateTransitionValid(newState);
+        return getInstanceIdToInstanceContextMap().get(groupInstanceId).isStateTransitionValid(newState);
     }
 
     public Stack<GroupStatus> getTransitionedStates(String groupInstanceId) {
-        return instanceIdToInstanceContextMap.get(groupInstanceId).getTransitionedStates();
+        return getInstanceIdToInstanceContextMap().get(groupInstanceId).getTransitionedStates();
     }
 
     public GroupStatus getStatus(String groupInstanceId) {
-        return instanceIdToInstanceContextMap.get(groupInstanceId).getStatus();
+        return getInstanceIdToInstanceContextMap().get(groupInstanceId).getStatus();
     }
 
     public boolean setStatus(GroupStatus newState, String groupInstanceId) {
-        return this.instanceIdToInstanceContextMap.get(groupInstanceId).setStatus(newState);
+        return this.getInstanceIdToInstanceContextMap().get(groupInstanceId).setStatus(newState);
     }
 
     public boolean equals(Object other) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/0e0c7102/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java
index 87abbfd..df8c91c 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java
@@ -208,7 +208,6 @@ public abstract class ParentComponent<T extends InstanceContext> implements Seri
      * @param instanceContext InstanceContext object
      */
     public void addInstanceContext (String instanceId, T instanceContext) {
-
         instanceIdToInstanceContextMap.put(instanceId, instanceContext);
     }
 
@@ -218,7 +217,7 @@ public abstract class ParentComponent<T extends InstanceContext> implements Seri
      * @param instanceId instance id of child
      */
     public boolean containsInstanceContext (String instanceId) {
-        return instanceIdToInstanceContextMap.containsKey(instanceId);
+        return getInstanceIdToInstanceContextMap().containsKey(instanceId);
     }
 
 
@@ -230,16 +229,16 @@ public abstract class ParentComponent<T extends InstanceContext> implements Seri
      */
     public T getInstanceContexts (String instanceId) {
         // if map is empty, return null
-        if (instanceIdToInstanceContextMap.isEmpty()) {
+        if (getInstanceIdToInstanceContextMap().isEmpty()) {
             return null;
         }
 
         // if instanceId is null, just get the first InstanceContext
         if (instanceId == null) {
-            return instanceIdToInstanceContextMap.entrySet().iterator().next().getValue();
+            return getInstanceIdToInstanceContextMap().entrySet().iterator().next().getValue();
         }
 
-        return instanceIdToInstanceContextMap.get(instanceId);
+        return getInstanceIdToInstanceContextMap().get(instanceId);
     }
 
     /**
@@ -249,7 +248,7 @@ public abstract class ParentComponent<T extends InstanceContext> implements Seri
      */
     public int getInstanceContextCount () {
 
-        return instanceIdToInstanceContextMap.keySet().size();
+        return getInstanceIdToInstanceContextMap().keySet().size();
     }
 
     private void getClusterData (Set<ClusterDataHolder> clusterData, Collection<Group> groups) {
@@ -263,4 +262,8 @@ public abstract class ParentComponent<T extends InstanceContext> implements Seri
             }
         }
     }
+
+    public Map<String, T> getInstanceIdToInstanceContextMap() {
+        return instanceIdToInstanceContextMap;
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/0e0c7102/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/ApplicationActivatedEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/ApplicationActivatedEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/ApplicationActivatedEvent.java
index 7825850..68a63a8 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/ApplicationActivatedEvent.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/ApplicationActivatedEvent.java
@@ -29,12 +29,18 @@ public class ApplicationActivatedEvent extends Event implements Serializable {
     private static final long serialVersionUID = 2625412714611885089L;
 
     private String appId;
+    private String instanceId;
 
-    public ApplicationActivatedEvent(String appId) {
+    public ApplicationActivatedEvent(String appId, String instanceId) {
         this.appId = appId;
+        this.instanceId = instanceId;
     }
 
     public String getAppId() {
         return appId;
     }
+
+    public String getInstanceId() {
+        return instanceId;
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/0e0c7102/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/GroupActivatedEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/GroupActivatedEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/GroupActivatedEvent.java
index a587bef..c106949 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/GroupActivatedEvent.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/GroupActivatedEvent.java
@@ -32,10 +32,12 @@ public class GroupActivatedEvent extends Event implements Serializable {
 
     private String groupId;
     private String appId;
+    private String instanceId;
 
-    public GroupActivatedEvent(String appId, String groupId) {
+    public GroupActivatedEvent(String appId, String groupId, String instanceId) {
         this.appId = appId;
         this.groupId = groupId;
+        this.instanceId = instanceId;
     }
 
     public String getGroupId() {
@@ -45,4 +47,8 @@ public class GroupActivatedEvent extends Event implements Serializable {
     public String getAppId() {
         return appId;
     }
+
+    public String getInstanceId() {
+        return instanceId;
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/0e0c7102/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/GroupInactivatedEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/GroupInactivatedEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/GroupInactivatedEvent.java
index d3a1ef4..9160e54 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/GroupInactivatedEvent.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/GroupInactivatedEvent.java
@@ -25,19 +25,27 @@ import java.io.Serializable;
 
 public class GroupInactivatedEvent extends Event implements Serializable {
 
-    private String appId;
+    private static final long serialVersionUID = 2625412714611885089L;
+
     private String groupId;
+    private String appId;
+    private String instanceId;
 
-    public GroupInactivatedEvent (String appId, String groupId) {
+    public GroupInactivatedEvent(String appId, String groupId, String instanceId) {
         this.appId = appId;
         this.groupId = groupId;
+        this.instanceId = instanceId;
+    }
+
+    public String getGroupId() {
+        return this.groupId;
     }
 
     public String getAppId() {
         return appId;
     }
 
-    public String getGroupId() {
-        return groupId;
+    public String getInstanceId() {
+        return instanceId;
     }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/0e0c7102/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/GroupMaintenanceModeEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/GroupMaintenanceModeEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/GroupMaintenanceModeEvent.java
index 4c1e2f0..9de9461 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/GroupMaintenanceModeEvent.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/GroupMaintenanceModeEvent.java
@@ -26,15 +26,19 @@ import java.io.Serializable;
  * This event will be fired upon the instability of group detection by autoscaler.
  */
 public class GroupMaintenanceModeEvent extends Event implements Serializable {
+    private static final long serialVersionUID = 2625412714611885089L;
+
     private String groupId;
     private String appId;
+    private String instanceId;
 
-    public GroupMaintenanceModeEvent(String appId, String groupId) {
+    public GroupMaintenanceModeEvent(String appId, String groupId, String instanceId) {
         this.appId = appId;
         this.groupId = groupId;
+        this.instanceId = instanceId;
     }
 
-    public String getGroupId(String groupId) {
+    public String getGroupId() {
         return this.groupId;
     }
 
@@ -42,4 +46,8 @@ public class GroupMaintenanceModeEvent extends Event implements Serializable {
         return appId;
     }
 
+    public String getInstanceId() {
+        return instanceId;
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/0e0c7102/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/GroupReadyToShutdownEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/GroupReadyToShutdownEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/GroupReadyToShutdownEvent.java
index b2d5d57..7a9937f 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/GroupReadyToShutdownEvent.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/GroupReadyToShutdownEvent.java
@@ -26,19 +26,27 @@ import java.io.Serializable;
  * This event is fired by autoscaler before actually terminate a group.
  */
 public class GroupReadyToShutdownEvent extends Event implements Serializable {
+    private static final long serialVersionUID = 2625412714611885089L;
+
     private String groupId;
     private String appId;
+    private String instanceId;
 
-    public GroupReadyToShutdownEvent(String appId, String groupId) {
+    public GroupReadyToShutdownEvent(String appId, String groupId, String instanceId) {
         this.appId = appId;
         this.groupId = groupId;
+        this.instanceId = instanceId;
     }
 
-    public String getGroupId(String groupId) {
+    public String getGroupId() {
         return this.groupId;
     }
 
     public String getAppId() {
         return appId;
     }
+
+    public String getInstanceId() {
+        return instanceId;
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/0e0c7102/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/GroupResetEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/GroupResetEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/GroupResetEvent.java
index e0e7a91..206b526 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/GroupResetEvent.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/GroupResetEvent.java
@@ -32,10 +32,12 @@ public class GroupResetEvent extends Event implements Serializable {
 
     private String groupId;
     private String appId;
+    private String instanceId;
 
-    public GroupResetEvent(String appId, String groupId) {
+    public GroupResetEvent(String appId, String groupId, String instanceId) {
         this.appId = appId;
         this.groupId = groupId;
+        this.instanceId = instanceId;
     }
 
     public String getGroupId() {
@@ -45,4 +47,8 @@ public class GroupResetEvent extends Event implements Serializable {
     public String getAppId() {
         return appId;
     }
+
+    public String getInstanceId() {
+        return instanceId;
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/0e0c7102/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/GroupTerminatedEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/GroupTerminatedEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/GroupTerminatedEvent.java
index 2a38caf..a7bf347 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/GroupTerminatedEvent.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/GroupTerminatedEvent.java
@@ -32,10 +32,12 @@ public class GroupTerminatedEvent extends Event implements Serializable {
 
     private String groupId;
     private String appId;
+    private String instanceId;
 
-    public GroupTerminatedEvent(String appId, String groupId) {
+    public GroupTerminatedEvent(String appId, String groupId, String instanceId) {
         this.appId = appId;
         this.groupId = groupId;
+        this.instanceId = instanceId;
     }
 
     public String getGroupId() {
@@ -45,4 +47,8 @@ public class GroupTerminatedEvent extends Event implements Serializable {
     public String getAppId() {
         return appId;
     }
+
+    public String getInstanceId() {
+        return instanceId;
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/0e0c7102/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/GroupTerminatingEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/GroupTerminatingEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/GroupTerminatingEvent.java
index c526a35..6f79b15 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/GroupTerminatingEvent.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/GroupTerminatingEvent.java
@@ -32,10 +32,12 @@ public class GroupTerminatingEvent extends Event implements Serializable {
 
     private String groupId;
     private String appId;
+    private String instanceId;
 
-    public GroupTerminatingEvent(String appId, String groupId) {
+    public GroupTerminatingEvent(String appId, String groupId, String instanceId) {
         this.appId = appId;
         this.groupId = groupId;
+        this.instanceId = instanceId;
     }
 
     public String getGroupId() {
@@ -45,4 +47,8 @@ public class GroupTerminatingEvent extends Event implements Serializable {
     public String getAppId() {
         return appId;
     }
+
+    public String getInstanceId() {
+        return instanceId;
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/0e0c7102/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/cluster/status/ClusterStatusClusterActivatedEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/cluster/status/ClusterStatusClusterActivatedEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/cluster/status/ClusterStatusClusterActivatedEvent.java
index 1e00bd5..7fa147b 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/cluster/status/ClusterStatusClusterActivatedEvent.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/cluster/status/ClusterStatusClusterActivatedEvent.java
@@ -31,11 +31,13 @@ public class ClusterStatusClusterActivatedEvent extends Event {
     private final String serviceName;
     private final String clusterId;
     private String appId;
+    private String instanceId;
 
-    public ClusterStatusClusterActivatedEvent(String appId, String serviceName, String clusterId) {
+    public ClusterStatusClusterActivatedEvent(String appId, String serviceName, String clusterId, String instanceId) {
         this.serviceName = serviceName;
         this.clusterId = clusterId;
         this.appId = appId;
+        this.instanceId = instanceId;
     }
 
     public String getServiceName() {
@@ -49,4 +51,8 @@ public class ClusterStatusClusterActivatedEvent extends Event {
     public String getAppId() {
         return appId;
     }
+
+    public String getInstanceId() {
+        return instanceId;
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/0e0c7102/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/cluster/status/ClusterStatusClusterInactivateEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/cluster/status/ClusterStatusClusterInactivateEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/cluster/status/ClusterStatusClusterInactivateEvent.java
index 34fad5a..123ca1e 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/cluster/status/ClusterStatusClusterInactivateEvent.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/cluster/status/ClusterStatusClusterInactivateEvent.java
@@ -31,11 +31,13 @@ public class ClusterStatusClusterInactivateEvent extends Event {
     private final String serviceName;
     private final String clusterId;
     private String appId;
+    private String instanceId;
 
-    public ClusterStatusClusterInactivateEvent(String appId, String serviceName, String clusterId) {
+    public ClusterStatusClusterInactivateEvent(String appId, String serviceName, String clusterId, String instanceId) {
         this.serviceName = serviceName;
         this.clusterId = clusterId;
         this.appId = appId;
+        this.instanceId = instanceId;
     }
 
     public String getServiceName() {
@@ -49,4 +51,8 @@ public class ClusterStatusClusterInactivateEvent extends Event {
     public String getAppId() {
         return appId;
     }
+
+    public String getInstanceId() {
+        return instanceId;
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/0e0c7102/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/cluster/status/ClusterStatusClusterResetEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/cluster/status/ClusterStatusClusterResetEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/cluster/status/ClusterStatusClusterResetEvent.java
index eada57e..de7a977 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/cluster/status/ClusterStatusClusterResetEvent.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/cluster/status/ClusterStatusClusterResetEvent.java
@@ -31,11 +31,13 @@ public class ClusterStatusClusterResetEvent extends Event {
     private final String serviceName;
     private final String clusterId;
     private String appId;
+    private String instanceId;
 
-    public ClusterStatusClusterResetEvent(String appId, String serviceName, String clusterId) {
+    public ClusterStatusClusterResetEvent(String appId, String serviceName, String clusterId, String instanceId) {
         this.serviceName = serviceName;
         this.clusterId = clusterId;
         this.appId = appId;
+        this.instanceId = instanceId;
     }
 
     public String getServiceName() {
@@ -49,4 +51,8 @@ public class ClusterStatusClusterResetEvent extends Event {
     public String getAppId() {
         return appId;
     }
+
+    public String getInstanceId() {
+        return instanceId;
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/0e0c7102/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/cluster/status/ClusterStatusClusterTerminatedEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/cluster/status/ClusterStatusClusterTerminatedEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/cluster/status/ClusterStatusClusterTerminatedEvent.java
index 48ecb68..d9a91c2 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/cluster/status/ClusterStatusClusterTerminatedEvent.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/cluster/status/ClusterStatusClusterTerminatedEvent.java
@@ -31,11 +31,13 @@ public class ClusterStatusClusterTerminatedEvent extends Event {
     private final String serviceName;
     private final String clusterId;
     private String appId;
+    private String instanceId;
 
-    public ClusterStatusClusterTerminatedEvent(String appId, String serviceName, String clusterId) {
+    public ClusterStatusClusterTerminatedEvent(String appId, String serviceName, String clusterId, String instanceId) {
         this.serviceName = serviceName;
         this.clusterId = clusterId;
         this.appId = appId;
+        this.instanceId = instanceId;
     }
 
     public String getServiceName() {
@@ -49,4 +51,8 @@ public class ClusterStatusClusterTerminatedEvent extends Event {
     public String getAppId() {
         return appId;
     }
+
+    public String getInstanceId() {
+        return instanceId;
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/0e0c7102/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/cluster/status/ClusterStatusClusterTerminatingEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/cluster/status/ClusterStatusClusterTerminatingEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/cluster/status/ClusterStatusClusterTerminatingEvent.java
index df6eba9..a98c652 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/cluster/status/ClusterStatusClusterTerminatingEvent.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/cluster/status/ClusterStatusClusterTerminatingEvent.java
@@ -31,11 +31,13 @@ public class ClusterStatusClusterTerminatingEvent extends Event {
     private final String serviceName;
     private final String clusterId;
     private String appId;
+    private String instanceId;
 
-    public ClusterStatusClusterTerminatingEvent(String appId, String serviceName, String clusterId) {
+    public ClusterStatusClusterTerminatingEvent(String appId, String serviceName, String clusterId, String instanceId) {
         this.serviceName = serviceName;
         this.clusterId = clusterId;
         this.appId = appId;
+        this.instanceId = instanceId;
     }
 
     public String getServiceName() {
@@ -49,4 +51,8 @@ public class ClusterStatusClusterTerminatingEvent extends Event {
     public String getAppId() {
         return appId;
     }
+
+    public String getInstanceId() {
+        return instanceId;
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/0e0c7102/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/health/stat/MemberFaultEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/health/stat/MemberFaultEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/health/stat/MemberFaultEvent.java
index e96a4b5..bec4df8 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/health/stat/MemberFaultEvent.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/health/stat/MemberFaultEvent.java
@@ -28,13 +28,16 @@ public class MemberFaultEvent extends Event {
     private final String clusterId;
     private final String memberId;
     private final String partitionId;
+    private final String instanceId;
 
     private final float value;
 
-    public MemberFaultEvent(String clusterId, String memberId, String partitionId, float value) {
+    public MemberFaultEvent(String clusterId, String memberId, String partitionId,
+                            String instanceId, float value) {
         this.clusterId = clusterId;
         this.memberId = memberId;
         this.partitionId = partitionId;
+        this.instanceId = instanceId;
         this.value = value;
     }
 
@@ -54,4 +57,8 @@ public class MemberFaultEvent extends Event {
     public String getMemberId() {
         return memberId;
     }
+
+    public String getInstanceId() {
+        return instanceId;
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/0e0c7102/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ClusterInactivateEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ClusterInactivateEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ClusterInactivateEvent.java
index 0f14e4f..4ace80e 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ClusterInactivateEvent.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ClusterInactivateEvent.java
@@ -28,11 +28,15 @@ public class ClusterInactivateEvent extends Event {
     private final String serviceName;
     private final String clusterId;
     private String appId;
+    private String instanceId;
 
-    public ClusterInactivateEvent(String appId, String serviceName, String clusterId) {
+
+    public ClusterInactivateEvent(String appId, String serviceName, String clusterId, String instanceId) {
         this.serviceName = serviceName;
         this.clusterId = clusterId;
         this.appId = appId;
+        this.instanceId = instanceId;
+
     }
 
     public String getServiceName() {
@@ -53,4 +57,7 @@ public class ClusterInactivateEvent extends Event {
         return appId;
     }
 
+    public String getInstanceId() {
+        return instanceId;
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/0e0c7102/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ClusterResetEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ClusterResetEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ClusterResetEvent.java
index d4d6622..f544994 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ClusterResetEvent.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ClusterResetEvent.java
@@ -28,11 +28,15 @@ public class ClusterResetEvent extends Event {
     private final String serviceName;
     private final String clusterId;
     private String appId;
+    private String instanceId;
 
-    public ClusterResetEvent(String appId, String serviceName, String clusterId) {
+
+    public ClusterResetEvent(String appId, String serviceName, String clusterId, String instanceId) {
         this.serviceName = serviceName;
         this.clusterId = clusterId;
         this.appId = appId;
+        this.instanceId = instanceId;
+
     }
 
     public String getServiceName() {
@@ -53,4 +57,8 @@ public class ClusterResetEvent extends Event {
         return appId;
     }
 
+    public String getInstanceId() {
+        return instanceId;
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/0e0c7102/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ClusterTerminatedEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ClusterTerminatedEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ClusterTerminatedEvent.java
index c4ab872..1013292 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ClusterTerminatedEvent.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ClusterTerminatedEvent.java
@@ -28,11 +28,14 @@ public class ClusterTerminatedEvent extends Event {
     private final String serviceName;
     private final String clusterId;
     private String appId;
+    private String instanceId;
 
-    public ClusterTerminatedEvent(String appId, String serviceName, String clusterId) {
+
+    public ClusterTerminatedEvent(String appId, String serviceName, String clusterId, String instanceId) {
         this.serviceName = serviceName;
         this.clusterId = clusterId;
         this.appId = appId;
+        this.instanceId = instanceId;
     }
 
     public String getServiceName() {
@@ -53,4 +56,8 @@ public class ClusterTerminatedEvent extends Event {
         return appId;
     }
 
+    public String getInstanceId() {
+        return instanceId;
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/0e0c7102/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ClusterTerminatingEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ClusterTerminatingEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ClusterTerminatingEvent.java
index 5b04fcd..86b15e4 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ClusterTerminatingEvent.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ClusterTerminatingEvent.java
@@ -28,11 +28,13 @@ public class ClusterTerminatingEvent extends Event {
     private final String serviceName;
     private final String clusterId;
     private String appId;
+    private String instanceId;
 
-    public ClusterTerminatingEvent(String appId, String serviceName, String clusterId) {
+    public ClusterTerminatingEvent(String appId, String serviceName, String clusterId, String instanceId) {
         this.serviceName = serviceName;
         this.clusterId = clusterId;
         this.appId = appId;
+        this.instanceId = instanceId;
     }
 
     public String getServiceName() {
@@ -53,4 +55,7 @@ public class ClusterTerminatingEvent extends Event {
         return appId;
     }
 
+    public String getInstanceId() {
+        return instanceId;
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/0e0c7102/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/InstanceSpawnedEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/InstanceSpawnedEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/InstanceSpawnedEvent.java
index bcb1da2..e4b9b88 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/InstanceSpawnedEvent.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/InstanceSpawnedEvent.java
@@ -38,16 +38,24 @@ public class InstanceSpawnedEvent extends TopologyEvent implements Serializable
     private String lbClusterId;
     private String memberPublicIp;
     private String memberIp;
+    private String instanceId;
     private Properties properties;
 
 
-    public InstanceSpawnedEvent(String serviceName, String clusterId, String networkPartitionId, String partitionId, String memberId, long initTime) {
+    public InstanceSpawnedEvent(String serviceName, String clusterId, String networkPartitionId,
+                                String partitionId, String memberId, long initTime, String instanceId) {
         this.serviceName = serviceName;
         this.clusterId = clusterId;
         this.networkPartitionId = networkPartitionId;
         this.partitionId = partitionId;
         this.memberId = memberId;
         this.initTime = initTime;
+        this.instanceId = instanceId;
+
+    }
+
+    public String getInstanceId() {
+        return instanceId;
     }
 
     public String getServiceName() {

http://git-wip-us.apache.org/repos/asf/stratos/blob/0e0c7102/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/MemberActivatedEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/MemberActivatedEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/MemberActivatedEvent.java
index 94e04b0..dd10c95 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/MemberActivatedEvent.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/MemberActivatedEvent.java
@@ -45,13 +45,16 @@ public class MemberActivatedEvent extends TopologyEvent implements Serializable
     private String groupId;
     private String applicationId;
     private String memberPublicIp;
+    private String instanceId;
 
-    public MemberActivatedEvent(String serviceName, String clusterId, String networkPartitionId, String partitionId, String memberId) {
+    public MemberActivatedEvent(String serviceName, String clusterId, String networkPartitionId,
+                                String partitionId, String memberId, String instanceId) {
         this.serviceName = serviceName;
         this.clusterId = clusterId;
         this.networkPartitionId = networkPartitionId;
         this.partitionId = partitionId;
         this.memberId = memberId;
+        this.instanceId = instanceId;
         this.portMap = new HashMap<Integer, Port>();
     }
 
@@ -135,4 +138,8 @@ public class MemberActivatedEvent extends TopologyEvent implements Serializable
     public void setMemberPublicIp(String memberPublicIp) {
         this.memberPublicIp = memberPublicIp;
     }
+
+    public String getInstanceId() {
+        return instanceId;
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/0e0c7102/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/MemberMaintenanceModeEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/MemberMaintenanceModeEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/MemberMaintenanceModeEvent.java
index d126713..152d721 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/MemberMaintenanceModeEvent.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/MemberMaintenanceModeEvent.java
@@ -32,14 +32,22 @@ public class MemberMaintenanceModeEvent extends TopologyEvent implements Seriali
     private MemberStatus status;
     private Properties properties;
     private String groupId;
+    private String instanceId;
 
     public MemberMaintenanceModeEvent(String serviceName, String clusterId,
-                                      String networkPartitionId, String partitionId, String memberId) {
+                                      String networkPartitionId, String partitionId,
+                                      String memberId, String instanceId) {
         this.serviceName = serviceName;
         this.clusterId = clusterId;
         this.networkPartitionId = networkPartitionId;
         this.partitionId = partitionId;
         this.memberId = memberId;
+        this.instanceId = instanceId;
+
+    }
+
+    public String getInstanceId() {
+        return instanceId;
     }
 
     public String getServiceName() {

http://git-wip-us.apache.org/repos/asf/stratos/blob/0e0c7102/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/MemberReadyToShutdownEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/MemberReadyToShutdownEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/MemberReadyToShutdownEvent.java
index 893160c..55a09ce 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/MemberReadyToShutdownEvent.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/MemberReadyToShutdownEvent.java
@@ -32,14 +32,22 @@ public class MemberReadyToShutdownEvent extends TopologyEvent implements Seriali
     private MemberStatus status;
     private Properties properties;
     private String groupId;
+    private String instanceId;
 
     public MemberReadyToShutdownEvent(String serviceName, String clusterId,
-                                      String networkPartitionId, String partitionId, String memberId) {
+                                      String networkPartitionId, String partitionId,
+                                      String memberId, String instanceId) {
         this.serviceName = serviceName;
         this.clusterId = clusterId;
         this.networkPartitionId = networkPartitionId;
         this.partitionId = partitionId;
         this.memberId = memberId;
+        this.instanceId = instanceId;
+
+    }
+
+    public String getInstanceId() {
+        return instanceId;
     }
 
      public String getServiceName() {