Repository: stratos
Updated Branches:
  refs/heads/master 396aa955c -> f0cacdff2


fixing STRATOS-685


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

Branch: refs/heads/master
Commit: f0cacdff231dd851e7687660e224f498d256f6f1
Parents: 396aa95
Author: rekathiru <[email protected]>
Authored: Thu Jun 26 10:57:46 2014 +0530
Committer: rekathiru <[email protected]>
Committed: Thu Jun 26 10:57:46 2014 +0530

----------------------------------------------------------------------
 .../AutoscalerTopologyEventReceiver.java        |  52 ++++++++
 .../internal/CloudControllerDSComponent.java    |   2 +-
 .../CartridgeInstanceDataPublisher.java         | 121 +++++++++----------
 .../controller/topology/TopologyBuilder.java    |   4 +-
 4 files changed, 112 insertions(+), 67 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/f0cacdff/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
index cf6223c..ce8d185 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
@@ -22,9 +22,12 @@ package 
org.apache.stratos.autoscaler.message.receiver.topology;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.autoscaler.*;
+import 
org.apache.stratos.autoscaler.client.cloud.controller.CloudControllerClient;
+import org.apache.stratos.cloud.controller.stub.deployment.partition.Partition;
 import org.apache.stratos.autoscaler.deployment.policy.DeploymentPolicy;
 import org.apache.stratos.autoscaler.exception.PartitionValidationException;
 import org.apache.stratos.autoscaler.exception.PolicyValidationException;
+import org.apache.stratos.autoscaler.exception.TerminationException;
 import org.apache.stratos.autoscaler.monitor.AbstractMonitor;
 import org.apache.stratos.autoscaler.monitor.ClusterMonitor;
 import org.apache.stratos.autoscaler.monitor.LbClusterMonitor;
@@ -285,6 +288,54 @@ public class AutoscalerTopologyEventReceiver implements 
Runnable {
             }
         });
 
+        topologyEventReceiver.addEventListener(new 
MemberReadyToShutdownEventListener() {
+           @Override
+           protected void onEvent(Event event) {
+               try {
+                   MemberReadyToShutdownEvent memberReadyToShutdownEvent = 
(MemberReadyToShutdownEvent)event;
+                   AutoscalerContext asCtx = AutoscalerContext.getInstance();
+                   AbstractMonitor monitor;
+                   String clusterId = 
memberReadyToShutdownEvent.getClusterId();
+                   String memberId = memberReadyToShutdownEvent.getMemberId();
+
+                   if(asCtx.monitorExist(clusterId)){
+                       monitor = asCtx.getMonitor(clusterId);
+                   }else if(asCtx.lbMonitorExist(clusterId)){
+                       monitor = asCtx.getLBMonitor(clusterId);
+                   }else{
+                       if(log.isDebugEnabled()){
+                           log.debug(String.format("A cluster monitor is not 
found in autoscaler context [cluster] %s", clusterId));
+                       }
+                       return;
+                   }
+
+                   NetworkPartitionContext nwPartitionCtxt;
+                   nwPartitionCtxt = 
monitor.getNetworkPartitionCtxt(memberReadyToShutdownEvent.getNetworkPartitionId());
+
+                   // start a new member in the same Partition
+                   String partitionId = monitor.getPartitionOfMember(memberId);
+                   Partition partition = 
monitor.getDeploymentPolicy().getPartitionById(partitionId);
+                   PartitionContext partitionCtxt = 
nwPartitionCtxt.getPartitionCtxt(partitionId);
+
+
+                   // terminate the shutdown ready member
+                   CloudControllerClient ccClient = 
CloudControllerClient.getInstance();
+                   ccClient.terminate(memberId);
+
+                   // remove from active member list
+                   partitionCtxt.removeActiveMemberById(memberId);
+
+                   if (log.isInfoEnabled()) {
+                       log.info(String.format("Member is terminated and 
removed from the active members list: [member] %s [partition] %s [cluster] %s ",
+                                              memberId, partitionId, 
clusterId));
+                   }
+               } catch (TerminationException e) {
+                   log.error(e);
+               }
+           }
+
+       });
+
 
         topologyEventReceiver.addEventListener(new MemberMaintenanceListener() 
{
             @Override
@@ -323,6 +374,7 @@ public class AutoscalerTopologyEventReceiver implements 
Runnable {
             }
         });
 
+
         topologyEventReceiver.addEventListener(new 
ServiceRemovedEventListener() {
             @Override
             protected void onEvent(Event event) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/f0cacdff/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/internal/CloudControllerDSComponent.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/internal/CloudControllerDSComponent.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/internal/CloudControllerDSComponent.java
index 35e22dd..0c9f5c2 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/internal/CloudControllerDSComponent.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/internal/CloudControllerDSComponent.java
@@ -84,7 +84,7 @@ public class CloudControllerDSComponent {
             Thread tdelegator = new Thread(delegator);
             tdelegator.start();
                
-               // Register cloud controller service                            
                       E
+               // Register cloud controller service
             BundleContext bundleContext = context.getBundleContext();
             
bundleContext.registerService(CloudControllerService.class.getName(), new 
CloudControllerServiceImpl(), null);
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/f0cacdff/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/publisher/CartridgeInstanceDataPublisher.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/publisher/CartridgeInstanceDataPublisher.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/publisher/CartridgeInstanceDataPublisher.java
index d56e7fb..79546c8 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/publisher/CartridgeInstanceDataPublisher.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/publisher/CartridgeInstanceDataPublisher.java
@@ -23,7 +23,7 @@ import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.cloud.controller.exception.CloudControllerException;
 import 
org.apache.stratos.cloud.controller.exception.UnregisteredCartridgeException;
 import org.apache.stratos.cloud.controller.impl.CloudControllerServiceImpl;
-import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
+import org.apache.stratos.cloud.controller.pojo.Cartridge;
 import org.apache.stratos.cloud.controller.pojo.MemberContext;
 import org.apache.stratos.cloud.controller.runtime.FasterLookUpDataHolder;
 import org.apache.stratos.cloud.controller.util.CloudControllerConstants;
@@ -75,73 +75,68 @@ public class CartridgeInstanceDataPublisher {
                 return;
             }
         }
-        CartridgeInfo cartridgeInfo = null;
+        Cartridge cartridge = 
FasterLookUpDataHolder.getInstance().getCartridge(serviceName);
+
+        MemberContext memberContext = 
FasterLookUpDataHolder.getInstance().getMemberContextOfMemberId(memberId);
+        //Construct the data to be published
+        List<Object> payload = new ArrayList<Object>();
+        // Payload values
+        payload.add(memberId);
+        payload.add(serviceName);
+        payload.add(clusterId);
+        payload.add(memberContext.getLbClusterId());
+        payload.add(partitionId);
+        payload.add(networkId);
+        if(cartridge != null) {
+            payload.add(String.valueOf(cartridge.isMultiTenant()));
+        } else {
+            payload.add("");
+        }
+        payload.add(memberContext.getPartition().getProvider());
+        payload.add(status);
+
+        if(metadata != null) {
+            payload.add(metadata.getHostname());
+            payload.add(metadata.getHardware().getHypervisor());
+            payload.add(String.valueOf(metadata.getHardware().getRam()));
+            payload.add(metadata.getImageId());
+            payload.add(metadata.getLoginPort());
+            payload.add(metadata.getOperatingSystem().getName());
+            payload.add(metadata.getOperatingSystem().getVersion());
+            payload.add(metadata.getOperatingSystem().getArch());
+            
payload.add(String.valueOf(metadata.getOperatingSystem().is64Bit()));
+        } else {
+            payload.add("");
+            payload.add("");
+            payload.add("");
+            payload.add("");
+            payload.add(0);
+            payload.add("");
+            payload.add("");
+            payload.add("");
+            payload.add("");
+        }
+
+        payload.add(memberContext.getPrivateIpAddress());
+        payload.add(memberContext.getPublicIpAddress());
+        payload.add(memberContext.getAllocatedIpAddress());
+
+        Event event = new Event();
+        event.setPayloadData(payload.toArray());
+        event.setArbitraryDataMap(new HashMap<String, String>());
+
         try {
-            cartridgeInfo = new 
CloudControllerServiceImpl().getCartridgeInfo(serviceName);
-        } catch (UnregisteredCartridgeException e) {
-            log.error("error while getting the cartridge information when 
publishing the state changes... ");
-        } finally {
-            MemberContext memberContext = 
FasterLookUpDataHolder.getInstance().getMemberContextOfMemberId(memberId);
-            //Construct the data to be published
-            List<Object> payload = new ArrayList<Object>();
-            // Payload values
-            payload.add(memberId);
-            payload.add(serviceName);
-            payload.add(clusterId);
-            payload.add(memberContext.getLbClusterId());
-            payload.add(partitionId);
-            payload.add(networkId);
-            if(cartridgeInfo != null) {
-                payload.add(String.valueOf(cartridgeInfo.isMultiTenant()));
-            } else {
-                payload.add("");
+            if (log.isDebugEnabled()) {
+                log.debug(String.format("Publishing BAM event: [stream] %s 
[version] %s", streamDefinition.getName(), streamDefinition.getVersion()));
             }
-            payload.add(memberContext.getPartition().getProvider());
-            payload.add(status);
-
-            if(metadata != null) {
-                payload.add(metadata.getHostname());
-                payload.add(metadata.getHardware().getHypervisor());
-                payload.add(String.valueOf(metadata.getHardware().getRam()));
-                payload.add(metadata.getImageId());
-                payload.add(metadata.getLoginPort());
-                payload.add(metadata.getOperatingSystem().getName());
-                payload.add(metadata.getOperatingSystem().getVersion());
-                payload.add(metadata.getOperatingSystem().getArch());
-                
payload.add(String.valueOf(metadata.getOperatingSystem().is64Bit()));
-            } else {
-                payload.add("");
-                payload.add("");
-                payload.add("");
-                payload.add("");
-                payload.add(0);
-                payload.add("");
-                payload.add("");
-                payload.add("");
-                payload.add("");
-            }
-
-            payload.add(memberContext.getPrivateIpAddress());
-            payload.add(memberContext.getPublicIpAddress());
-            payload.add(memberContext.getAllocatedIpAddress());
-
-            Event event = new Event();
-            event.setPayloadData(payload.toArray());
-            event.setArbitraryDataMap(new HashMap<String, String>());
-
-            try {
-                if (log.isDebugEnabled()) {
-                    log.debug(String.format("Publishing BAM event: [stream] %s 
[version] %s", streamDefinition.getName(), streamDefinition.getVersion()));
-                }
-                dataPublisher.publish(streamDefinition.getName(), 
streamDefinition.getVersion(), event);
-            } catch (AgentException e) {
-                if (log.isErrorEnabled()) {
-                    log.error(String.format("Could not publish BAM event: 
[stream] %s [version] %s", streamDefinition.getName(), 
streamDefinition.getVersion()), e);
-                }
+            dataPublisher.publish(streamDefinition.getName(), 
streamDefinition.getVersion(), event);
+        } catch (AgentException e) {
+            if (log.isErrorEnabled()) {
+                log.error(String.format("Could not publish BAM event: [stream] 
%s [version] %s", streamDefinition.getName(), streamDefinition.getVersion()), 
e);
             }
+        }
 
     }
-}
     
     private static void release(){
         FasterLookUpDataHolder.getInstance().setPublisherRunning(false);

http://git-wip-us.apache.org/repos/asf/stratos/blob/f0cacdff/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java
index 9c3ea70..11a2ebd 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java
@@ -353,9 +353,7 @@ public class TopologyBuilder {
                                             
instanceReadyToShutdownEvent.getServiceName(),
                                             
MemberStatus.ReadyToShutDown.toString(),
                                             null);
-        //calling the actual termination of the instance
-        new CloudControllerServiceImpl().terminateInstance(memberId);
-
+        //termination of particular instance will be handled by autoscaler
     }
 
      public static void handleMemberMaintenance(InstanceMaintenanceModeEvent 
instanceMaintenanceModeEvent)

Reply via email to