Repository: stratos
Updated Branches:
  refs/heads/docker-grouping-merge 74405a55a -> 6805c113c


Changing package name client.cloud.controller to client


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

Branch: refs/heads/docker-grouping-merge
Commit: 6805c113c6f4f165533637f8cec87fee8a3dcd7a
Parents: 74405a5
Author: Lahiru Sandaruwan <[email protected]>
Authored: Fri Nov 7 09:57:33 2014 +0530
Committer: Lahiru Sandaruwan <[email protected]>
Committed: Fri Nov 7 09:57:33 2014 +0530

----------------------------------------------------------------------
 .../autoscaler/api/AutoScalerServiceImpl.java   |   2 +-
 .../parser/DefaultApplicationParser.java        |   2 +-
 .../applications/topic/ApplicationBuilder.java  |   2 +-
 .../client/CloudControllerClient.java           | 390 +++++++++++++++++++
 .../client/InstanceNotificationClient.java      |  71 ++++
 .../cloud/controller/CloudControllerClient.java | 390 -------------------
 .../controller/InstanceNotificationClient.java  |  71 ----
 .../monitor/cluster/ClusterMonitorFactory.java  |   2 +-
 .../cluster/KubernetesClusterMonitor.java       |   2 +-
 .../monitor/cluster/VMClusterMonitor.java       |   2 +-
 .../autoscaler/partition/PartitionManager.java  |   2 +-
 .../autoscaler/rule/RuleTasksDelegator.java     |   4 +-
 .../src/test/resources/autoscaler-old.drl       |   2 +-
 .../src/test/resources/autoscaler.drl           |   2 +-
 .../test/resources/minimum-autoscaler-rule.drl  |   2 +-
 .../resources/test-minimum-autoscaler-rule.drl  |   2 +-
 .../test-terminating-obsoleted-members-rule.drl |   2 +-
 .../src/main/conf/drools/mincheck.drl           |   2 +-
 .../src/main/conf/drools/obsoletecheck.drl      |   2 +-
 .../src/main/conf/drools/scaling.drl            |   2 +-
 20 files changed, 478 insertions(+), 478 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/6805c113/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
index 90aac2d..798890c 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
@@ -27,7 +27,7 @@ import 
org.apache.stratos.autoscaler.applications.parser.ApplicationParser;
 import 
org.apache.stratos.autoscaler.applications.parser.DefaultApplicationParser;
 import org.apache.stratos.autoscaler.applications.pojo.ApplicationContext;
 import org.apache.stratos.autoscaler.applications.topic.ApplicationBuilder;
-import 
org.apache.stratos.autoscaler.client.cloud.controller.CloudControllerClient;
+import org.apache.stratos.autoscaler.client.CloudControllerClient;
 import org.apache.stratos.autoscaler.policy.model.DeploymentPolicy;
 import org.apache.stratos.autoscaler.exception.*;
 import org.apache.stratos.autoscaler.interfaces.AutoScalerServiceInterface;

http://git-wip-us.apache.org/repos/asf/stratos/blob/6805c113/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java
index 9be2fa2..c0acb32 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java
@@ -27,7 +27,7 @@ import 
org.apache.stratos.autoscaler.applications.ClusterInformation;
 import org.apache.stratos.autoscaler.applications.MTClusterInformation;
 import org.apache.stratos.autoscaler.applications.STClusterInformation;
 import org.apache.stratos.autoscaler.applications.pojo.*;
-import 
org.apache.stratos.autoscaler.client.cloud.controller.CloudControllerClient;
+import org.apache.stratos.autoscaler.client.CloudControllerClient;
 import org.apache.stratos.autoscaler.exception.ApplicationDefinitionException;
 import org.apache.stratos.autoscaler.exception.CartridgeInformationException;
 import org.apache.stratos.autoscaler.pojo.ServiceGroup;

http://git-wip-us.apache.org/repos/asf/stratos/blob/6805c113/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java
index a64582f..3bbcf7e 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java
@@ -23,7 +23,7 @@ import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.autoscaler.AutoscalerContext;
 import org.apache.stratos.autoscaler.applications.ApplicationHolder;
 import 
org.apache.stratos.autoscaler.applications.pojo.ApplicationClusterContext;
-import 
org.apache.stratos.autoscaler.client.cloud.controller.CloudControllerClient;
+import org.apache.stratos.autoscaler.client.CloudControllerClient;
 import org.apache.stratos.autoscaler.exception.DependencyBuilderException;
 import org.apache.stratos.autoscaler.exception.TopologyInConsistentException;
 import org.apache.stratos.autoscaler.monitor.application.ApplicationMonitor;

http://git-wip-us.apache.org/repos/asf/stratos/blob/6805c113/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/CloudControllerClient.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/CloudControllerClient.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/CloudControllerClient.java
new file mode 100644
index 0000000..c8163cf
--- /dev/null
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/CloudControllerClient.java
@@ -0,0 +1,390 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one 
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
+ * KIND, either express or implied.  TcSee the License for the 
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.autoscaler.client;
+
+import org.apache.axis2.transport.http.HTTPConstants;
+import org.apache.commons.configuration.XMLConfiguration;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.autoscaler.Constants;
+import 
org.apache.stratos.autoscaler.applications.pojo.ApplicationClusterContext;
+import org.apache.stratos.autoscaler.policy.model.DeploymentPolicy;
+import org.apache.stratos.autoscaler.exception.*;
+import org.apache.stratos.autoscaler.kubernetes.KubernetesManager;
+import org.apache.stratos.autoscaler.util.ConfUtil;
+import org.apache.stratos.cloud.controller.stub.*;
+import org.apache.stratos.cloud.controller.stub.deployment.partition.Partition;
+import org.apache.stratos.cloud.controller.stub.pojo.*;
+import org.apache.stratos.common.constants.StratosConstants;
+import org.apache.stratos.common.kubernetes.KubernetesGroup;
+import org.apache.stratos.common.kubernetes.KubernetesMaster;
+import org.apache.stratos.cloud.controller.stub.pojo.Properties;
+import org.apache.stratos.cloud.controller.stub.pojo.Property;
+
+import java.rmi.RemoteException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * This class will call cloud controller web service to take the action 
decided by Autoscaler
+ */
+public class CloudControllerClient {
+
+    private static final Log log = 
LogFactory.getLog(CloudControllerClient.class);
+    private static CloudControllerServiceStub stub;
+
+    /* An instance of a CloudControllerClient is created when the class is 
loaded. 
+     * Since the class is loaded only once, it is guaranteed that an object of 
+     * CloudControllerClient is created only once. Hence it is singleton.
+     */
+    private static class InstanceHolder {
+        private static final CloudControllerClient INSTANCE = new 
CloudControllerClient();
+    }
+
+    public static CloudControllerClient getInstance() {
+        return InstanceHolder.INSTANCE;
+    }
+
+    private CloudControllerClient() {
+        try {
+            XMLConfiguration conf = 
ConfUtil.getInstance(null).getConfiguration();
+            int port = conf.getInt("autoscaler.cloudController.port", 
Constants.CLOUD_CONTROLLER_DEFAULT_PORT);
+            String hostname = 
conf.getString("autoscaler.cloudController.hostname", "localhost");
+            String epr = "https://"; + hostname + ":" + port + "/" + 
Constants.CLOUD_CONTROLLER_SERVICE_SFX;
+            int cloudControllerClientTimeout = 
conf.getInt("autoscaler.cloudController.clientTimeout", 180000);
+            stub = new CloudControllerServiceStub(epr);
+            
stub._getServiceClient().getOptions().setProperty(HTTPConstants.SO_TIMEOUT, 
cloudControllerClientTimeout);
+            
stub._getServiceClient().getOptions().setProperty(HTTPConstants.CONNECTION_TIMEOUT,
 cloudControllerClientTimeout);
+        } catch (Exception e) {
+            log.error("Stub init error", e);
+        }
+    }
+    
+    /*
+     * This will validate the given partitions against the given cartridge 
type.
+     */
+
+    public synchronized boolean validateDeploymentPolicy(String cartridgeType, 
DeploymentPolicy deploymentPolicy) throws PartitionValidationException {
+        try {
+            if (log.isInfoEnabled()) {
+                log.info(String.format("Validating partitions of policy via 
cloud controller: [id] %s", deploymentPolicy.getId()));
+            }
+            long startTime = System.currentTimeMillis();
+            boolean result = stub.validateDeploymentPolicy(cartridgeType, 
deploymentPolicy.getAllPartitions());
+            if (log.isDebugEnabled()) {
+                long endTime = System.currentTimeMillis();
+                log.debug(String.format("Service call 
validateDeploymentPolicy() returned in %dms", (endTime - startTime)));
+            }
+            return result;
+        } catch (RemoteException e) {
+            log.error(e.getMessage(), e);
+            throw new PartitionValidationException(e.getMessage(), e);
+        } catch (CloudControllerServiceInvalidPartitionExceptionException e) {
+            
log.error(e.getFaultMessage().getInvalidPartitionException().getMessage(), e);
+            throw new 
PartitionValidationException(e.getFaultMessage().getInvalidPartitionException().getMessage());
+        } catch (CloudControllerServiceInvalidCartridgeTypeExceptionException 
e) {
+            
log.error(e.getFaultMessage().getInvalidCartridgeTypeException().getMessage(), 
e);
+            throw new 
PartitionValidationException(e.getFaultMessage().getInvalidCartridgeTypeException().getMessage());
+        }
+
+    }
+
+    /*
+     * Calls the CC to validate the partition.
+     */
+    public synchronized boolean validatePartition(Partition partition) throws 
PartitionValidationException {
+
+        try {
+            if (log.isInfoEnabled()) {
+                log.info(String.format("Validating partition via cloud 
controller: [id] %s", partition.getId()));
+            }
+            long startTime = System.currentTimeMillis();
+            boolean result = stub.validatePartition(partition);
+            if (log.isDebugEnabled()) {
+                long endTime = System.currentTimeMillis();
+                log.debug(String.format("Service call validatePartition() 
returned in %dms", (endTime - startTime)));
+            }
+            return result;
+        } catch (RemoteException e) {
+            log.error(e.getMessage(), e);
+            throw new PartitionValidationException(e.getMessage(), e);
+        } catch (CloudControllerServiceInvalidPartitionExceptionException e) {
+            
log.error(e.getFaultMessage().getInvalidPartitionException().getMessage(), e);
+            throw new 
PartitionValidationException(e.getFaultMessage().getInvalidPartitionException().getMessage(),
 e);
+        }
+
+    }
+
+    public synchronized MemberContext spawnAnInstance(Partition partition,
+                                                      String clusterId, String 
lbClusterId, String networkPartitionId, boolean isPrimary, int minMemberCount) 
throws SpawningException {
+        try {
+            if (log.isInfoEnabled()) {
+                log.info(String.format("Trying to spawn an instance via cloud 
controller: [cluster] %s [partition] %s [lb-cluster] %s [network-partition-id] 
%s",
+                        clusterId, partition.getId(), lbClusterId, 
networkPartitionId));
+            }
+
+            MemberContext member = new MemberContext();
+            member.setClusterId(clusterId);
+            member.setPartition(partition);
+            member.setLbClusterId(lbClusterId);
+            member.setInitTime(System.currentTimeMillis());
+            member.setNetworkPartitionId(networkPartitionId);
+            Properties memberContextProps = new Properties();
+            Property isPrimaryProp = new Property();
+            isPrimaryProp.setName("PRIMARY");
+            isPrimaryProp.setValue(String.valueOf(isPrimary));
+
+            Property minCountProp = new Property();
+            minCountProp.setName("MIN_COUNT");
+            minCountProp.setValue(String.valueOf(minMemberCount));
+
+            memberContextProps.addProperties(isPrimaryProp);
+            memberContextProps.addProperties(minCountProp);
+            member.setProperties(memberContextProps);
+
+
+            long startTime = System.currentTimeMillis();
+            MemberContext memberContext = stub.startInstance(member);
+            if (log.isDebugEnabled()) {
+                long endTime = System.currentTimeMillis();
+                log.debug(String.format("Service call startInstance() returned 
in %dms", (endTime - startTime)));
+            }
+            return memberContext;
+        } catch (CloudControllerServiceUnregisteredCartridgeExceptionException 
e) {
+            String message = 
e.getFaultMessage().getUnregisteredCartridgeException().getMessage();
+            log.error(message, e);
+            throw new SpawningException(message, e);
+        } catch (RemoteException e) {
+            log.error(e.getMessage(), e);
+            throw new SpawningException(e.getMessage(), e);
+        } catch (CloudControllerServiceInvalidIaasProviderExceptionException 
e) {
+            String message = 
e.getFaultMessage().getInvalidIaasProviderException().getMessage();
+            log.error(message, e);
+            throw new SpawningException(message, e);
+        }
+    }
+
+    public synchronized void terminateAllInstances(String clusterId) throws 
TerminationException {
+        try {
+            if (log.isInfoEnabled()) {
+                log.info(String.format("Terminating all instances of cluster 
via cloud controller: [cluster] %s", clusterId));
+            }
+            long startTime = System.currentTimeMillis();
+            stub.terminateAllInstances(clusterId);
+            if (log.isDebugEnabled()) {
+                long endTime = System.currentTimeMillis();
+                log.debug(String.format("Service call terminateAllInstances() 
returned in %dms", (endTime - startTime)));
+            }
+        } catch (RemoteException e) {
+            String msg = e.getMessage();
+            log.error(msg, e);
+            throw new TerminationException(msg, e);
+
+        } catch (CloudControllerServiceInvalidClusterExceptionException e) {
+            String message = 
e.getFaultMessage().getInvalidClusterException().getMessage();
+            log.error(message, e);
+            throw new TerminationException(message, e);
+        }
+    }
+
+    public synchronized void createApplicationClusters(String appId,
+                                                       
Set<ApplicationClusterContext> appClusterContexts) {
+        List<ApplicationClusterContextDTO> contextDTOs =
+                                        new 
ArrayList<ApplicationClusterContextDTO>();
+        for(ApplicationClusterContext context : appClusterContexts) {
+           ApplicationClusterContextDTO dto = new 
ApplicationClusterContextDTO();
+            dto.setClusterId(context.getClusterId());
+            dto.setAutoscalePolicyName(context.getAutoscalePolicyName());
+            dto.setDeploymentPolicyName(context.getDeploymentPolicyName());
+            dto.setCartridgeType(context.getCartridgeType());
+            dto.setHostName(context.getHostName());
+            dto.setTenantRange(context.getTenantRange());
+            dto.setTextPayload(context.getTextPayload());
+            dto.setLbCluster(context.isLbCluster());
+            contextDTOs.add(dto);
+        }
+
+        ApplicationClusterContextDTO[] applicationClusterContextDTOs =
+                new ApplicationClusterContextDTO[contextDTOs.size()];
+        contextDTOs.toArray(applicationClusterContextDTOs);
+        try {
+            stub.createApplicationClusters(appId, 
applicationClusterContextDTOs);
+        } catch (RemoteException e) {
+            String msg = e.getMessage();
+            log.error(msg, e);
+            //throw new TerminationException(msg, e);
+        } catch 
(CloudControllerServiceApplicationClusterRegistrationExceptionException e) {
+            //e.printStackTrace();
+            String msg = e.getMessage();
+            log.error(msg, e);
+        }
+
+
+    }
+
+    public synchronized void terminate(String memberId) throws 
TerminationException {
+        try {
+            if (log.isInfoEnabled()) {
+                log.info(String.format("Terminating instance via cloud 
controller: [member] %s", memberId));
+            }
+            long startTime = System.currentTimeMillis();
+            stub.terminateInstance(memberId);
+            if (log.isDebugEnabled()) {
+                long endTime = System.currentTimeMillis();
+                log.debug(String.format("Service call terminateInstance() 
returned in %dms", (endTime - startTime)));
+            }
+        } catch (RemoteException e) {
+            String msg = e.getMessage();
+            log.error(msg, e);
+            throw new TerminationException(msg, e);
+        } catch (CloudControllerServiceInvalidMemberExceptionException e) {
+            String msg = 
e.getFaultMessage().getInvalidMemberException().getMessage();
+            log.error(msg, e);
+            throw new TerminationException(msg, e);
+        } catch (CloudControllerServiceInvalidCartridgeTypeExceptionException 
e) {
+            String msg = 
e.getFaultMessage().getInvalidCartridgeTypeException().getMessage();
+            log.error(msg, e);
+            throw new TerminationException(msg, e);
+        }
+    }
+
+    public CartridgeInfo getCartrdgeInformation(String cartridgeType) throws 
CartridgeInformationException {
+
+        try {
+            return stub.getCartridgeInfo(cartridgeType);
+
+        } catch (RemoteException e) {
+            String msg = e.getMessage();
+            log.error(msg, e);
+            throw new CartridgeInformationException(msg, e);
+        } catch (CloudControllerServiceUnregisteredCartridgeExceptionException 
e) {
+            String msg = e.getMessage();
+            log.error(msg, e);
+            throw new CartridgeInformationException(msg, e);
+        }
+    }
+
+    /**
+     * @param kubernetesClusterId
+     * @param clusterId
+     * @return
+     * @throws SpawningException
+     */
+    public synchronized MemberContext[] startContainers(String 
kubernetesClusterId, String clusterId) throws SpawningException {
+        try {
+
+            KubernetesManager kubernetesManager = 
KubernetesManager.getInstance();
+            KubernetesMaster kubernetesMaster = 
kubernetesManager.getKubernetesMasterInGroup(kubernetesClusterId);
+            String kubernetesMasterIP = kubernetesMaster.getHostIpAddress();
+            KubernetesGroup kubernetesGroup = 
kubernetesManager.getKubernetesGroup(kubernetesClusterId);
+            int lower = kubernetesGroup.getPortRange().getLower();
+            int upper = kubernetesGroup.getPortRange().getUpper();
+            String portRange = Integer.toString(lower) + "-" + 
Integer.toString(upper);
+
+            ContainerClusterContext context = new ContainerClusterContext();
+            context.setClusterId(clusterId);
+            Properties memberContextProps = new Properties();
+            Property kubernetesClusterMasterIPProps = new Property();
+            
kubernetesClusterMasterIPProps.setName(StratosConstants.KUBERNETES_MASTER_IP);
+            kubernetesClusterMasterIPProps.setValue(kubernetesMasterIP);
+            memberContextProps.addProperties(kubernetesClusterMasterIPProps);
+            Property kubernetesClusterPortRangeProps = new Property();
+            
kubernetesClusterPortRangeProps.setName(StratosConstants.KUBERNETES_PORT_RANGE);
+            kubernetesClusterPortRangeProps.setValue(portRange);
+            memberContextProps.addProperties(kubernetesClusterPortRangeProps);
+            context.setProperties(memberContextProps);
+            long startTime = System.currentTimeMillis();
+            MemberContext[] memberContexts = stub.startContainers(context);
+
+            if (log.isDebugEnabled()) {
+                long endTime = System.currentTimeMillis();
+                log.debug(String.format("Service call startContainer() 
returned in %dms", (endTime - startTime)));
+            }
+            return memberContexts;
+        } catch (CloudControllerServiceUnregisteredCartridgeExceptionException 
e) {
+            String message = 
e.getFaultMessage().getUnregisteredCartridgeException().getMessage();
+            log.error(message, e);
+            throw new SpawningException(message, e);
+        } catch (RemoteException e) {
+            log.error(e.getMessage(), e);
+            throw new SpawningException(e.getMessage(), e);
+        } catch (NonExistingKubernetesGroupException e) {
+            log.error(e.getMessage(), e);
+            throw new SpawningException(e.getMessage(), e);
+        }
+    }
+
+    public synchronized void terminateAllContainers(String clusterId) throws 
TerminationException {
+        try {
+            if (log.isInfoEnabled()) {
+                log.info(String.format("Terminating containers via cloud 
controller: [cluster] %s", clusterId));
+            }
+            long startTime = System.currentTimeMillis();
+            stub.terminateAllContainers(clusterId);
+            if (log.isDebugEnabled()) {
+                long endTime = System.currentTimeMillis();
+                log.debug(String.format("Service call terminateContainer() 
returned in %dms", (endTime - startTime)));
+            }
+        } catch (RemoteException e) {
+            String msg = e.getMessage();
+            log.error(msg, e);
+            throw new TerminationException(msg, e);
+        } catch (CloudControllerServiceInvalidClusterExceptionException e) {
+            String msg = 
e.getFaultMessage().getInvalidClusterException().getMessage();
+            log.error(msg, e);
+            throw new TerminationException(msg, e);
+        }
+    }
+
+    public synchronized MemberContext[] updateContainers(String clusterId, int 
replicas)
+            throws SpawningException {
+        try {
+            log.info(String.format("Updating kubernetes replication controller 
via cloud controller: " +
+                    "[cluster] %s [replicas] %s", clusterId, replicas));
+            MemberContext[] memberContexts = stub.updateContainers(clusterId, 
replicas);
+            return memberContexts;
+        } catch (CloudControllerServiceUnregisteredCartridgeExceptionException 
e) {
+            String msg = "Error while updating kubernetes controller, 
cartridge not found for [cluster] " + clusterId;
+            log.error(msg, e);
+            throw new SpawningException(msg, e);
+        } catch (RemoteException e) {
+            String msg = "Error while updating kubernetes controller, cannot 
communicate with " +
+                    "cloud controller service";
+            log.error(msg, e);
+            throw new SpawningException(msg, e);
+        }
+    }
+
+    public synchronized void terminateContainer(String memberId) throws 
TerminationException {
+        try {
+            stub.terminateContainer(memberId);
+        } catch (RemoteException e) {
+            String msg = "Error while updating kubernetes controller, cannot 
communicate with " +
+                    "cloud controller service";
+            log.error(msg, e);
+            throw new TerminationException(msg, e);
+        } catch 
(CloudControllerServiceMemberTerminationFailedExceptionException e) {
+            String msg = "Error while terminating container, member not valid 
for member id : " + memberId;
+            log.error(msg, e);
+            throw new TerminationException(msg, e);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/6805c113/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/InstanceNotificationClient.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/InstanceNotificationClient.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/InstanceNotificationClient.java
new file mode 100644
index 0000000..1af5599
--- /dev/null
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/InstanceNotificationClient.java
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  TcSee the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.stratos.autoscaler.client;
+
+import org.apache.axis2.transport.http.HTTPConstants;
+import org.apache.commons.configuration.XMLConfiguration;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.autoscaler.Constants;
+import org.apache.stratos.autoscaler.util.ConfUtil;
+import org.apache.stratos.manager.cleanup.notification.stub.*;
+
+import java.rmi.RemoteException;
+
+public class InstanceNotificationClient {
+    private static final Log log = 
LogFactory.getLog(InstanceNotificationClient.class);
+    private static InstanceCleanupNotificationServiceStub stub;
+
+    /* An instance of a InstanceNotificationClient is created when the class 
is loaded.
+     * Since the class is loaded only once, it is guaranteed that an object of
+     * InstanceNotificationClient is created only once. Hence it is singleton.
+     */
+    private static class InstanceHolder {
+        private static final InstanceNotificationClient INSTANCE = new 
InstanceNotificationClient();
+    }
+
+    public static InstanceNotificationClient getInstance() {
+       return InstanceHolder.INSTANCE;
+    }
+
+    private InstanceNotificationClient(){
+       try {
+            XMLConfiguration conf = 
ConfUtil.getInstance(null).getConfiguration();
+            int port = 
conf.getInt(Constants.STRATOS_MANAGER_DEFAULT_PORT_ELEMENT,
+                    Constants.STRATOS_MANAGER_DEFAULT_PORT);
+            String hostname = 
conf.getString(Constants.STRATOS_MANAGER_HOSTNAME_ELEMENT, "localhost");
+            String epr = "https://"; + hostname + ":" + port + "/" + 
Constants.STRATOS_MANAGER_SERVICE_SFX;
+            int instanceNotificationTimeOut = 
conf.getInt(Constants.STRATOS_MANAGER_CLIENT_TIMEOUT_ELEMENT, 180000);
+            stub = new InstanceCleanupNotificationServiceStub(epr);
+            
stub._getServiceClient().getOptions().setProperty(HTTPConstants.SO_TIMEOUT, 
instanceNotificationTimeOut);
+            
stub._getServiceClient().getOptions().setProperty(HTTPConstants.CONNECTION_TIMEOUT,
 instanceNotificationTimeOut);
+               } catch (Exception e) {
+                       log.error("Stub init error", e);
+               }
+    }
+
+    public void sendMemberCleanupEvent(String memberId) {
+        try {
+            stub.sendInstanceCleanupNotificationForMember(memberId);
+        } catch (RemoteException e)  {
+            log.error("error while sending the cleanup notification event to 
SM", e);
+        }
+
+    }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/6805c113/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
deleted file mode 100644
index eb3a1d9..0000000
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
+++ /dev/null
@@ -1,390 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one 
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
- * KIND, either express or implied.  TcSee the License for the 
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.stratos.autoscaler.client.cloud.controller;
-
-import org.apache.axis2.transport.http.HTTPConstants;
-import org.apache.commons.configuration.XMLConfiguration;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.autoscaler.Constants;
-import 
org.apache.stratos.autoscaler.applications.pojo.ApplicationClusterContext;
-import org.apache.stratos.autoscaler.policy.model.DeploymentPolicy;
-import org.apache.stratos.autoscaler.exception.*;
-import org.apache.stratos.autoscaler.kubernetes.KubernetesManager;
-import org.apache.stratos.autoscaler.util.ConfUtil;
-import org.apache.stratos.cloud.controller.stub.*;
-import org.apache.stratos.cloud.controller.stub.deployment.partition.Partition;
-import org.apache.stratos.cloud.controller.stub.pojo.*;
-import org.apache.stratos.common.constants.StratosConstants;
-import org.apache.stratos.common.kubernetes.KubernetesGroup;
-import org.apache.stratos.common.kubernetes.KubernetesMaster;
-import org.apache.stratos.cloud.controller.stub.pojo.Properties;
-import org.apache.stratos.cloud.controller.stub.pojo.Property;
-
-import java.rmi.RemoteException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-
-/**
- * This class will call cloud controller web service to take the action 
decided by Autoscaler
- */
-public class CloudControllerClient {
-
-    private static final Log log = 
LogFactory.getLog(CloudControllerClient.class);
-    private static CloudControllerServiceStub stub;
-
-    /* An instance of a CloudControllerClient is created when the class is 
loaded. 
-     * Since the class is loaded only once, it is guaranteed that an object of 
-     * CloudControllerClient is created only once. Hence it is singleton.
-     */
-    private static class InstanceHolder {
-        private static final CloudControllerClient INSTANCE = new 
CloudControllerClient();
-    }
-
-    public static CloudControllerClient getInstance() {
-        return InstanceHolder.INSTANCE;
-    }
-
-    private CloudControllerClient() {
-        try {
-            XMLConfiguration conf = 
ConfUtil.getInstance(null).getConfiguration();
-            int port = conf.getInt("autoscaler.cloudController.port", 
Constants.CLOUD_CONTROLLER_DEFAULT_PORT);
-            String hostname = 
conf.getString("autoscaler.cloudController.hostname", "localhost");
-            String epr = "https://"; + hostname + ":" + port + "/" + 
Constants.CLOUD_CONTROLLER_SERVICE_SFX;
-            int cloudControllerClientTimeout = 
conf.getInt("autoscaler.cloudController.clientTimeout", 180000);
-            stub = new CloudControllerServiceStub(epr);
-            
stub._getServiceClient().getOptions().setProperty(HTTPConstants.SO_TIMEOUT, 
cloudControllerClientTimeout);
-            
stub._getServiceClient().getOptions().setProperty(HTTPConstants.CONNECTION_TIMEOUT,
 cloudControllerClientTimeout);
-        } catch (Exception e) {
-            log.error("Stub init error", e);
-        }
-    }
-    
-    /*
-     * This will validate the given partitions against the given cartridge 
type.
-     */
-
-    public synchronized boolean validateDeploymentPolicy(String cartridgeType, 
DeploymentPolicy deploymentPolicy) throws PartitionValidationException {
-        try {
-            if (log.isInfoEnabled()) {
-                log.info(String.format("Validating partitions of policy via 
cloud controller: [id] %s", deploymentPolicy.getId()));
-            }
-            long startTime = System.currentTimeMillis();
-            boolean result = stub.validateDeploymentPolicy(cartridgeType, 
deploymentPolicy.getAllPartitions());
-            if (log.isDebugEnabled()) {
-                long endTime = System.currentTimeMillis();
-                log.debug(String.format("Service call 
validateDeploymentPolicy() returned in %dms", (endTime - startTime)));
-            }
-            return result;
-        } catch (RemoteException e) {
-            log.error(e.getMessage(), e);
-            throw new PartitionValidationException(e.getMessage(), e);
-        } catch (CloudControllerServiceInvalidPartitionExceptionException e) {
-            
log.error(e.getFaultMessage().getInvalidPartitionException().getMessage(), e);
-            throw new 
PartitionValidationException(e.getFaultMessage().getInvalidPartitionException().getMessage());
-        } catch (CloudControllerServiceInvalidCartridgeTypeExceptionException 
e) {
-            
log.error(e.getFaultMessage().getInvalidCartridgeTypeException().getMessage(), 
e);
-            throw new 
PartitionValidationException(e.getFaultMessage().getInvalidCartridgeTypeException().getMessage());
-        }
-
-    }
-
-    /*
-     * Calls the CC to validate the partition.
-     */
-    public synchronized boolean validatePartition(Partition partition) throws 
PartitionValidationException {
-
-        try {
-            if (log.isInfoEnabled()) {
-                log.info(String.format("Validating partition via cloud 
controller: [id] %s", partition.getId()));
-            }
-            long startTime = System.currentTimeMillis();
-            boolean result = stub.validatePartition(partition);
-            if (log.isDebugEnabled()) {
-                long endTime = System.currentTimeMillis();
-                log.debug(String.format("Service call validatePartition() 
returned in %dms", (endTime - startTime)));
-            }
-            return result;
-        } catch (RemoteException e) {
-            log.error(e.getMessage(), e);
-            throw new PartitionValidationException(e.getMessage(), e);
-        } catch (CloudControllerServiceInvalidPartitionExceptionException e) {
-            
log.error(e.getFaultMessage().getInvalidPartitionException().getMessage(), e);
-            throw new 
PartitionValidationException(e.getFaultMessage().getInvalidPartitionException().getMessage(),
 e);
-        }
-
-    }
-
-    public synchronized MemberContext spawnAnInstance(Partition partition,
-                                                      String clusterId, String 
lbClusterId, String networkPartitionId, boolean isPrimary, int minMemberCount) 
throws SpawningException {
-        try {
-            if (log.isInfoEnabled()) {
-                log.info(String.format("Trying to spawn an instance via cloud 
controller: [cluster] %s [partition] %s [lb-cluster] %s [network-partition-id] 
%s",
-                        clusterId, partition.getId(), lbClusterId, 
networkPartitionId));
-            }
-
-            MemberContext member = new MemberContext();
-            member.setClusterId(clusterId);
-            member.setPartition(partition);
-            member.setLbClusterId(lbClusterId);
-            member.setInitTime(System.currentTimeMillis());
-            member.setNetworkPartitionId(networkPartitionId);
-            Properties memberContextProps = new Properties();
-            Property isPrimaryProp = new Property();
-            isPrimaryProp.setName("PRIMARY");
-            isPrimaryProp.setValue(String.valueOf(isPrimary));
-
-            Property minCountProp = new Property();
-            minCountProp.setName("MIN_COUNT");
-            minCountProp.setValue(String.valueOf(minMemberCount));
-
-            memberContextProps.addProperties(isPrimaryProp);
-            memberContextProps.addProperties(minCountProp);
-            member.setProperties(memberContextProps);
-
-
-            long startTime = System.currentTimeMillis();
-            MemberContext memberContext = stub.startInstance(member);
-            if (log.isDebugEnabled()) {
-                long endTime = System.currentTimeMillis();
-                log.debug(String.format("Service call startInstance() returned 
in %dms", (endTime - startTime)));
-            }
-            return memberContext;
-        } catch (CloudControllerServiceUnregisteredCartridgeExceptionException 
e) {
-            String message = 
e.getFaultMessage().getUnregisteredCartridgeException().getMessage();
-            log.error(message, e);
-            throw new SpawningException(message, e);
-        } catch (RemoteException e) {
-            log.error(e.getMessage(), e);
-            throw new SpawningException(e.getMessage(), e);
-        } catch (CloudControllerServiceInvalidIaasProviderExceptionException 
e) {
-            String message = 
e.getFaultMessage().getInvalidIaasProviderException().getMessage();
-            log.error(message, e);
-            throw new SpawningException(message, e);
-        }
-    }
-
-    public synchronized void terminateAllInstances(String clusterId) throws 
TerminationException {
-        try {
-            if (log.isInfoEnabled()) {
-                log.info(String.format("Terminating all instances of cluster 
via cloud controller: [cluster] %s", clusterId));
-            }
-            long startTime = System.currentTimeMillis();
-            stub.terminateAllInstances(clusterId);
-            if (log.isDebugEnabled()) {
-                long endTime = System.currentTimeMillis();
-                log.debug(String.format("Service call terminateAllInstances() 
returned in %dms", (endTime - startTime)));
-            }
-        } catch (RemoteException e) {
-            String msg = e.getMessage();
-            log.error(msg, e);
-            throw new TerminationException(msg, e);
-
-        } catch (CloudControllerServiceInvalidClusterExceptionException e) {
-            String message = 
e.getFaultMessage().getInvalidClusterException().getMessage();
-            log.error(message, e);
-            throw new TerminationException(message, e);
-        }
-    }
-
-    public synchronized void createApplicationClusters(String appId,
-                                                       
Set<ApplicationClusterContext> appClusterContexts) {
-        List<ApplicationClusterContextDTO> contextDTOs =
-                                        new 
ArrayList<ApplicationClusterContextDTO>();
-        for(ApplicationClusterContext context : appClusterContexts) {
-           ApplicationClusterContextDTO dto = new 
ApplicationClusterContextDTO();
-            dto.setClusterId(context.getClusterId());
-            dto.setAutoscalePolicyName(context.getAutoscalePolicyName());
-            dto.setDeploymentPolicyName(context.getDeploymentPolicyName());
-            dto.setCartridgeType(context.getCartridgeType());
-            dto.setHostName(context.getHostName());
-            dto.setTenantRange(context.getTenantRange());
-            dto.setTextPayload(context.getTextPayload());
-            dto.setLbCluster(context.isLbCluster());
-            contextDTOs.add(dto);
-        }
-
-        ApplicationClusterContextDTO[] applicationClusterContextDTOs =
-                new ApplicationClusterContextDTO[contextDTOs.size()];
-        contextDTOs.toArray(applicationClusterContextDTOs);
-        try {
-            stub.createApplicationClusters(appId, 
applicationClusterContextDTOs);
-        } catch (RemoteException e) {
-            String msg = e.getMessage();
-            log.error(msg, e);
-            //throw new TerminationException(msg, e);
-        } catch 
(CloudControllerServiceApplicationClusterRegistrationExceptionException e) {
-            //e.printStackTrace();
-            String msg = e.getMessage();
-            log.error(msg, e);
-        }
-
-
-    }
-
-    public synchronized void terminate(String memberId) throws 
TerminationException {
-        try {
-            if (log.isInfoEnabled()) {
-                log.info(String.format("Terminating instance via cloud 
controller: [member] %s", memberId));
-            }
-            long startTime = System.currentTimeMillis();
-            stub.terminateInstance(memberId);
-            if (log.isDebugEnabled()) {
-                long endTime = System.currentTimeMillis();
-                log.debug(String.format("Service call terminateInstance() 
returned in %dms", (endTime - startTime)));
-            }
-        } catch (RemoteException e) {
-            String msg = e.getMessage();
-            log.error(msg, e);
-            throw new TerminationException(msg, e);
-        } catch (CloudControllerServiceInvalidMemberExceptionException e) {
-            String msg = 
e.getFaultMessage().getInvalidMemberException().getMessage();
-            log.error(msg, e);
-            throw new TerminationException(msg, e);
-        } catch (CloudControllerServiceInvalidCartridgeTypeExceptionException 
e) {
-            String msg = 
e.getFaultMessage().getInvalidCartridgeTypeException().getMessage();
-            log.error(msg, e);
-            throw new TerminationException(msg, e);
-        }
-    }
-
-    public CartridgeInfo getCartrdgeInformation(String cartridgeType) throws 
CartridgeInformationException {
-
-        try {
-            return stub.getCartridgeInfo(cartridgeType);
-
-        } catch (RemoteException e) {
-            String msg = e.getMessage();
-            log.error(msg, e);
-            throw new CartridgeInformationException(msg, e);
-        } catch (CloudControllerServiceUnregisteredCartridgeExceptionException 
e) {
-            String msg = e.getMessage();
-            log.error(msg, e);
-            throw new CartridgeInformationException(msg, e);
-        }
-    }
-
-    /**
-     * @param kubernetesClusterId
-     * @param clusterId
-     * @return
-     * @throws SpawningException
-     */
-    public synchronized MemberContext[] startContainers(String 
kubernetesClusterId, String clusterId) throws SpawningException {
-        try {
-
-            KubernetesManager kubernetesManager = 
KubernetesManager.getInstance();
-            KubernetesMaster kubernetesMaster = 
kubernetesManager.getKubernetesMasterInGroup(kubernetesClusterId);
-            String kubernetesMasterIP = kubernetesMaster.getHostIpAddress();
-            KubernetesGroup kubernetesGroup = 
kubernetesManager.getKubernetesGroup(kubernetesClusterId);
-            int lower = kubernetesGroup.getPortRange().getLower();
-            int upper = kubernetesGroup.getPortRange().getUpper();
-            String portRange = Integer.toString(lower) + "-" + 
Integer.toString(upper);
-
-            ContainerClusterContext context = new ContainerClusterContext();
-            context.setClusterId(clusterId);
-            Properties memberContextProps = new Properties();
-            Property kubernetesClusterMasterIPProps = new Property();
-            
kubernetesClusterMasterIPProps.setName(StratosConstants.KUBERNETES_MASTER_IP);
-            kubernetesClusterMasterIPProps.setValue(kubernetesMasterIP);
-            memberContextProps.addProperties(kubernetesClusterMasterIPProps);
-            Property kubernetesClusterPortRangeProps = new Property();
-            
kubernetesClusterPortRangeProps.setName(StratosConstants.KUBERNETES_PORT_RANGE);
-            kubernetesClusterPortRangeProps.setValue(portRange);
-            memberContextProps.addProperties(kubernetesClusterPortRangeProps);
-            context.setProperties(memberContextProps);
-            long startTime = System.currentTimeMillis();
-            MemberContext[] memberContexts = stub.startContainers(context);
-
-            if (log.isDebugEnabled()) {
-                long endTime = System.currentTimeMillis();
-                log.debug(String.format("Service call startContainer() 
returned in %dms", (endTime - startTime)));
-            }
-            return memberContexts;
-        } catch (CloudControllerServiceUnregisteredCartridgeExceptionException 
e) {
-            String message = 
e.getFaultMessage().getUnregisteredCartridgeException().getMessage();
-            log.error(message, e);
-            throw new SpawningException(message, e);
-        } catch (RemoteException e) {
-            log.error(e.getMessage(), e);
-            throw new SpawningException(e.getMessage(), e);
-        } catch (NonExistingKubernetesGroupException e) {
-            log.error(e.getMessage(), e);
-            throw new SpawningException(e.getMessage(), e);
-        }
-    }
-
-    public synchronized void terminateAllContainers(String clusterId) throws 
TerminationException {
-        try {
-            if (log.isInfoEnabled()) {
-                log.info(String.format("Terminating containers via cloud 
controller: [cluster] %s", clusterId));
-            }
-            long startTime = System.currentTimeMillis();
-            stub.terminateAllContainers(clusterId);
-            if (log.isDebugEnabled()) {
-                long endTime = System.currentTimeMillis();
-                log.debug(String.format("Service call terminateContainer() 
returned in %dms", (endTime - startTime)));
-            }
-        } catch (RemoteException e) {
-            String msg = e.getMessage();
-            log.error(msg, e);
-            throw new TerminationException(msg, e);
-        } catch (CloudControllerServiceInvalidClusterExceptionException e) {
-            String msg = 
e.getFaultMessage().getInvalidClusterException().getMessage();
-            log.error(msg, e);
-            throw new TerminationException(msg, e);
-        }
-    }
-
-    public synchronized MemberContext[] updateContainers(String clusterId, int 
replicas)
-            throws SpawningException {
-        try {
-            log.info(String.format("Updating kubernetes replication controller 
via cloud controller: " +
-                    "[cluster] %s [replicas] %s", clusterId, replicas));
-            MemberContext[] memberContexts = stub.updateContainers(clusterId, 
replicas);
-            return memberContexts;
-        } catch (CloudControllerServiceUnregisteredCartridgeExceptionException 
e) {
-            String msg = "Error while updating kubernetes controller, 
cartridge not found for [cluster] " + clusterId;
-            log.error(msg, e);
-            throw new SpawningException(msg, e);
-        } catch (RemoteException e) {
-            String msg = "Error while updating kubernetes controller, cannot 
communicate with " +
-                    "cloud controller service";
-            log.error(msg, e);
-            throw new SpawningException(msg, e);
-        }
-    }
-
-    public synchronized void terminateContainer(String memberId) throws 
TerminationException {
-        try {
-            stub.terminateContainer(memberId);
-        } catch (RemoteException e) {
-            String msg = "Error while updating kubernetes controller, cannot 
communicate with " +
-                    "cloud controller service";
-            log.error(msg, e);
-            throw new TerminationException(msg, e);
-        } catch 
(CloudControllerServiceMemberTerminationFailedExceptionException e) {
-            String msg = "Error while terminating container, member not valid 
for member id : " + memberId;
-            log.error(msg, e);
-            throw new TerminationException(msg, e);
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/stratos/blob/6805c113/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/InstanceNotificationClient.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/InstanceNotificationClient.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/InstanceNotificationClient.java
deleted file mode 100644
index 00d0431..0000000
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/InstanceNotificationClient.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  TcSee the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.stratos.autoscaler.client.cloud.controller;
-
-import org.apache.axis2.transport.http.HTTPConstants;
-import org.apache.commons.configuration.XMLConfiguration;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.autoscaler.Constants;
-import org.apache.stratos.autoscaler.util.ConfUtil;
-import org.apache.stratos.manager.cleanup.notification.stub.*;
-
-import java.rmi.RemoteException;
-
-public class InstanceNotificationClient {
-    private static final Log log = 
LogFactory.getLog(InstanceNotificationClient.class);
-    private static InstanceCleanupNotificationServiceStub stub;
-
-    /* An instance of a InstanceNotificationClient is created when the class 
is loaded.
-     * Since the class is loaded only once, it is guaranteed that an object of
-     * InstanceNotificationClient is created only once. Hence it is singleton.
-     */
-    private static class InstanceHolder {
-        private static final InstanceNotificationClient INSTANCE = new 
InstanceNotificationClient();
-    }
-
-    public static InstanceNotificationClient getInstance() {
-       return InstanceHolder.INSTANCE;
-    }
-
-    private InstanceNotificationClient(){
-       try {
-            XMLConfiguration conf = 
ConfUtil.getInstance(null).getConfiguration();
-            int port = 
conf.getInt(Constants.STRATOS_MANAGER_DEFAULT_PORT_ELEMENT,
-                    Constants.STRATOS_MANAGER_DEFAULT_PORT);
-            String hostname = 
conf.getString(Constants.STRATOS_MANAGER_HOSTNAME_ELEMENT, "localhost");
-            String epr = "https://"; + hostname + ":" + port + "/" + 
Constants.STRATOS_MANAGER_SERVICE_SFX;
-            int instanceNotificationTimeOut = 
conf.getInt(Constants.STRATOS_MANAGER_CLIENT_TIMEOUT_ELEMENT, 180000);
-            stub = new InstanceCleanupNotificationServiceStub(epr);
-            
stub._getServiceClient().getOptions().setProperty(HTTPConstants.SO_TIMEOUT, 
instanceNotificationTimeOut);
-            
stub._getServiceClient().getOptions().setProperty(HTTPConstants.CONNECTION_TIMEOUT,
 instanceNotificationTimeOut);
-               } catch (Exception e) {
-                       log.error("Stub init error", e);
-               }
-    }
-
-    public void sendMemberCleanupEvent(String memberId) {
-        try {
-            stub.sendInstanceCleanupNotificationForMember(memberId);
-        } catch (RemoteException e)  {
-            log.error("error while sending the cleanup notification event to 
SM", e);
-        }
-
-    }
-}

http://git-wip-us.apache.org/repos/asf/stratos/blob/6805c113/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitorFactory.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitorFactory.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitorFactory.java
index 3dd4027..977a9af 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitorFactory.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitorFactory.java
@@ -22,7 +22,7 @@ package org.apache.stratos.autoscaler.monitor.cluster;
 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.autoscaler.client.CloudControllerClient;
 import org.apache.stratos.autoscaler.exception.PartitionValidationException;
 import org.apache.stratos.autoscaler.exception.PolicyValidationException;
 import org.apache.stratos.autoscaler.partition.PartitionGroup;

http://git-wip-us.apache.org/repos/asf/stratos/blob/6805c113/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/KubernetesClusterMonitor.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/KubernetesClusterMonitor.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/KubernetesClusterMonitor.java
index 39fbd46..b42791c 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/KubernetesClusterMonitor.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/KubernetesClusterMonitor.java
@@ -22,7 +22,7 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.autoscaler.KubernetesClusterContext;
 import org.apache.stratos.autoscaler.MemberStatsContext;
-import 
org.apache.stratos.autoscaler.client.cloud.controller.CloudControllerClient;
+import org.apache.stratos.autoscaler.client.CloudControllerClient;
 import org.apache.stratos.autoscaler.exception.TerminationException;
 import org.apache.stratos.autoscaler.policy.PolicyManager;
 import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy;

http://git-wip-us.apache.org/repos/asf/stratos/blob/6805c113/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
index 03914fa..dd2895a 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
@@ -26,7 +26,7 @@ import org.apache.stratos.autoscaler.AutoscalerContext;
 import org.apache.stratos.autoscaler.MemberStatsContext;
 import org.apache.stratos.autoscaler.NetworkPartitionContext;
 import org.apache.stratos.autoscaler.PartitionContext;
-import 
org.apache.stratos.autoscaler.client.cloud.controller.CloudControllerClient;
+import org.apache.stratos.autoscaler.client.CloudControllerClient;
 import org.apache.stratos.autoscaler.policy.model.DeploymentPolicy;
 import org.apache.stratos.autoscaler.exception.InvalidArgumentException;
 import org.apache.stratos.autoscaler.exception.TerminationException;

http://git-wip-us.apache.org/repos/asf/stratos/blob/6805c113/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/PartitionManager.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/PartitionManager.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/PartitionManager.java
index 2d39ea0..adc4290 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/PartitionManager.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/PartitionManager.java
@@ -23,7 +23,7 @@ import org.apache.commons.lang.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.autoscaler.NetworkPartitionLbHolder;
-import 
org.apache.stratos.autoscaler.client.cloud.controller.CloudControllerClient;
+import org.apache.stratos.autoscaler.client.CloudControllerClient;
 import org.apache.stratos.autoscaler.policy.model.DeploymentPolicy;
 import org.apache.stratos.autoscaler.exception.AutoScalerException;
 import org.apache.stratos.autoscaler.exception.InvalidPartitionException;

http://git-wip-us.apache.org/repos/asf/stratos/blob/6805c113/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java
index 8ab5308..1fdffa4 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java
@@ -30,8 +30,8 @@ import org.apache.stratos.autoscaler.PartitionContext;
 import org.apache.stratos.autoscaler.algorithm.AutoscaleAlgorithm;
 import org.apache.stratos.autoscaler.algorithm.OneAfterAnother;
 import org.apache.stratos.autoscaler.algorithm.RoundRobin;
-import 
org.apache.stratos.autoscaler.client.cloud.controller.CloudControllerClient;
-import 
org.apache.stratos.autoscaler.client.cloud.controller.InstanceNotificationClient;
+import org.apache.stratos.autoscaler.client.CloudControllerClient;
+import org.apache.stratos.autoscaler.client.InstanceNotificationClient;
 import org.apache.stratos.autoscaler.exception.SpawningException;
 import org.apache.stratos.autoscaler.exception.TerminationException;
 import org.apache.stratos.autoscaler.partition.PartitionManager;

http://git-wip-us.apache.org/repos/asf/stratos/blob/6805c113/components/org.apache.stratos.autoscaler/src/test/resources/autoscaler-old.drl
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/test/resources/autoscaler-old.drl
 
b/components/org.apache.stratos.autoscaler/src/test/resources/autoscaler-old.drl
index cf9982f..2b0501d 100644
--- 
a/components/org.apache.stratos.autoscaler/src/test/resources/autoscaler-old.drl
+++ 
b/components/org.apache.stratos.autoscaler/src/test/resources/autoscaler-old.drl
@@ -31,7 +31,7 @@ import 
org.apache.stratos.messaging.domain.policy.PartitionGroup;
 import org.apache.stratos.messaging.domain.policy.DeploymentPolicy;
 import org.apache.stratos.autoscaler.policy.model.RequestsInFlight;
 import org.apache.stratos.autoscaler.policy.model.LoadThresholds;
-import 
org.apache.stratos.autoscaler.client.cloud.controller.CloudControllerClient;
+import org.apache.stratos.autoscaler.client.CloudControllerClient;
 import org.apache.stratos.autoscaler.algorithm.AutoscaleAlgorithm;
 import org.apache.stratos.autoscaler.algorithm.OneAfterAnother;
 import org.apache.stratos.autoscaler.algorithm.RoundRobin;

http://git-wip-us.apache.org/repos/asf/stratos/blob/6805c113/components/org.apache.stratos.autoscaler/src/test/resources/autoscaler.drl
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/test/resources/autoscaler.drl 
b/components/org.apache.stratos.autoscaler/src/test/resources/autoscaler.drl
index 8b200cb..a10eccb 100644
--- a/components/org.apache.stratos.autoscaler/src/test/resources/autoscaler.drl
+++ b/components/org.apache.stratos.autoscaler/src/test/resources/autoscaler.drl
@@ -28,7 +28,7 @@ import org.apache.stratos.autoscaler.policy.PolicyManager;
 import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy;
 import org.apache.stratos.autoscaler.policy.model.RequestsInFlight;
 import org.apache.stratos.autoscaler.policy.model.LoadThresholds;
-import 
org.apache.stratos.autoscaler.client.cloud.controller.CloudControllerClient;
+import org.apache.stratos.autoscaler.client.CloudControllerClient;
 import org.apache.stratos.autoscaler.algorithm.AutoscaleAlgorithm;
 import org.apache.stratos.autoscaler.algorithm.OneAfterAnother;
 import org.apache.stratos.autoscaler.algorithm.RoundRobin;

http://git-wip-us.apache.org/repos/asf/stratos/blob/6805c113/components/org.apache.stratos.autoscaler/src/test/resources/minimum-autoscaler-rule.drl
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/test/resources/minimum-autoscaler-rule.drl
 
b/components/org.apache.stratos.autoscaler/src/test/resources/minimum-autoscaler-rule.drl
index 69f1890..f17a3bd 100644
--- 
a/components/org.apache.stratos.autoscaler/src/test/resources/minimum-autoscaler-rule.drl
+++ 
b/components/org.apache.stratos.autoscaler/src/test/resources/minimum-autoscaler-rule.drl
@@ -31,7 +31,7 @@ import 
org.apache.stratos.messaging.domain.policy.PartitionGroup;
 import org.apache.stratos.messaging.domain.policy.DeploymentPolicy;
 import org.apache.stratos.autoscaler.policy.model.RequestsInFlight;
 import org.apache.stratos.autoscaler.policy.model.LoadThresholds;
-import 
org.apache.stratos.autoscaler.client.cloud.controller.CloudControllerClient;
+import org.apache.stratos.autoscaler.client.CloudControllerClient;
 import org.apache.stratos.autoscaler.algorithm.AutoscaleAlgorithm;
 import org.apache.stratos.autoscaler.algorithm.OneAfterAnother;
 import org.apache.stratos.autoscaler.algorithm.RoundRobin;

http://git-wip-us.apache.org/repos/asf/stratos/blob/6805c113/components/org.apache.stratos.autoscaler/src/test/resources/test-minimum-autoscaler-rule.drl
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/test/resources/test-minimum-autoscaler-rule.drl
 
b/components/org.apache.stratos.autoscaler/src/test/resources/test-minimum-autoscaler-rule.drl
index 0dda4d4..0bc5284 100644
--- 
a/components/org.apache.stratos.autoscaler/src/test/resources/test-minimum-autoscaler-rule.drl
+++ 
b/components/org.apache.stratos.autoscaler/src/test/resources/test-minimum-autoscaler-rule.drl
@@ -27,7 +27,7 @@ import org.apache.stratos.autoscaler.policy.PolicyManager;
 import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy;
 import org.apache.stratos.autoscaler.policy.model.RequestsInFlight;
 import org.apache.stratos.autoscaler.policy.model.LoadThresholds;
-import 
org.apache.stratos.autoscaler.client.cloud.controller.CloudControllerClient;
+import org.apache.stratos.autoscaler.client.CloudControllerClient;
 import org.apache.stratos.autoscaler.algorithm.AutoscaleAlgorithm;
 import org.apache.stratos.autoscaler.algorithm.OneAfterAnother;
 import org.apache.stratos.autoscaler.algorithm.RoundRobin;

http://git-wip-us.apache.org/repos/asf/stratos/blob/6805c113/components/org.apache.stratos.autoscaler/src/test/resources/test-terminating-obsoleted-members-rule.drl
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/test/resources/test-terminating-obsoleted-members-rule.drl
 
b/components/org.apache.stratos.autoscaler/src/test/resources/test-terminating-obsoleted-members-rule.drl
index 11d7428..5e6829a 100644
--- 
a/components/org.apache.stratos.autoscaler/src/test/resources/test-terminating-obsoleted-members-rule.drl
+++ 
b/components/org.apache.stratos.autoscaler/src/test/resources/test-terminating-obsoleted-members-rule.drl
@@ -27,7 +27,7 @@ import org.apache.stratos.autoscaler.policy.PolicyManager;
 import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy;
 import org.apache.stratos.autoscaler.policy.model.RequestsInFlight;
 import org.apache.stratos.autoscaler.policy.model.LoadThresholds;
-import 
org.apache.stratos.autoscaler.client.cloud.controller.CloudControllerClient;
+import org.apache.stratos.autoscaler.client.CloudControllerClient;
 import org.apache.stratos.autoscaler.algorithm.AutoscaleAlgorithm;
 import org.apache.stratos.autoscaler.algorithm.OneAfterAnother;
 import org.apache.stratos.autoscaler.algorithm.RoundRobin;

http://git-wip-us.apache.org/repos/asf/stratos/blob/6805c113/products/stratos/modules/distribution/src/main/conf/drools/mincheck.drl
----------------------------------------------------------------------
diff --git 
a/products/stratos/modules/distribution/src/main/conf/drools/mincheck.drl 
b/products/stratos/modules/distribution/src/main/conf/drools/mincheck.drl
index 96d7a09..bcb272b 100755
--- a/products/stratos/modules/distribution/src/main/conf/drools/mincheck.drl
+++ b/products/stratos/modules/distribution/src/main/conf/drools/mincheck.drl
@@ -27,7 +27,7 @@ import org.apache.stratos.autoscaler.policy.PolicyManager;
 import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy;
 import org.apache.stratos.autoscaler.policy.model.RequestsInFlight;
 import org.apache.stratos.autoscaler.policy.model.LoadThresholds;
-import 
org.apache.stratos.autoscaler.client.cloud.controller.CloudControllerClient;
+import org.apache.stratos.autoscaler.client.CloudControllerClient;
 import org.apache.stratos.autoscaler.algorithm.AutoscaleAlgorithm;
 import org.apache.stratos.autoscaler.algorithm.OneAfterAnother;
 import org.apache.stratos.autoscaler.algorithm.RoundRobin;

http://git-wip-us.apache.org/repos/asf/stratos/blob/6805c113/products/stratos/modules/distribution/src/main/conf/drools/obsoletecheck.drl
----------------------------------------------------------------------
diff --git 
a/products/stratos/modules/distribution/src/main/conf/drools/obsoletecheck.drl 
b/products/stratos/modules/distribution/src/main/conf/drools/obsoletecheck.drl
index 55f80cf..8b25258 100755
--- 
a/products/stratos/modules/distribution/src/main/conf/drools/obsoletecheck.drl
+++ 
b/products/stratos/modules/distribution/src/main/conf/drools/obsoletecheck.drl
@@ -27,7 +27,7 @@ import org.apache.stratos.autoscaler.policy.PolicyManager;
 import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy;
 import org.apache.stratos.autoscaler.policy.model.RequestsInFlight;
 import org.apache.stratos.autoscaler.policy.model.LoadThresholds;
-import 
org.apache.stratos.autoscaler.client.cloud.controller.CloudControllerClient;
+import org.apache.stratos.autoscaler.client.CloudControllerClient;
 import org.apache.stratos.autoscaler.algorithm.AutoscaleAlgorithm;
 import org.apache.stratos.autoscaler.algorithm.OneAfterAnother;
 import org.apache.stratos.autoscaler.algorithm.RoundRobin;

http://git-wip-us.apache.org/repos/asf/stratos/blob/6805c113/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl
----------------------------------------------------------------------
diff --git 
a/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl 
b/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl
index 1d1ba5d..7bb6c9a 100644
--- a/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl
+++ b/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl
@@ -32,7 +32,7 @@ import 
org.apache.stratos.autoscaler.policy.model.RequestsInFlight;
 import org.apache.stratos.autoscaler.policy.model.LoadThresholds;
 import org.apache.stratos.autoscaler.policy.model.MemoryConsumption;
 import org.apache.stratos.autoscaler.policy.model.LoadAverage;
-import 
org.apache.stratos.autoscaler.client.cloud.controller.CloudControllerClient;
+import org.apache.stratos.autoscaler.client.CloudControllerClient;
 import org.apache.stratos.autoscaler.algorithm.AutoscaleAlgorithm;
 import org.apache.stratos.autoscaler.algorithm.OneAfterAnother;
 import org.apache.stratos.autoscaler.algorithm.RoundRobin;

Reply via email to