http://git-wip-us.apache.org/repos/asf/stratos/blob/8d46fab0/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyBuilder.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyBuilder.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyBuilder.java
index 1b8db0e..ea9d242 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyBuilder.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyBuilder.java
@@ -48,6 +48,7 @@ import 
org.apache.stratos.messaging.event.instance.status.InstanceStartedEvent;
 import org.apache.stratos.messaging.event.topology.*;
 import 
org.apache.stratos.metadata.client.defaults.DefaultMetaDataServiceClient;
 import org.apache.stratos.metadata.client.defaults.MetaDataServiceClient;
+import org.wso2.carbon.registry.core.exceptions.RegistryException;
 
 import java.net.URI;
 import java.net.URISyntaxException;
@@ -60,21 +61,19 @@ import java.util.*;
 public class TopologyBuilder {
     private static final Log log = LogFactory.getLog(TopologyBuilder.class);
 
-
-    public static void handleServiceCreated(List<Cartridge> cartridgeList) {
+    public static void handleServiceCreated(List<Cartridge> cartridgeList) 
throws RegistryException {
         Service service;
         Topology topology = TopologyManager.getTopology();
         if (cartridgeList == null) {
-            log.warn("Cartridge list is empty");
-            return;
+            throw new RuntimeException("Cartridge list is empty");
         }
-
         try {
-
             TopologyManager.acquireWriteLock();
             for (Cartridge cartridge : cartridgeList) {
                 if (!topology.serviceExists(cartridge.getType())) {
-                    ServiceType serviceType = cartridge.isMultiTenant() ? 
ServiceType.MultiTenant : ServiceType.SingleTenant;
+                    ServiceType serviceType = cartridge.isMultiTenant() ?
+                            ServiceType.MultiTenant :
+                            ServiceType.SingleTenant;
                     service = new Service(cartridge.getType(), serviceType);
                     Properties properties = new Properties();
 
@@ -86,32 +85,27 @@ public class TopologyBuilder {
                                 propertyArray = 
cartridge.getProperties().getProperties();
                             }
                         }
-
                         List<Property> propertyList = new 
ArrayList<Property>();
                         if (propertyArray != null) {
                             propertyList = Arrays.asList(propertyArray);
-                            if (propertyList != null) {
-                                for (Property property : propertyList) {
-                                    properties.setProperty(property.getName(), 
property.getValue());
-                                }
+                            for (Property property : propertyList) {
+                                properties.setProperty(property.getName(), 
property.getValue());
                             }
                         }
                     } catch (Exception e) {
                         log.error(e);
                     }
-
                     service.setProperties(properties);
                     if (cartridge.getPortMappings() != null) {
                         List<PortMapping> portMappings = 
Arrays.asList(cartridge.getPortMappings());
                         Port port;
                         //adding ports to the event
                         for (PortMapping portMapping : portMappings) {
-                            port = new Port(portMapping.getProtocol(),
-                                    portMapping.getPort(), 
portMapping.getProxyPort());
+                            port = new Port(portMapping.getProtocol(), 
portMapping.getPort(),
+                                    portMapping.getProxyPort());
                             service.addPort(port);
                         }
                     }
-
                     topology.addService(service);
                     TopologyManager.updateTopology(topology);
                 }
@@ -122,28 +116,22 @@ public class TopologyBuilder {
         TopologyEventPublisher.sendServiceCreateEvent(cartridgeList);
     }
 
-    public static void handleServiceRemoved(List<Cartridge> cartridgeList) {
+    public static void handleServiceRemoved(List<Cartridge> cartridgeList) 
throws RegistryException {
         Topology topology = TopologyManager.getTopology();
-
         for (Cartridge cartridge : cartridgeList) {
             Service service = topology.getService(cartridge.getType());
             if (service == null) {
-                log.warn("Cartridge does not exist [cartidge] " + cartridge);
-                return;
+                throw new RuntimeException(String.format("Service %s does not 
exist", cartridge.getType()));
             }
             if (service.getClusters().size() == 0) {
-                if (topology.serviceExists(cartridge.getType())) {
-                    try {
-                        TopologyManager.acquireWriteLock();
-                        topology.removeService(cartridge.getType());
-                        TopologyManager.updateTopology(topology);
-                    } finally {
-                        TopologyManager.releaseWriteLock();
-                    }
-                    
TopologyEventPublisher.sendServiceRemovedEvent(cartridgeList);
-                } else {
-                    log.warn(String.format("Service %s does not exist..", 
cartridge.getType()));
+                try {
+                    TopologyManager.acquireWriteLock();
+                    topology.removeService(cartridge.getType());
+                    TopologyManager.updateTopology(topology);
+                } finally {
+                    TopologyManager.releaseWriteLock();
                 }
+                TopologyEventPublisher.sendServiceRemovedEvent(cartridgeList);
             } else {
                 log.warn("Subscription already exists. Hence not removing the 
service:" + cartridge.getType()
                         + " from the topology");
@@ -151,11 +139,9 @@ public class TopologyBuilder {
         }
     }
 
-
-    public static void handleApplicationClustersCreated(String appId, 
List<Cluster> appClusters) {
-
+    public static void handleApplicationClustersCreated(String appId, 
List<Cluster> appClusters)
+            throws RegistryException {
         TopologyManager.acquireWriteLock();
-
         try {
             Topology topology = TopologyManager.getTopology();
             for (Cluster cluster : appClusters) {
@@ -182,8 +168,8 @@ public class TopologyBuilder {
             }
 
             for (PortMapping portMapping : cartridge.getPortMappings()) {
-                ClusterPortMapping clusterPortMapping = new 
ClusterPortMapping(appId,
-                        cluster.getClusterId(), portMapping.getName(), 
portMapping.getProtocol(), portMapping.getPort(),
+                ClusterPortMapping clusterPortMapping = new 
ClusterPortMapping(appId, cluster.getClusterId(),
+                        portMapping.getName(), portMapping.getProtocol(), 
portMapping.getPort(),
                         portMapping.getProxyPort());
                 if (portMapping.getKubernetesPortType() != null) {
                     
clusterPortMapping.setKubernetesPortType(portMapping.getKubernetesPortType());
@@ -200,11 +186,9 @@ public class TopologyBuilder {
         TopologyEventPublisher.sendApplicationClustersCreated(appId, 
appClusters);
     }
 
-    public static void handleApplicationClustersRemoved(String appId,
-                                                        Set<ClusterDataHolder> 
clusterData) {
+    public static void handleApplicationClustersRemoved(String appId, 
Set<ClusterDataHolder> clusterData)
+            throws RegistryException {
         TopologyManager.acquireWriteLock();
-
-        List<Cluster> removedClusters = new ArrayList<Cluster>();
         CloudControllerContext context = CloudControllerContext.getInstance();
         try {
             Topology topology = TopologyManager.getTopology();
@@ -213,9 +197,7 @@ public class TopologyBuilder {
                 // remove clusters from CC topology model and remove runtime 
information
                 for (ClusterDataHolder aClusterData : clusterData) {
                     Service aService = 
topology.getService(aClusterData.getServiceType());
-                    if (aService != null) {
-                        
removedClusters.add(aService.removeCluster(aClusterData.getClusterId()));
-                    } else {
+                    if (aService == null) {
                         log.warn("Service " + aClusterData.getServiceType() + 
" not found, " +
                                 "unable to remove Cluster " + 
aClusterData.getClusterId());
                     }
@@ -230,9 +212,7 @@ public class TopologyBuilder {
             } else {
                 log.info("No cluster data found for application " + appId + " 
to remove");
             }
-
             TopologyManager.updateTopology(topology);
-
         } finally {
             TopologyManager.releaseWriteLock();
         }
@@ -240,36 +220,31 @@ public class TopologyBuilder {
         // Remove cluster port mappings of application
         CloudControllerContext.getInstance().removeClusterPortMappings(appId);
         CloudControllerContext.getInstance().persist();
-
         TopologyEventPublisher.sendApplicationClustersRemoved(appId, 
clusterData);
-
     }
 
-    public static void handleClusterReset(ClusterStatusClusterResetEvent 
event) {
+    public static void handleClusterReset(ClusterStatusClusterResetEvent 
event) throws RegistryException {
         TopologyManager.acquireWriteLock();
-
         try {
             Topology topology = TopologyManager.getTopology();
             Service service = topology.getService(event.getServiceName());
             if (service == null) {
-                log.error("Service " + event.getServiceName() +
+                throw new RuntimeException("Service " + event.getServiceName() 
+
                         " not found in Topology, unable to update the cluster 
status to Created");
-                return;
             }
 
             Cluster cluster = service.getCluster(event.getClusterId());
             if (cluster == null) {
-                log.error("Cluster " + event.getClusterId() + " not found in 
Topology, unable to update " +
-                        "status to Created");
-                return;
+                throw new RuntimeException(
+                        "Cluster " + event.getClusterId() + " not found in 
Topology, unable to update " +
+                                "status to Created");
             }
 
             ClusterInstance context = 
cluster.getInstanceContexts(event.getInstanceId());
             if (context == null) {
-                log.warn("Cluster Instance Context is not found for [cluster] 
" +
+                throw new RuntimeException("Cluster Instance Context is not 
found for [cluster] " +
                         event.getClusterId() + " [instance-id] " +
                         event.getInstanceId());
-                return;
             }
             ClusterStatus status = ClusterStatus.Created;
             if (context.isStateTransitionValid(status)) {
@@ -277,85 +252,65 @@ public class TopologyBuilder {
                 log.info("Cluster Created adding status started for" + 
cluster.getClusterId());
                 TopologyManager.updateTopology(topology);
                 //publishing data
-                TopologyEventPublisher.sendClusterResetEvent(event.getAppId(), 
event.getServiceName(),
-                        event.getClusterId(), event.getInstanceId());
+                TopologyEventPublisher
+                        .sendClusterResetEvent(event.getAppId(), 
event.getServiceName(), event.getClusterId(),
+                                event.getInstanceId());
             } else {
-                log.warn(String.format("Cluster state transition is not valid: 
[cluster-id] %s " +
-                                " [instance-id] %s [current-status] %s 
[status-requested] %s",
-                        event.getClusterId(), event.getInstanceId(),
-                        context.getStatus(), status));
+                log.warn(String.format("Cluster state transition is not valid: 
[cluster-id] %s "
+                                + " [instance-id] %s [current-status] %s 
[status-requested] %s", event.getClusterId(),
+                        event.getInstanceId(), context.getStatus(), status));
             }
 
         } finally {
             TopologyManager.releaseWriteLock();
         }
 
-
     }
 
-    public static void handleClusterInstanceCreated(String serviceType, String 
clusterId,
-                                                    String alias, String 
instanceId, String partitionId,
-                                                    String networkPartitionId) 
{
-
+    public static void handleClusterInstanceCreated(String serviceType, String 
clusterId, String alias,
+            String instanceId, String partitionId, String networkPartitionId) 
throws RegistryException {
         TopologyManager.acquireWriteLock();
-
         try {
             Topology topology = TopologyManager.getTopology();
             Service service = topology.getService(serviceType);
             if (service == null) {
-                log.error("Service " + serviceType +
+                throw new RuntimeException("Service " + serviceType +
                         " not found in Topology, unable to update the cluster 
status to Created");
-                return;
             }
-
             Cluster cluster = service.getCluster(clusterId);
             if (cluster == null) {
-                log.error("Cluster " + clusterId + " not found in Topology, 
unable to update " +
+                throw new RuntimeException("Cluster " + clusterId + " not 
found in Topology, unable to update " +
                         "status to Created");
-                return;
             }
-
             if (cluster.getInstanceContexts(instanceId) != null) {
-                log.warn("The Instance context for the cluster already exists 
for [cluster] " +
+                throw new RuntimeException("The Instance context for the 
cluster already exists for [cluster] " +
                         clusterId + " [instance-id] " + instanceId);
-                return;
             }
-
             ClusterInstance clusterInstance = new ClusterInstance(alias, 
clusterId, instanceId);
             clusterInstance.setNetworkPartitionId(networkPartitionId);
             clusterInstance.setPartitionId(partitionId);
             cluster.addInstanceContext(instanceId, clusterInstance);
             TopologyManager.updateTopology(topology);
-
-            ClusterInstanceCreatedEvent clusterInstanceCreatedEvent =
-                    new ClusterInstanceCreatedEvent(serviceType, clusterId,
-                            clusterInstance);
+            ClusterInstanceCreatedEvent clusterInstanceCreatedEvent = new 
ClusterInstanceCreatedEvent(serviceType,
+                    clusterId, clusterInstance);
             clusterInstanceCreatedEvent.setPartitionId(partitionId);
             
TopologyEventPublisher.sendClusterInstanceCreatedEvent(clusterInstanceCreatedEvent);
-
         } finally {
             TopologyManager.releaseWriteLock();
         }
     }
 
-
-    public static void handleClusterRemoved(ClusterContext ctxt) {
+    public static void handleClusterRemoved(ClusterContext ctxt) throws 
RegistryException {
         Topology topology = TopologyManager.getTopology();
         Service service = topology.getService(ctxt.getCartridgeType());
         String deploymentPolicy;
         if (service == null) {
-            log.warn(String.format("Service %s does not exist",
-                    ctxt.getCartridgeType()));
-            return;
+            throw new RuntimeException(String.format("Service %s does not 
exist", ctxt.getCartridgeType()));
         }
-
         if (!service.clusterExists(ctxt.getClusterId())) {
-            log.warn(String.format("Cluster %s does not exist for service %s",
-                    ctxt.getClusterId(),
+            throw new RuntimeException(String.format("Cluster %s does not 
exist for service %s", ctxt.getClusterId(),
                     ctxt.getCartridgeType()));
-            return;
         }
-
         try {
             TopologyManager.acquireWriteLock();
             Cluster cluster = service.removeCluster(ctxt.getClusterId());
@@ -372,7 +327,7 @@ public class TopologyBuilder {
      *
      * @param memberContext
      */
-    public static void handleMemberCreatedEvent(MemberContext memberContext) {
+    public static void handleMemberCreatedEvent(MemberContext memberContext) 
throws RegistryException {
         Topology topology = TopologyManager.getTopology();
         Service service = 
topology.getService(memberContext.getCartridgeType());
         String clusterId = memberContext.getClusterId();
@@ -385,12 +340,9 @@ public class TopologyBuilder {
         String clusterAlias = 
CloudControllerUtil.getAliasFromClusterId(memberContext.getClusterId());
         String lbClusterId = memberContext.getLbClusterId();
         long initTime = memberContext.getInitTime();
-
         if (cluster.memberExists(memberId)) {
-            log.warn(String.format("Member %s already exists", memberId));
-            return;
+            throw new RuntimeException(String.format("Member %s already 
exists", memberId));
         }
-
         try {
             TopologyManager.acquireWriteLock();
             Member member = new Member(service.getServiceName(), clusterId, 
memberId, clusterInstanceId,
@@ -412,16 +364,10 @@ public class TopologyBuilder {
                 if (log.isDebugEnabled()) {
                     log.debug("Publishing Member Status to DAS");
                 }
-                memStatusPublisher.publish(timestamp,
-                        applicationId,
-                        memberContext.getClusterId(),
-                        clusterAlias,
-                        memberContext.getClusterInstanceId(),
-                        memberContext.getCartridgeType(),
-                        memberContext.getNetworkPartitionId(),
-                        memberContext.getPartition().getId(),
-                        memberContext.getMemberId(),
-                        MemberStatus.Created.toString());
+                memStatusPublisher.publish(timestamp, applicationId, 
memberContext.getClusterId(), clusterAlias,
+                        memberContext.getClusterInstanceId(), 
memberContext.getCartridgeType(),
+                        memberContext.getNetworkPartitionId(), 
memberContext.getPartition().getId(),
+                        memberContext.getMemberId(), 
MemberStatus.Created.toString());
             } else {
                 log.warn("Member Status Publisher is not enabled");
             }
@@ -429,7 +375,6 @@ public class TopologyBuilder {
         } finally {
             TopologyManager.releaseWriteLock();
         }
-
         TopologyEventPublisher.sendMemberCreatedEvent(memberContext);
     }
 
@@ -438,32 +383,24 @@ public class TopologyBuilder {
      *
      * @param memberContext
      */
-    public static void handleMemberInitializedEvent(MemberContext 
memberContext) {
+    public static void handleMemberInitializedEvent(MemberContext 
memberContext) throws RegistryException {
         Topology topology = TopologyManager.getTopology();
         Service service = 
topology.getService(memberContext.getCartridgeType());
-
         if (service == null) {
-            log.warn(String.format("Service %s does not exist",
-                    memberContext.getCartridgeType()));
-            return;
+            throw new RuntimeException(String.format("Service %s does not 
exist", memberContext.getCartridgeType()));
         }
         if (!service.clusterExists(memberContext.getClusterId())) {
-            log.warn(String.format("Cluster %s does not exist in service %s",
-                    memberContext.getClusterId(),
-                    memberContext.getCartridgeType()));
-            return;
+            throw new RuntimeException(
+                    String.format("Cluster %s does not exist for service %s", 
memberContext.getClusterId(),
+                            memberContext.getCartridgeType()));
         }
-
         String applicationId = 
service.getCluster(memberContext.getClusterId()).getAppId();
         String clusterAlias = 
CloudControllerUtil.getAliasFromClusterId(memberContext.getClusterId());
         Member member = service.getCluster(memberContext.getClusterId()).
                 getMember(memberContext.getMemberId());
         if (member == null) {
-            log.warn(String.format("Member %s does not exist",
-                    memberContext.getMemberId()));
-            return;
+            throw new RuntimeException(String.format("Member %s does not 
exist", memberContext.getMemberId()));
         }
-
         try {
             TopologyManager.acquireWriteLock();
 
@@ -481,13 +418,13 @@ public class TopologyBuilder {
             if (!member.isStateTransitionValid(MemberStatus.Initialized)) {
                 log.error("Invalid state transition from " + 
member.getStatus() + " to " +
                         MemberStatus.Initialized);
-                return;
             } else {
 
                 Cluster cluster = 
service.getCluster(memberContext.getClusterId());
                 String clusterId = cluster.getClusterId();
                 ClusterContext clusterContext = 
CloudControllerContext.getInstance().getClusterContext(clusterId);
-                List<KubernetesService> kubernetesServices = 
Lists.newArrayList(clusterContext.getKubernetesServices(memberContext.getClusterInstanceId()));
+                List<KubernetesService> kubernetesServices = Lists
+                        
.newArrayList(clusterContext.getKubernetesServices(memberContext.getClusterInstanceId()));
 
                 if (!kubernetesServices.isEmpty()) {
                     cluster.setKubernetesServices(kubernetesServices);
@@ -511,8 +448,8 @@ public class TopologyBuilder {
                     if (log.isDebugEnabled()) {
                         log.info("Publishing Member Information");
                     }
-                    String scalingDecisionId = 
memberContext.getProperties().getProperty(
-                            StratosConstants.SCALING_DECISION_ID).getValue();
+                    String scalingDecisionId = memberContext.getProperties()
+                            
.getProperty(StratosConstants.SCALING_DECISION_ID).getValue();
                     memInfoPublisher.publish(memberContext.getMemberId(), 
scalingDecisionId,
                             memberContext.getInstanceMetadata());
                 } else {
@@ -522,16 +459,10 @@ public class TopologyBuilder {
                     if (log.isDebugEnabled()) {
                         log.debug("Publishing Member Status to DAS");
                     }
-                    memStatusPublisher.publish(timestamp,
-                            applicationId,
-                            memberContext.getClusterId(),
-                            clusterAlias,
-                            memberContext.getClusterInstanceId(),
-                            memberContext.getCartridgeType(),
-                            memberContext.getNetworkPartitionId(),
-                            memberContext.getPartition().getId(),
-                            memberContext.getMemberId(),
-                            MemberStatus.Initialized.toString());
+                    memStatusPublisher.publish(timestamp, applicationId, 
memberContext.getClusterId(), clusterAlias,
+                            memberContext.getClusterInstanceId(), 
memberContext.getCartridgeType(),
+                            memberContext.getNetworkPartitionId(), 
memberContext.getPartition().getId(),
+                            memberContext.getMemberId(), 
MemberStatus.Initialized.toString());
                 } else {
                     log.warn("Member Status Publisher is not enabled");
                 }
@@ -544,31 +475,28 @@ public class TopologyBuilder {
     }
 
     private static int findKubernetesServicePort(String clusterId, 
Collection<KubernetesService> kubernetesServices,
-                                                 PortMapping portMapping) {
+            PortMapping portMapping) {
         for (KubernetesService kubernetesService : kubernetesServices) {
             if 
(kubernetesService.getProtocol().equals(portMapping.getProtocol())) {
                 return kubernetesService.getPort();
             }
         }
-        throw new RuntimeException("Kubernetes service port not found: 
[cluster-id] " + clusterId + " [port] "
-                + portMapping.getPort());
+        throw new RuntimeException(
+                "Kubernetes service port not found: [cluster-id] " + clusterId 
+ " [port] " + portMapping.getPort());
     }
 
     public static void handleMemberStarted(InstanceStartedEvent 
instanceStartedEvent) {
         try {
             Topology topology = TopologyManager.getTopology();
             Service service = 
topology.getService(instanceStartedEvent.getServiceName());
-
             if (service == null) {
-                log.warn(String.format("Service %s does not exist",
-                        instanceStartedEvent.getServiceName()));
-                return;
+                throw new RuntimeException(
+                        String.format("Service %s does not exist", 
instanceStartedEvent.getServiceName()));
             }
             if (!service.clusterExists(instanceStartedEvent.getClusterId())) {
-                log.warn(String.format("Cluster %s does not exist in service 
%s",
-                        instanceStartedEvent.getClusterId(),
-                        instanceStartedEvent.getServiceName()));
-                return;
+                throw new RuntimeException(
+                        String.format("Cluster %s does not exist for service 
%s", instanceStartedEvent.getClusterId(),
+                                instanceStartedEvent.getServiceName()));
             }
 
             String applicationId = 
service.getCluster(instanceStartedEvent.getClusterId()).getAppId();
@@ -576,9 +504,8 @@ public class TopologyBuilder {
             Cluster cluster = 
service.getCluster(instanceStartedEvent.getClusterId());
             Member member = 
cluster.getMember(instanceStartedEvent.getMemberId());
             if (member == null) {
-                log.warn(String.format("Member %s does not exist",
-                        instanceStartedEvent.getMemberId()));
-                return;
+                throw new RuntimeException(
+                        String.format("Member %s does not exist", 
instanceStartedEvent.getMemberId()));
             }
 
             try {
@@ -587,7 +514,6 @@ public class TopologyBuilder {
                 if (!member.isStateTransitionValid(MemberStatus.Starting)) {
                     log.error("Invalid State Transition from " + 
member.getStatus() + " to " +
                             MemberStatus.Starting);
-                    return;
                 } else {
                     member.setStatus(MemberStatus.Starting);
                     log.info("member started event adding status started");
@@ -605,16 +531,13 @@ public class TopologyBuilder {
                         if (log.isDebugEnabled()) {
                             log.debug("Publishing Member Status to DAS");
                         }
-                        memStatusPublisher.publish(timestamp,
-                                applicationId,
-                                instanceStartedEvent.getClusterId(),
-                                clusterAlias,
-                                instanceStartedEvent.getClusterInstanceId(),
-                                instanceStartedEvent.getServiceName(),
-                                instanceStartedEvent.getNetworkPartitionId(),
-                                instanceStartedEvent.getPartitionId(),
-                                instanceStartedEvent.getMemberId(),
-                                MemberStatus.Starting.toString());
+                        memStatusPublisher
+                                .publish(timestamp, applicationId, 
instanceStartedEvent.getClusterId(), clusterAlias,
+                                        
instanceStartedEvent.getClusterInstanceId(),
+                                        instanceStartedEvent.getServiceName(),
+                                        
instanceStartedEvent.getNetworkPartitionId(),
+                                        instanceStartedEvent.getPartitionId(), 
instanceStartedEvent.getMemberId(),
+                                        MemberStatus.Starting.toString());
                     } else {
                         log.warn("Member Status Publisher is not enabled");
                     }
@@ -623,29 +546,25 @@ public class TopologyBuilder {
                 TopologyManager.releaseWriteLock();
             }
         } catch (Exception e) {
-            String message = String.format("Could not handle member started 
event: [application-id] %s " +
-                            "[service-name] %s [member-id] %s", 
instanceStartedEvent.getApplicationId(),
+            String message = String.format("Could not handle member started 
event: [application-id] %s "
+                            + "[service-name] %s [member-id] %s", 
instanceStartedEvent.getApplicationId(),
                     instanceStartedEvent.getServiceName(), 
instanceStartedEvent.getMemberId());
             log.warn(message, e);
         }
     }
 
-
-    public static void handleMemberActivated(InstanceActivatedEvent 
instanceActivatedEvent) {
+    public static void handleMemberActivated(InstanceActivatedEvent 
instanceActivatedEvent) throws RegistryException {
         Topology topology = TopologyManager.getTopology();
         Service service = 
topology.getService(instanceActivatedEvent.getServiceName());
-
         if (service == null) {
-            log.warn(String.format("Service %s does not exist",
-                    instanceActivatedEvent.getServiceName()));
-            return;
+            throw new RuntimeException(
+                    String.format("Service %s does not exist", 
instanceActivatedEvent.getServiceName()));
         }
-
         Cluster cluster = 
service.getCluster(instanceActivatedEvent.getClusterId());
         if (cluster == null) {
-            log.warn(String.format("Cluster %s does not exist",
-                    instanceActivatedEvent.getClusterId()));
-            return;
+            throw new RuntimeException(
+                    String.format("Cluster %s does not exist for service %s", 
instanceActivatedEvent.getClusterId(),
+                            instanceActivatedEvent.getServiceName()));
         }
 
         String applicationId = 
service.getCluster(instanceActivatedEvent.getClusterId()).getAppId();
@@ -653,17 +572,12 @@ public class TopologyBuilder {
 
         Member member = 
cluster.getMember(instanceActivatedEvent.getMemberId());
         if (member == null) {
-            log.warn(String.format("Member %s does not exist",
-                    instanceActivatedEvent.getMemberId()));
-            return;
+            throw new RuntimeException(String.format("Member %s does not 
exist", instanceActivatedEvent.getMemberId()));
         }
 
-        MemberActivatedEvent memberActivatedEvent = new MemberActivatedEvent(
-                instanceActivatedEvent.getServiceName(),
-                instanceActivatedEvent.getClusterId(),
-                instanceActivatedEvent.getClusterInstanceId(),
-                instanceActivatedEvent.getMemberId(),
-                instanceActivatedEvent.getNetworkPartitionId(),
+        MemberActivatedEvent memberActivatedEvent = new 
MemberActivatedEvent(instanceActivatedEvent.getServiceName(),
+                instanceActivatedEvent.getClusterId(), 
instanceActivatedEvent.getClusterInstanceId(),
+                instanceActivatedEvent.getMemberId(), 
instanceActivatedEvent.getNetworkPartitionId(),
                 instanceActivatedEvent.getPartitionId());
 
         // grouping - set grouid
@@ -675,7 +589,6 @@ public class TopologyBuilder {
             if (!member.isStateTransitionValid(MemberStatus.Active)) {
                 log.error("Invalid state transition from [" + 
member.getStatus() + "] to [" +
                         MemberStatus.Active + "]");
-                return;
             } else {
                 member.setStatus(MemberStatus.Active);
 
@@ -683,8 +596,8 @@ public class TopologyBuilder {
                 try {
                     Cartridge cartridge = 
CloudControllerContext.getInstance().getCartridge(service.getServiceName());
                     if (cartridge == null) {
-                        throw new RuntimeException(String.format("Cartridge 
not found: [cartridge-type] %s",
-                                service.getServiceName()));
+                        throw new RuntimeException(
+                                String.format("Cartridge not found: 
[cartridge-type] %s", service.getServiceName()));
                     }
 
                     Port port;
@@ -692,7 +605,8 @@ public class TopologyBuilder {
                     List<PortMapping> portMappings = 
Arrays.asList(cartridge.getPortMappings());
                     String clusterId = cluster.getClusterId();
                     ClusterContext clusterContext = 
CloudControllerContext.getInstance().getClusterContext(clusterId);
-                    Collection<KubernetesService> kubernetesServices = 
clusterContext.getKubernetesServices(instanceActivatedEvent.getClusterInstanceId());
+                    Collection<KubernetesService> kubernetesServices = 
clusterContext
+                            
.getKubernetesServices(instanceActivatedEvent.getClusterInstanceId());
 
                     for (PortMapping portMapping : portMappings) {
                         if (!kubernetesServices.isEmpty()) {
@@ -731,16 +645,11 @@ public class TopologyBuilder {
                     if (log.isDebugEnabled()) {
                         log.debug("Publishing Member Status to DAS");
                     }
-                    memStatusPublisher.publish(timestamp,
-                            applicationId,
-                            memberActivatedEvent.getClusterId(),
-                            clusterAlias,
-                            memberActivatedEvent.getClusterInstanceId(),
-                            memberActivatedEvent.getServiceName(),
-                            memberActivatedEvent.getNetworkPartitionId(),
-                            memberActivatedEvent.getPartitionId(),
-                            memberActivatedEvent.getMemberId(),
-                            MemberStatus.Active.toString());
+                    memStatusPublisher
+                            .publish(timestamp, applicationId, 
memberActivatedEvent.getClusterId(), clusterAlias,
+                                    
memberActivatedEvent.getClusterInstanceId(), 
memberActivatedEvent.getServiceName(),
+                                    
memberActivatedEvent.getNetworkPartitionId(), 
memberActivatedEvent.getPartitionId(),
+                                    memberActivatedEvent.getMemberId(), 
MemberStatus.Active.toString());
                 } else {
                     log.warn("Member Status Publisher is not enabled");
                 }
@@ -751,22 +660,20 @@ public class TopologyBuilder {
     }
 
     public static void 
handleMemberReadyToShutdown(InstanceReadyToShutdownEvent 
instanceReadyToShutdownEvent)
-            throws InvalidMemberException, InvalidCartridgeTypeException {
+            throws InvalidMemberException, InvalidCartridgeTypeException, 
RegistryException {
         Topology topology = TopologyManager.getTopology();
         Service service = 
topology.getService(instanceReadyToShutdownEvent.getServiceName());
 
         //update the status of the member
         if (service == null) {
-            log.warn(String.format("Service %s does not exist",
-                    instanceReadyToShutdownEvent.getServiceName()));
-            return;
+            throw new RuntimeException(
+                    String.format("Service %s does not exist", 
instanceReadyToShutdownEvent.getServiceName()));
         }
 
         Cluster cluster = 
service.getCluster(instanceReadyToShutdownEvent.getClusterId());
         if (cluster == null) {
-            log.warn(String.format("Cluster %s does not exist",
-                    instanceReadyToShutdownEvent.getClusterId()));
-            return;
+            throw new RuntimeException(String.format("Cluster %s does not 
exist for service %s",
+                    instanceReadyToShutdownEvent.getClusterId(), 
instanceReadyToShutdownEvent.getServiceName()));
         }
 
         String applicationId = 
service.getCluster(instanceReadyToShutdownEvent.getClusterId()).getAppId();
@@ -774,26 +681,21 @@ public class TopologyBuilder {
 
         Member member = 
cluster.getMember(instanceReadyToShutdownEvent.getMemberId());
         if (member == null) {
-            log.warn(String.format("Member %s does not exist",
-                    instanceReadyToShutdownEvent.getMemberId()));
-            return;
+            throw new RuntimeException(
+                    String.format("Member %s does not exist", 
instanceReadyToShutdownEvent.getMemberId()));
         }
         MemberReadyToShutdownEvent memberReadyToShutdownEvent = new 
MemberReadyToShutdownEvent(
-                instanceReadyToShutdownEvent.getServiceName(),
-                instanceReadyToShutdownEvent.getClusterId(),
-                instanceReadyToShutdownEvent.getClusterInstanceId(),
-                instanceReadyToShutdownEvent.getMemberId(),
-                instanceReadyToShutdownEvent.getNetworkPartitionId(),
-                instanceReadyToShutdownEvent.getPartitionId());
+                instanceReadyToShutdownEvent.getServiceName(), 
instanceReadyToShutdownEvent.getClusterId(),
+                instanceReadyToShutdownEvent.getClusterInstanceId(), 
instanceReadyToShutdownEvent.getMemberId(),
+                instanceReadyToShutdownEvent.getNetworkPartitionId(), 
instanceReadyToShutdownEvent.getPartitionId());
         //member ReadyToShutDown state change time
         Long timestamp = null;
         try {
             TopologyManager.acquireWriteLock();
 
             if (!member.isStateTransitionValid(MemberStatus.ReadyToShutDown)) {
-                log.error("Invalid State Transition from " + 
member.getStatus() + " to " +
+                throw new RuntimeException("Invalid State Transition from " + 
member.getStatus() + " to " +
                         MemberStatus.ReadyToShutDown);
-                return;
             }
             member.setStatus(MemberStatus.ReadyToShutDown);
             log.info("Member Ready to shut down event adding status started");
@@ -811,16 +713,13 @@ public class TopologyBuilder {
             if (log.isDebugEnabled()) {
                 log.debug("Publishing Member Status to DAS");
             }
-            memStatusPublisher.publish(timestamp,
-                    applicationId,
-                    instanceReadyToShutdownEvent.getClusterId(),
-                    clusterAlias,
-                    instanceReadyToShutdownEvent.getClusterInstanceId(),
-                    instanceReadyToShutdownEvent.getServiceName(),
-                    instanceReadyToShutdownEvent.getNetworkPartitionId(),
-                    instanceReadyToShutdownEvent.getPartitionId(),
-                    instanceReadyToShutdownEvent.getMemberId(),
-                    MemberStatus.ReadyToShutDown.toString());
+            memStatusPublisher
+                    .publish(timestamp, applicationId, 
instanceReadyToShutdownEvent.getClusterId(), clusterAlias,
+                            
instanceReadyToShutdownEvent.getClusterInstanceId(),
+                            instanceReadyToShutdownEvent.getServiceName(),
+                            
instanceReadyToShutdownEvent.getNetworkPartitionId(),
+                            instanceReadyToShutdownEvent.getPartitionId(), 
instanceReadyToShutdownEvent.getMemberId(),
+                            MemberStatus.ReadyToShutDown.toString());
         } else {
             log.warn("Member Status Publisher is not enabled");
         }
@@ -828,45 +727,37 @@ public class TopologyBuilder {
     }
 
     public static void handleMemberMaintenance(InstanceMaintenanceModeEvent 
instanceMaintenanceModeEvent)
-            throws InvalidMemberException, InvalidCartridgeTypeException {
+            throws InvalidMemberException, InvalidCartridgeTypeException, 
RegistryException {
         Topology topology = TopologyManager.getTopology();
         Service service = 
topology.getService(instanceMaintenanceModeEvent.getServiceName());
         //update the status of the member
         if (service == null) {
-            log.warn(String.format("Service %s does not exist",
-                    instanceMaintenanceModeEvent.getServiceName()));
-            return;
+            throw new RuntimeException(
+                    String.format("Service %s does not exist", 
instanceMaintenanceModeEvent.getServiceName()));
         }
 
         Cluster cluster = 
service.getCluster(instanceMaintenanceModeEvent.getClusterId());
         if (cluster == null) {
-            log.warn(String.format("Cluster %s does not exist",
-                    instanceMaintenanceModeEvent.getClusterId()));
-            return;
+            throw new RuntimeException(String.format("Cluster %s does not 
exist for service %s",
+                    instanceMaintenanceModeEvent.getClusterId(), 
instanceMaintenanceModeEvent.getServiceName()));
         }
 
         Member member = 
cluster.getMember(instanceMaintenanceModeEvent.getMemberId());
         if (member == null) {
-            log.warn(String.format("Member %s does not exist",
-                    instanceMaintenanceModeEvent.getMemberId()));
-            return;
+            throw new RuntimeException(
+                    String.format("Member %s does not exist", 
instanceMaintenanceModeEvent.getMemberId()));
         }
 
-
         MemberMaintenanceModeEvent memberMaintenanceModeEvent = new 
MemberMaintenanceModeEvent(
-                instanceMaintenanceModeEvent.getServiceName(),
-                instanceMaintenanceModeEvent.getClusterId(),
-                instanceMaintenanceModeEvent.getClusterInstanceId(),
-                instanceMaintenanceModeEvent.getMemberId(),
-                instanceMaintenanceModeEvent.getNetworkPartitionId(),
-                instanceMaintenanceModeEvent.getPartitionId());
+                instanceMaintenanceModeEvent.getServiceName(), 
instanceMaintenanceModeEvent.getClusterId(),
+                instanceMaintenanceModeEvent.getClusterInstanceId(), 
instanceMaintenanceModeEvent.getMemberId(),
+                instanceMaintenanceModeEvent.getNetworkPartitionId(), 
instanceMaintenanceModeEvent.getPartitionId());
         try {
             TopologyManager.acquireWriteLock();
             // try update lifecycle state
             if (!member.isStateTransitionValid(MemberStatus.In_Maintenance)) {
-                log.error("Invalid State Transition from " + 
member.getStatus() + " to "
-                        + MemberStatus.In_Maintenance);
-                return;
+                throw new RuntimeException(
+                        "Invalid State Transition from " + member.getStatus() 
+ " to " + MemberStatus.In_Maintenance);
             }
             member.setStatus(MemberStatus.In_Maintenance);
             log.info("member maintenance mode event adding status started");
@@ -889,31 +780,25 @@ public class TopologyBuilder {
      * @param partitionId
      * @param memberId
      */
-    public static void handleMemberTerminated(String serviceName, String 
clusterId,
-                                              String networkPartitionId, 
String partitionId,
-                                              String memberId) {
+    public static void handleMemberTerminated(String serviceName, String 
clusterId, String networkPartitionId,
+            String partitionId, String memberId) throws RegistryException {
         Topology topology = TopologyManager.getTopology();
         Service service = topology.getService(serviceName);
         Properties properties;
         if (service == null) {
-            log.warn(String.format("Service %s does not exist",
-                    serviceName));
-            return;
+            throw new RuntimeException(String.format("Service %s does not 
exist", serviceName));
         }
         Cluster cluster = service.getCluster(clusterId);
         if (cluster == null) {
-            log.warn(String.format("Cluster %s does not exist",
-                    clusterId));
-            return;
+            throw new RuntimeException(
+                    String.format("Cluster %s does not exist for service %s", 
clusterId, serviceName));
         }
 
         String applicationId = service.getCluster(clusterId).getAppId();
         String clusterAlias = 
CloudControllerUtil.getAliasFromClusterId(clusterId);
         Member member = cluster.getMember(memberId);
         if (member == null) {
-            log.warn(String.format("Member %s does not exist",
-                    memberId));
-            return;
+            throw new RuntimeException((String.format("Member %s does not 
exist", memberId)));
         }
 
         String clusterInstanceId = member.getClusterInstanceId();
@@ -931,9 +816,9 @@ public class TopologyBuilder {
         }
         /* @TODO leftover from grouping_poc*/
         String groupAlias = null;
-        TopologyEventPublisher.sendMemberTerminatedEvent(serviceName, 
clusterId, memberId,
-                clusterInstanceId, networkPartitionId,
-                partitionId, properties, groupAlias);
+        TopologyEventPublisher
+                .sendMemberTerminatedEvent(serviceName, clusterId, memberId, 
clusterInstanceId, networkPartitionId,
+                        partitionId, properties, groupAlias);
 
         //publishing member status to DAS.
         MemberStatusPublisher memStatusPublisher = 
CloudControllerPublisherFactory.
@@ -942,65 +827,45 @@ public class TopologyBuilder {
             if (log.isDebugEnabled()) {
                 log.debug("Publishing Member Status to DAS");
             }
-            memStatusPublisher.publish(timestamp,
-                    applicationId,
-                    member.getClusterId(),
-                    clusterAlias,
-                    member.getClusterInstanceId(),
-                    member.getServiceName(),
-                    member.getNetworkPartitionId(),
-                    member.getPartitionId(),
-                    member.getMemberId(),
-                    MemberStatus.Terminated.toString());
+            memStatusPublisher.publish(timestamp, applicationId, 
member.getClusterId(), clusterAlias,
+                    member.getClusterInstanceId(), member.getServiceName(), 
member.getNetworkPartitionId(),
+                    member.getPartitionId(), member.getMemberId(), 
MemberStatus.Terminated.toString());
         } else {
             log.warn("Member Status Publisher is not enabled");
         }
     }
 
-    public static void handleMemberSuspended() {
-        //TODO
-        try {
-            TopologyManager.acquireWriteLock();
-        } finally {
-            TopologyManager.releaseWriteLock();
-        }
-    }
-
-    public static void 
handleClusterActivatedEvent(ClusterStatusClusterActivatedEvent
-                                                           
clusterStatusClusterActivatedEvent) {
+    public static void handleClusterActivatedEvent(
+            ClusterStatusClusterActivatedEvent 
clusterStatusClusterActivatedEvent) throws RegistryException {
 
         Topology topology = TopologyManager.getTopology();
         Service service = 
topology.getService(clusterStatusClusterActivatedEvent.getServiceName());
         //update the status of the cluster
         if (service == null) {
-            log.warn(String.format("Service %s does not exist",
-                    clusterStatusClusterActivatedEvent.getServiceName()));
-            return;
+            throw new RuntimeException(
+                    String.format("Service %s does not exist", 
clusterStatusClusterActivatedEvent.getServiceName()));
         }
 
         Cluster cluster = 
service.getCluster(clusterStatusClusterActivatedEvent.getClusterId());
         if (cluster == null) {
-            log.warn(String.format("Cluster %s does not exist",
-                    clusterStatusClusterActivatedEvent.getClusterId()));
-            return;
+            throw new RuntimeException(String.format("Cluster %s does not 
exist for service %s",
+                    clusterStatusClusterActivatedEvent.getClusterId(),
+                    clusterStatusClusterActivatedEvent.getServiceName()));
         }
 
         String clusterId = cluster.getClusterId();
         ClusterContext clusterContext = 
CloudControllerContext.getInstance().getClusterContext(clusterId);
         if (clusterContext == null) {
-            log.warn("Cluster context not found: [cluster-id] " + clusterId);
-            return;
+            throw new RuntimeException(String.format("Cluster context not 
found [cluster-id] %s", clusterId));
         }
 
-        ClusterInstanceActivatedEvent clusterInstanceActivatedEvent =
-                new ClusterInstanceActivatedEvent(
-                        clusterStatusClusterActivatedEvent.getAppId(),
-                        clusterStatusClusterActivatedEvent.getServiceName(),
-                        clusterStatusClusterActivatedEvent.getClusterId(),
-                        clusterStatusClusterActivatedEvent.getInstanceId());
+        ClusterInstanceActivatedEvent clusterInstanceActivatedEvent = new 
ClusterInstanceActivatedEvent(
+                clusterStatusClusterActivatedEvent.getAppId(), 
clusterStatusClusterActivatedEvent.getServiceName(),
+                clusterStatusClusterActivatedEvent.getClusterId(), 
clusterStatusClusterActivatedEvent.getInstanceId());
         try {
             TopologyManager.acquireWriteLock();
-            Collection<KubernetesService> kubernetesServices = 
clusterContext.getKubernetesServices(clusterStatusClusterActivatedEvent.getInstanceId());
+            Collection<KubernetesService> kubernetesServices = clusterContext
+                    
.getKubernetesServices(clusterStatusClusterActivatedEvent.getInstanceId());
 
             if (kubernetesServices != null) {
 
@@ -1015,14 +880,18 @@ public class TopologyBuilder {
                                 for (String publicIP : publicIPs) {
                                     // There can be a String array with null 
values
                                     if (publicIP != null) {
-                                        // Using type URI since only http, 
https, ftp, file, jar protocols are supported in URL
+                                        // Using type URI since only http, 
https, ftp, file, jar protocols are
+                                        // supported in URL
                                         URI accessURL = new 
URI(kubernetesService.getProtocol(), null, publicIP,
                                                 kubernetesService.getPort(), 
null, null, null);
-                                        
cluster.addAccessUrl(clusterStatusClusterActivatedEvent.getInstanceId(),accessURL.toString());
+                                        
cluster.addAccessUrl(clusterStatusClusterActivatedEvent.getInstanceId(),
+                                                accessURL.toString());
                                         
clusterInstanceActivatedEvent.addAccessUrl(accessURL.toString());
                                     } else {
-                                        log.error(String.format("Could not 
create access URL for [Kubernetes-service] %s , " +
-                                                "since Public IP is not 
available", kubernetesService.getId()));
+                                        log.error(String.format(
+                                                "Could not create access URL 
for [Kubernetes-service] %s , "
+                                                        + "since Public IP is 
not available",
+                                                kubernetesService.getId()));
                                     }
                                 }
                             }
@@ -1036,10 +905,9 @@ public class TopologyBuilder {
             ClusterInstance context = 
cluster.getInstanceContexts(clusterStatusClusterActivatedEvent.getInstanceId());
 
             if (context == null) {
-                log.warn("Cluster instance context is not found for [cluster] 
" +
+                throw new RuntimeException("Cluster instance context is not 
found for [cluster] " +
                         clusterStatusClusterActivatedEvent.getClusterId() + " 
[instance-id] " +
                         clusterStatusClusterActivatedEvent.getInstanceId());
-                return;
             }
             ClusterStatus status = ClusterStatus.Active;
             if (context.isStateTransitionValid(status)) {
@@ -1049,11 +917,10 @@ public class TopologyBuilder {
                 // publish event
                 
TopologyEventPublisher.sendClusterActivatedEvent(clusterInstanceActivatedEvent);
             } else {
-                log.error(String.format("Cluster state transition is not 
valid: [cluster-id] %s " +
-                                " [instance-id] %s [current-status] %s 
[status-requested] %s",
-                        clusterStatusClusterActivatedEvent.getClusterId(), 
clusterStatusClusterActivatedEvent.getInstanceId(),
-                        context.getStatus(), status));
-                return;
+                throw new RuntimeException(String.format("Cluster state 
transition is not valid: [cluster-id] %s "
+                                + " [instance-id] %s [current-status] %s 
[status-requested] %s",
+                        clusterStatusClusterActivatedEvent.getClusterId(),
+                        clusterStatusClusterActivatedEvent.getInstanceId(), 
context.getStatus(), status));
             }
         } finally {
             TopologyManager.releaseWriteLock();
@@ -1061,38 +928,33 @@ public class TopologyBuilder {
 
     }
 
-    public static void handleClusterInactivateEvent(
-            ClusterStatusClusterInactivateEvent clusterInactivateEvent) {
+    public static void 
handleClusterInactivateEvent(ClusterStatusClusterInactivateEvent 
clusterInactivateEvent)
+            throws RegistryException {
         Topology topology = TopologyManager.getTopology();
         Service service = 
topology.getService(clusterInactivateEvent.getServiceName());
         //update the status of the cluster
         if (service == null) {
-            log.warn(String.format("Service %s does not exist",
-                    clusterInactivateEvent.getServiceName()));
-            return;
+            throw new RuntimeException(
+                    String.format("Service %s does not exist", 
clusterInactivateEvent.getServiceName()));
         }
 
         Cluster cluster = 
service.getCluster(clusterInactivateEvent.getClusterId());
         if (cluster == null) {
-            log.warn(String.format("Cluster %s does not exist",
-                    clusterInactivateEvent.getClusterId()));
-            return;
+            throw new RuntimeException(
+                    String.format("Cluster %s does not exist for service %s", 
clusterInactivateEvent.getClusterId(),
+                            clusterInactivateEvent.getServiceName()));
         }
 
-        ClusterInstanceInactivateEvent clusterInactivatedEvent1 =
-                new ClusterInstanceInactivateEvent(
-                        clusterInactivateEvent.getAppId(),
-                        clusterInactivateEvent.getServiceName(),
-                        clusterInactivateEvent.getClusterId(),
-                        clusterInactivateEvent.getInstanceId());
+        ClusterInstanceInactivateEvent clusterInactivatedEvent1 = new 
ClusterInstanceInactivateEvent(
+                clusterInactivateEvent.getAppId(), 
clusterInactivateEvent.getServiceName(),
+                clusterInactivateEvent.getClusterId(), 
clusterInactivateEvent.getInstanceId());
         try {
             TopologyManager.acquireWriteLock();
             ClusterInstance context = 
cluster.getInstanceContexts(clusterInactivateEvent.getInstanceId());
             if (context == null) {
-                log.warn("Cluster Instance Context is not found for [cluster] 
" +
+                throw new RuntimeException("Cluster Instance Context is not 
found for [cluster] " +
                         clusterInactivateEvent.getClusterId() + " 
[instance-id] " +
                         clusterInactivateEvent.getInstanceId());
-                return;
             }
             ClusterStatus status = ClusterStatus.Inactive;
             if (context.isStateTransitionValid(status)) {
@@ -1102,83 +964,66 @@ public class TopologyBuilder {
                 //publishing data
                 
TopologyEventPublisher.sendClusterInactivateEvent(clusterInactivatedEvent1);
             } else {
-                log.error(String.format("Cluster state transition is not 
valid: [cluster-id] %s " +
-                                " [instance-id] %s [current-status] %s 
[status-requested] %s",
+                log.error(String.format("Cluster state transition is not 
valid: [cluster-id] %s "
+                                + " [instance-id] %s [current-status] %s 
[status-requested] %s",
                         clusterInactivateEvent.getClusterId(), 
clusterInactivateEvent.getInstanceId(),
                         context.getStatus(), status));
-                return;
             }
         } finally {
             TopologyManager.releaseWriteLock();
         }
     }
 
-
-    private static void 
deleteAppResourcesFromMetadataService(ApplicationInstanceTerminatedEvent event) 
{
-        try {
-            MetaDataServiceClient metadataClient = new 
DefaultMetaDataServiceClient();
-            metadataClient.deleteApplicationProperties(event.getAppId());
-        } catch (Exception e) {
-            log.error("Error occurred while deleting the application resources 
frm metadata service ", e);
-        }
-    }
-
-    public static void 
handleClusterTerminatedEvent(ClusterStatusClusterTerminatedEvent event) {
-
+    public static void 
handleClusterTerminatedEvent(ClusterStatusClusterTerminatedEvent event)
+            throws RegistryException {
         TopologyManager.acquireWriteLock();
-
         try {
             Topology topology = TopologyManager.getTopology();
             Service service = topology.getService(event.getServiceName());
 
             //update the status of the cluster
             if (service == null) {
-                log.warn(String.format("Service %s does not exist",
-                        event.getServiceName()));
-                return;
+                throw new RuntimeException(String.format("Service %s does not 
exist", event.getServiceName()));
             }
 
             Cluster cluster = service.getCluster(event.getClusterId());
             if (cluster == null) {
-                log.warn(String.format("Cluster %s does not exist",
-                        event.getClusterId()));
-                return;
+                throw new RuntimeException(
+                        String.format("Cluster %s does not exist for service 
%s", event.getClusterId(),
+                                event.getServiceName()));
             }
 
             ClusterInstance context = 
cluster.getInstanceContexts(event.getInstanceId());
             if (context == null) {
-                log.warn("Cluster Instance Context is not found for [cluster] 
" +
+                throw new RuntimeException("Cluster Instance Context is not 
found for [cluster] " +
                         event.getClusterId() + " [instance-id] " +
                         event.getInstanceId());
-                return;
             }
             ClusterStatus status = ClusterStatus.Terminated;
             if (context.isStateTransitionValid(status)) {
                 context.setStatus(status);
-                log.info("Cluster Terminated adding status started for and 
removing the cluster instance"
-                        + cluster.getClusterId());
+                log.info("Cluster Terminated adding status started for and 
removing the cluster instance" + cluster
+                        .getClusterId());
                 cluster.removeInstanceContext(event.getInstanceId());
                 TopologyManager.updateTopology(topology);
                 //publishing data
-                ClusterInstanceTerminatedEvent clusterTerminatedEvent = new 
ClusterInstanceTerminatedEvent(event.getAppId(),
-                        event.getServiceName(), event.getClusterId(), 
event.getInstanceId());
+                ClusterInstanceTerminatedEvent clusterTerminatedEvent = new 
ClusterInstanceTerminatedEvent(
+                        event.getAppId(), event.getServiceName(), 
event.getClusterId(), event.getInstanceId());
 
                 
TopologyEventPublisher.sendClusterTerminatedEvent(clusterTerminatedEvent);
             } else {
-                log.error(String.format("Cluster state transition is not 
valid: [cluster-id] %s " +
-                                " [instance-id] %s [current-status] %s 
[status-requested] %s",
-                        event.getClusterId(), event.getInstanceId(),
-                        context.getStatus(), status));
-                return;
+                throw new RuntimeException(String.format("Cluster state 
transition is not valid: [cluster-id] %s "
+                                + " [instance-id] %s [current-status] %s 
[status-requested] %s", event.getClusterId(),
+                        event.getInstanceId(), context.getStatus(), status));
             }
         } finally {
             TopologyManager.releaseWriteLock();
         }
 
-
     }
 
-    public static void 
handleClusterTerminatingEvent(ClusterStatusClusterTerminatingEvent event) {
+    public static void 
handleClusterTerminatingEvent(ClusterStatusClusterTerminatingEvent event)
+            throws RegistryException {
 
         TopologyManager.acquireWriteLock();
 
@@ -1193,10 +1038,9 @@ public class TopologyBuilder {
             }
             ClusterInstance context = 
cluster.getInstanceContexts(event.getInstanceId());
             if (context == null) {
-                log.warn("Cluster Instance Context is not found for [cluster] 
" +
+                throw new RuntimeException("Cluster Instance Context is not 
found for [cluster] " +
                         event.getClusterId() + " [instance-id] " +
                         event.getInstanceId());
-                return;
             }
             ClusterStatus status = ClusterStatus.Terminating;
             if (context.isStateTransitionValid(status)) {
@@ -1204,22 +1048,21 @@ public class TopologyBuilder {
                 log.info("Cluster Terminating started for " + 
cluster.getClusterId());
                 TopologyManager.updateTopology(topology);
                 //publishing data
-                ClusterInstanceTerminatingEvent clusterTerminaingEvent = new 
ClusterInstanceTerminatingEvent(event.getAppId(),
-                        event.getServiceName(), event.getClusterId(), 
event.getInstanceId());
+                ClusterInstanceTerminatingEvent clusterTerminaingEvent = new 
ClusterInstanceTerminatingEvent(
+                        event.getAppId(), event.getServiceName(), 
event.getClusterId(), event.getInstanceId());
 
                 
TopologyEventPublisher.sendClusterTerminatingEvent(clusterTerminaingEvent);
 
                 // Remove kubernetes services if available
-                ClusterContext clusterContext =
-                        
CloudControllerContext.getInstance().getClusterContext(event.getClusterId());
+                ClusterContext clusterContext = 
CloudControllerContext.getInstance()
+                        .getClusterContext(event.getClusterId());
 
                 KubernetesIaas.removeKubernetesServices(clusterContext, 
context.getInstanceId());
 
             } else {
-                log.error(String.format("Cluster state transition is not 
valid: [cluster-id] %s " +
-                                " [instance-id] %s [current-status] %s 
[status-requested] %s",
-                        event.getClusterId(), event.getInstanceId(),
-                        context.getStatus(), status));
+                log.error(String.format("Cluster state transition is not 
valid: [cluster-id] %s "
+                                + " [instance-id] %s [current-status] %s 
[status-requested] %s", event.getClusterId(),
+                        event.getInstanceId(), context.getStatus(), status));
             }
         } finally {
             TopologyManager.releaseWriteLock();

http://git-wip-us.apache.org/repos/asf/stratos/blob/8d46fab0/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyManager.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyManager.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyManager.java
index 54be65f..f6f6036 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyManager.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyManager.java
@@ -21,10 +21,12 @@ package 
org.apache.stratos.cloud.controller.messaging.topology;
 import com.google.gson.Gson;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.cloud.controller.registry.RegistryManager;
+import org.apache.stratos.cloud.controller.util.CloudControllerConstants;
 import org.apache.stratos.cloud.controller.util.CloudControllerUtil;
 import org.apache.stratos.common.concurrent.locks.ReadWriteLock;
 import org.apache.stratos.messaging.domain.topology.Topology;
-
+import org.wso2.carbon.registry.core.exceptions.RegistryException;
 
 /**
  * Persistence and retrieval of Topology from Registry
@@ -92,15 +94,15 @@ public class TopologyManager {
     /**
      * Update in-memory topology and persist it in registry.
      *
-     * @param topology_
+     * @param updatedTopology
      */
-    public static void updateTopology(Topology topology_) {
+    public static void updateTopology(Topology updatedTopology) throws 
RegistryException {
         synchronized (TopologyManager.class) {
             if (log.isDebugEnabled()) {
                 log.debug("Updating topology");
             }
-            topology = topology_;
-            CloudControllerUtil.persistTopology(topology);
+            topology = updatedTopology;
+            
RegistryManager.getInstance().persist(CloudControllerConstants.TOPOLOGY_RESOURCE,
 topology);
             if (log.isDebugEnabled()) {
                 log.debug(String.format("Topology updated: %s", 
toJson(topology)));
             }

Reply via email to