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)
