You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by re...@apache.org on 2015/06/30 07:54:19 UTC

[1/5] stratos git commit: Removing networkpartition context as part of application instance termination

Repository: stratos
Updated Branches:
  refs/heads/master b7897af9c -> c8c60fbd0


Removing networkpartition context as part of application instance termination


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

Branch: refs/heads/master
Commit: c8c60fbd0f9ab5693fd8e2bebb3424f7d9fd4de0
Parents: ab5d447
Author: reka <rt...@gmail.com>
Authored: Tue Jun 30 11:23:23 2015 +0530
Committer: reka <rt...@gmail.com>
Committed: Tue Jun 30 11:23:49 2015 +0530

----------------------------------------------------------------------
 .../autoscaler/applications/topic/ApplicationBuilder.java   | 2 ++
 .../autoscaler/monitor/component/ApplicationMonitor.java    | 6 +++---
 .../monitor/component/ParentComponentMonitor.java           | 9 +++++++++
 3 files changed, 14 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/c8c60fbd/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 44a6786..36ada2d 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
@@ -285,6 +285,8 @@ public class ApplicationBuilder {
                         getNetworkPartitionContext(applicationInstance.
                                 getNetworkPartitionId());
                 networkPartitionContext.removeInstanceContext(instanceId);
+                applicationMonitor.removeNetworkPartitionContext(applicationInstance.
+                        getNetworkPartitionId());
                 applicationMonitor.removeInstance(instanceId);
                 application.removeInstance(instanceId);
                 ApplicationHolder.persistApplication(application);

http://git-wip-us.apache.org/repos/asf/stratos/blob/c8c60fbd/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java
index 87e035f..fddc960 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java
@@ -153,8 +153,8 @@ public class ApplicationMonitor extends ParentComponentMonitor {
                     //Checking for whether minimum application instances are there.
                     checkForMinimumApplicationInstances(application, defaultNetworkPartitions);
 
-                    //Checking for whether any application instances need to be terminated.
-                    checkForApplicationInstanceTermination(application, defaultNetworkPartitions);
+                    /*//Checking for whether any application instances need to be terminated.
+                    checkForApplicationInstanceTermination(application, defaultNetworkPartitions);*/
                 }
 
 
@@ -325,7 +325,7 @@ public class ApplicationMonitor extends ParentComponentMonitor {
             }
         }
         //Starting the dependencies
-        if(!instanceIds.isEmpty()) {
+        if(instanceIds.isEmpty()) {
             startDependency(application, instanceIds);
         }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/c8c60fbd/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java
index 717edc3..7e32022 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java
@@ -944,6 +944,15 @@ public abstract class ParentComponentMonitor extends Monitor {
     }
 
     /**
+     * This will give the network partitions used by this monitor
+     *
+     * @return network-partition-contexts
+     */
+    public void removeNetworkPartitionContext(String networkPartitionId) {
+        networkPartitionContextsMap.remove(networkPartitionId);
+    }
+
+    /**
      * Inner class used a Thread to start the relevant child monitor in a asynchronous manner
      */
     private class MonitorAdder implements Runnable {


[4/5] stratos git commit: Handling application policy upadte in application monitor

Posted by re...@apache.org.
Handling application policy upadte in application monitor


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

Branch: refs/heads/master
Commit: ab5d447087794d3a176116a3424ac0b6a5df09c5
Parents: d227bb4
Author: reka <rt...@gmail.com>
Authored: Mon Jun 29 15:55:03 2015 +0530
Committer: reka <rt...@gmail.com>
Committed: Tue Jun 30 11:23:49 2015 +0530

----------------------------------------------------------------------
 .../autoscaler/monitor/MonitorFactory.java      |  10 +-
 .../monitor/cluster/ClusterMonitor.java         |   4 +-
 .../monitor/component/ApplicationMonitor.java   | 114 ++++++++++++++++++-
 .../monitor/component/GroupMonitor.java         |   2 +-
 .../services/impl/AutoscalerServiceImpl.java    |   3 -
 5 files changed, 117 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/ab5d4470/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/MonitorFactory.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/MonitorFactory.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/MonitorFactory.java
index 0ceac21..ed00369 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/MonitorFactory.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/MonitorFactory.java
@@ -140,7 +140,6 @@ public class MonitorFactory {
             } else {
                 groupMonitor.setHasStartupDependents(false);
             }
-            groupMonitor.startScheduler();
         } finally {
             ApplicationHolder.releaseReadLock();
         }
@@ -155,9 +154,10 @@ public class MonitorFactory {
                 instanceIds.add(instance.getInstanceId());
             }
         }
-
         // Starting the minimum dependencies
         groupMonitor.createInstanceAndStartDependencyAtStartup(group, instanceIds);
+        //Starting the scheduler for the group monitor
+        groupMonitor.startScheduler();
 
         return groupMonitor;
 
@@ -188,13 +188,13 @@ public class MonitorFactory {
 
             applicationMonitor = new ApplicationMonitor(application);
             applicationMonitor.setHasStartupDependents(false);
-            // Starting the scheduler of the application monitor
-            applicationMonitor.startScheduler();
         } finally {
             ApplicationHolder.releaseReadLock();
         }
-
+        //Creating the immediate dependencies
         applicationMonitor.startMinimumDependencies(application);
+        // Starting the scheduler of the application monitor
+        applicationMonitor.startScheduler();
 
         return applicationMonitor;
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/ab5d4470/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java
index 309fe12..a92edde 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java
@@ -520,7 +520,9 @@ public class ClusterMonitor extends Monitor {
     @Override
     public void destroy() {
         //shutting down the scheduler
-        schedulerFuture.cancel(true);
+        if(schedulerFuture != null) {
+            schedulerFuture.cancel(true);
+        }
 
         if (log.isDebugEnabled()) {
             log.debug("ClusterMonitor task has been stopped " + this.toString());

http://git-wip-us.apache.org/repos/asf/stratos/blob/ab5d4470/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java
index df972f0..87e035f 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java
@@ -48,7 +48,7 @@ import org.apache.stratos.messaging.domain.application.Application;
 import org.apache.stratos.messaging.domain.application.ApplicationStatus;
 import org.apache.stratos.messaging.domain.application.GroupStatus;
 import org.apache.stratos.messaging.domain.instance.ApplicationInstance;
-import org.apache.stratos.messaging.domain.instance.ClusterInstance;
+import org.apache.stratos.messaging.domain.instance.Instance;
 import org.apache.stratos.messaging.domain.topology.ClusterStatus;
 import org.apache.stratos.messaging.domain.topology.lifecycle.LifeCycleState;
 
@@ -78,7 +78,7 @@ public class ApplicationMonitor extends ParentComponentMonitor {
             TopologyInConsistentException {
         super(application);
 
-        int threadPoolSize = Integer.getInteger(AutoscalerConstants.MONITOR_THREAD_POOL_ID, 100);
+        int threadPoolSize = Integer.getInteger(AutoscalerConstants.MONITOR_THREAD_POOL_SIZE, 100);
         this.executorService = StratosThreadPool.getExecutorService(
                 AutoscalerConstants.MONITOR_THREAD_POOL_ID, threadPoolSize);
 
@@ -146,6 +146,18 @@ public class ApplicationMonitor extends ParentComponentMonitor {
                                 new ConcurrentHashMap<String, ScalingUpBeyondMaxEvent>());
                     }
                 }
+
+                Application application = ApplicationHolder.getApplications().getApplication(appId);
+                if (application != null) {
+                    List<String> defaultNetworkPartitions = getDefaultNetworkPartitions(application);
+                    //Checking for whether minimum application instances are there.
+                    checkForMinimumApplicationInstances(application, defaultNetworkPartitions);
+
+                    //Checking for whether any application instances need to be terminated.
+                    checkForApplicationInstanceTermination(application, defaultNetworkPartitions);
+                }
+
+
             }
         };
         executorService.execute(monitoringRunnable);
@@ -250,6 +262,95 @@ public class ApplicationMonitor extends ParentComponentMonitor {
         }
     }
 
+    public List<String> getDefaultNetworkPartitions(Application application) {
+        //Minimum check, Need to get the network partition
+        NetworkPartitionAlgorithmContext algorithmContext = AutoscalerContext.getInstance().
+                getNetworkPartitionAlgorithmContext(appId);
+        ApplicationPolicy applicationPolicy = PolicyManager.getInstance().
+                getApplicationPolicy(application.getApplicationPolicyId());
+        List<String> defaultNetworkPartitions = new ArrayList<String>();
+
+        if (applicationPolicy != null) {
+            String networkPartitionAlgorithmName = applicationPolicy.getAlgorithm();
+            if (log.isDebugEnabled()) {
+                String msg = String.format("Network partition algorithm is %s [application-id] %s",
+                        networkPartitionAlgorithmName, appId);
+                log.debug(msg);
+            }
+
+            NetworkPartitionAlgorithm algorithm = getNetworkPartitionAlgorithm(
+                    networkPartitionAlgorithmName);
+            if (algorithm == null) {
+                String msg = String.format("Couldn't create network partition algorithm " +
+                        "[application-id] %s", appId);
+                log.error(msg);
+                throw new RuntimeException(msg);
+            }
+
+
+            // Check whether the network-partition of the application
+            // instance belongs to default set of network-partitions.
+            // If it is default set, then application instance cannot be terminated.
+            defaultNetworkPartitions = algorithm.
+                    getDefaultNetworkPartitions(algorithmContext);
+        }
+
+        return defaultNetworkPartitions;
+    }
+
+    private void checkForMinimumApplicationInstances(Application application,
+                                                     List<String> defaultNetworkPartitions) {
+        List<String> instanceIds = new ArrayList<String>();
+        for (String networkPartitionId : defaultNetworkPartitions) {
+            if (!networkPartitionContextsMap.containsKey(networkPartitionId)) {
+                String instanceId;
+                log.info("Detected a newly updated [network-partition] " + networkPartitionId +
+                        " for [application] " + appId + ". Hence new application instance " +
+                        "creation is going to start now!");
+                ParentLevelNetworkPartitionContext context =
+                        new ParentLevelNetworkPartitionContext(networkPartitionId);
+                //If application instances found in the ApplicationsTopology,
+                // then have to add them first before creating new one
+                ApplicationInstance appInstance = (ApplicationInstance) application.
+                        getInstanceByNetworkPartitionId(context.getId());
+                if (appInstance != null) {
+                    log.warn("The [application] " + appId + " already has the " +
+                            "[application-instance] " + appInstance.getInstanceId() + " for the " +
+                            "[network-partition] " + networkPartitionId);
+                    return;
+                }
+                instanceId = handleApplicationInstanceCreation(application, context, null);
+                instanceIds.add(instanceId);
+
+            }
+        }
+        //Starting the dependencies
+        if(!instanceIds.isEmpty()) {
+            startDependency(application, instanceIds);
+        }
+
+    }
+
+    private void checkForApplicationInstanceTermination(Application application,
+                                                        List<String> defaultNetworkPartitions) {
+
+        for (NetworkPartitionContext networkPartitionContext : networkPartitionContextsMap.values()) {
+            String nPartitionId = networkPartitionContext.getId();
+            if(!defaultNetworkPartitions.contains(nPartitionId)) {
+                log.info("The [application] " + appId + " runtime cannot be in [network-partition] "
+                        + nPartitionId + " as it is removed from the [application-policy]...!");
+                for(InstanceContext instanceContext:  networkPartitionContext.
+                        getInstanceIdToInstanceContextMap().values()) {
+                    //Handling application instance termination
+                    ApplicationBuilder.handleApplicationInstanceTerminatingEvent(this.appId,
+                            instanceContext.getId());
+                }
+
+            }
+        }
+
+    }
+
 
     /**
      * Find the group monitor by traversing recursively in the hierarchical monitors.
@@ -479,8 +580,8 @@ public class ApplicationMonitor extends ParentComponentMonitor {
             //Find whether any other instances exists in cluster
             // which has not been added to in-memory model in the restart
             Map<String, ApplicationInstance> instanceMap = application.getInstanceIdToInstanceContextMap();
-            for(ApplicationInstance instance : instanceMap.values()) {
-                if(!instanceIds.contains(instance.getInstanceId())) {
+            for (ApplicationInstance instance : instanceMap.values()) {
+                if (!instanceIds.contains(instance.getInstanceId())) {
                     ParentLevelNetworkPartitionContext context =
                             new ParentLevelNetworkPartitionContext(instance.getNetworkPartitionId());
                     //If application instances found in the ApplicationsTopology,
@@ -495,8 +596,9 @@ public class ApplicationMonitor extends ParentComponentMonitor {
                             " [appInstanceId] " + instance.getInstanceId());
                 }
             }
-
-            startDependency(application, instanceIds);
+            if(!instanceIds.isEmpty()) {
+                startDependency(application, instanceIds);
+            }
 
         } catch (Exception e) {
             log.error(String.format("Application instance creation failed [applcaition-id] %s", appId), e);

http://git-wip-us.apache.org/repos/asf/stratos/blob/ab5d4470/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
index 7ef8ce4..4f60af9 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
@@ -187,7 +187,7 @@ public class GroupMonitor extends ParentComponentMonitor {
                                         if (log.isDebugEnabled()) {
                                             log.debug("Creating a group instance of [application] "
                                                     + appId + " [group] " + id +
-                                                    " as the the minimum required instances not met");
+                                                    " as the the minimum required instances are not met");
 
                                         }
                                         createInstanceOnDemand(parentInstanceContext.getId());

http://git-wip-us.apache.org/repos/asf/stratos/blob/ab5d4470/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
index 963136f..6d40cf6 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
@@ -887,9 +887,6 @@ public class AutoscalerServiceImpl implements AutoscalerService {
         // validating application policy
         AutoscalerUtil.validateApplicationPolicy(applicationPolicy);
 
-        //Update application Monitor
-
-
         // updating application policy
         PolicyManager.getInstance().updateApplicationPolicy(applicationPolicy);
         return true;


[2/5] stratos git commit: fixing concurrent modification exception

Posted by re...@apache.org.
fixing concurrent modification exception


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

Branch: refs/heads/master
Commit: d227bb4e580252e883396b5737141cb7ebb6a488
Parents: 33aac2e
Author: reka <rt...@gmail.com>
Authored: Mon Jun 29 15:52:52 2015 +0530
Committer: reka <rt...@gmail.com>
Committed: Tue Jun 30 11:23:49 2015 +0530

----------------------------------------------------------------------
 .../org/apache/stratos/messaging/domain/topology/Cluster.java   | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/d227bb4e/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Cluster.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Cluster.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Cluster.java
index babf38c..b734499 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Cluster.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Cluster.java
@@ -28,6 +28,7 @@ import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 import java.io.Serializable;
 import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
 
 /**
  * Defines a cluster of a service.
@@ -89,9 +90,9 @@ public class Cluster implements Serializable {
         this.deploymentPolicyName = deploymentPolicyName;
         this.autoscalePolicyName = autoscalePolicyName;
         this.setHostNames(new ArrayList<String>());
-        this.memberMap = new HashMap<String, Member>();
+        this.memberMap = new ConcurrentHashMap<String, Member>();
         this.appId = appId;
-        this.setInstanceIdToInstanceContextMap(new HashMap<String, ClusterInstance>());
+        this.setInstanceIdToInstanceContextMap(new ConcurrentHashMap<String, ClusterInstance>());
         this.accessUrls = new ArrayList<String>();
         this.kubernetesServices = new ArrayList<KubernetesService>();
     }


[5/5] stratos git commit: fixing NPE when an application is not there

Posted by re...@apache.org.
fixing NPE when an application is not there


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

Branch: refs/heads/master
Commit: 33aac2e64409e58d19f0ce5e35a17fa083ff198b
Parents: 729ef7a
Author: reka <rt...@gmail.com>
Authored: Fri Jun 26 17:16:52 2015 +0530
Committer: reka <rt...@gmail.com>
Committed: Tue Jun 30 11:23:49 2015 +0530

----------------------------------------------------------------------
 .../rest/endpoint/api/StratosApiV41Utils.java   | 25 +++++++++++---------
 1 file changed, 14 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/33aac2e6/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
index ad4a208..3ce9554 100644
--- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
+++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
@@ -1910,18 +1910,21 @@ public class StratosApiV41Utils {
 
         try {
             ApplicationManager.acquireReadLockForApplication(applicationId);
-            Application application = ApplicationManager.getApplications().getApplication(applicationId);
-            if (application.getInstanceContextCount() > 0
-                    || (applicationContext != null &&
-                    applicationContext.getStatus().equals("Deployed"))) {
+            Application application = ApplicationManager.getApplications().
+                    getApplication(applicationId);
+            if(application != null) {
+                if (application.getInstanceContextCount() > 0
+                        || (applicationContext != null &&
+                        applicationContext.getStatus().equals("Deployed"))) {
 
-                if (application == null) {
-                    return null;
-                }
-                applicationBean = ObjectConverter.convertApplicationToApplicationInstanceBean(application);
-                for (ApplicationInstanceBean instanceBean : applicationBean.getApplicationInstances()) {
-                    addClustersInstancesToApplicationInstanceBean(instanceBean, application);
-                    addGroupsInstancesToApplicationInstanceBean(instanceBean, application);
+                    if (application == null) {
+                        return null;
+                    }
+                    applicationBean = ObjectConverter.convertApplicationToApplicationInstanceBean(application);
+                    for (ApplicationInstanceBean instanceBean : applicationBean.getApplicationInstances()) {
+                        addClustersInstancesToApplicationInstanceBean(instanceBean, application);
+                        addGroupsInstancesToApplicationInstanceBean(instanceBean, application);
+                    }
                 }
             }
         } finally {


[3/5] stratos git commit: writing test for autoscaling policy removal in autoscaler by abstracting out the methods

Posted by re...@apache.org.
writing test for autoscaling policy removal in autoscaler by abstracting out the methods


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

Branch: refs/heads/master
Commit: 729ef7abb623752137c05a4f5a0e38e57f6d55ca
Parents: b7897af
Author: reka <rt...@gmail.com>
Authored: Fri Jun 26 16:37:04 2015 +0530
Committer: reka <rt...@gmail.com>
Committed: Tue Jun 30 11:23:49 2015 +0530

----------------------------------------------------------------------
 .../applications/topic/ApplicationBuilder.java  |   3 +
 .../autoscaler/context/AutoscalerContext.java   |  19 +--
 .../internal/AutoscalerServiceComponent.java    |   4 +
 .../services/impl/AutoscalerServiceImpl.java    | 128 +++++--------------
 .../stratos/autoscaler/util/AutoscalerUtil.java |  82 +++++++++++-
 .../stratos/autoscaler/AutoscalerUtilTest.java  |  65 ++++++++++
 6 files changed, 187 insertions(+), 114 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/729ef7ab/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 1aafd00..44a6786 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
@@ -31,6 +31,7 @@ import org.apache.stratos.autoscaler.event.publisher.ClusterStatusEventPublisher
 import org.apache.stratos.autoscaler.monitor.Monitor;
 import org.apache.stratos.autoscaler.monitor.component.ApplicationMonitor;
 import org.apache.stratos.autoscaler.monitor.component.GroupMonitor;
+import org.apache.stratos.autoscaler.registry.RegistryManager;
 import org.apache.stratos.messaging.domain.application.*;
 import org.apache.stratos.messaging.domain.instance.ApplicationInstance;
 import org.apache.stratos.messaging.domain.instance.ClusterInstance;
@@ -246,6 +247,7 @@ public class ApplicationBuilder {
             }
 
             AutoscalerContext.getInstance().removeApplicationContext(appId);
+            RegistryManager.getInstance().removeApplicationContext(appId);
             ApplicationHolder.removeApplication(appId);
 
         } finally {
@@ -307,6 +309,7 @@ public class ApplicationBuilder {
                     // update application status in application context
                     applicationContext.setStatus(ApplicationContext.STATUS_CREATED);
                     AutoscalerContext.getInstance().updateApplicationContext(applicationContext);
+                    RegistryManager.getInstance().persistApplicationContext(applicationContext);
 
                     log.info("Application un-deployed successfully: [application-id] " + applicationId);
                 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/729ef7ab/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/AutoscalerContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/AutoscalerContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/AutoscalerContext.java
index 51e9d16..3a988e6 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/AutoscalerContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/AutoscalerContext.java
@@ -76,29 +76,16 @@ public class AutoscalerContext {
         // Initialize distributed object provider
         distributedObjectProvider = ServiceReferenceHolder.getInstance().getDistributedObjectProvider();
 
-        applicationContextMap = readApplicationContextsFromRegistry();
         if (applicationContextMap == null) {
             applicationContextMap = distributedObjectProvider.getMap(AS_APPLICATION_ID_TO_APPLICATION_CTX_MAP);//new ConcurrentHashMap<String, ApplicationContext>();
         }
         setClusterMonitors(distributedObjectProvider.getMap(AS_CLUSTER_ID_TO_CLUSTER_MONITOR_MAP));
         setApplicationMonitors(distributedObjectProvider.getMap(AS_APPLICATION_ID_TO_APPLICATION_MONITOR_MAP));
         pendingApplicationMonitors = distributedObjectProvider.getList(AS_PENDING_APPLICATION_MONITOR_LIST);//new ArrayList<String>();
-        applicationIdToNetworkPartitionAlgorithmContextMap = distributedObjectProvider.getMap(AS_APPLICATIOIN_ID_TO_NETWORK_PARTITION_ALGO_CTX_MAP);
+        applicationIdToNetworkPartitionAlgorithmContextMap =
+                distributedObjectProvider.getMap(AS_APPLICATIOIN_ID_TO_NETWORK_PARTITION_ALGO_CTX_MAP);
     }
 
-    private Map<String, ApplicationContext> readApplicationContextsFromRegistry() {
-        String[] resourcePaths = RegistryManager.getInstance().getApplicationContextResourcePaths();
-        if ((resourcePaths == null) || (resourcePaths.length == 0)) {
-            return null;
-        }
-
-        Map<String, ApplicationContext> applicationContextMap = distributedObjectProvider.getMap(AS_APPLICATION_ID_TO_APPLICATION_CTX_MAP);//new ConcurrentHashMap<String, ApplicationContext>();
-        for (String resourcePath : resourcePaths) {
-            ApplicationContext applicationContext = RegistryManager.getInstance().getApplicationContextByResourcePath(resourcePath);
-            applicationContextMap.put(applicationContext.getApplicationId(), applicationContext);
-        }
-        return applicationContextMap;
-    }
 
     public static AutoscalerContext getInstance() {
         if (instance == null) {
@@ -169,11 +156,9 @@ public class AutoscalerContext {
 
     public void addApplicationContext(ApplicationContext applicationContext) {
         applicationContextMap.put(applicationContext.getApplicationId(), applicationContext);
-        RegistryManager.getInstance().persistApplicationContext(applicationContext);
     }
 
     public ApplicationContext removeApplicationContext(String applicationId) {
-        RegistryManager.getInstance().removeApplicationContext(applicationId);
         return applicationContextMap.remove(applicationId);
     }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/729ef7ab/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServiceComponent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServiceComponent.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServiceComponent.java
index b5fd144..65d75b2 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServiceComponent.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServiceComponent.java
@@ -40,6 +40,7 @@ import org.apache.stratos.autoscaler.registry.RegistryManager;
 import org.apache.stratos.autoscaler.status.processor.cluster.ClusterStatusProcessorChain;
 import org.apache.stratos.autoscaler.status.processor.group.GroupStatusProcessorChain;
 import org.apache.stratos.autoscaler.util.AutoscalerConstants;
+import org.apache.stratos.autoscaler.util.AutoscalerUtil;
 import org.apache.stratos.autoscaler.util.ConfUtil;
 import org.apache.stratos.autoscaler.util.ServiceReferenceHolder;
 import org.apache.stratos.common.Component;
@@ -209,6 +210,9 @@ public class AutoscalerServiceComponent {
             AutoscalerContext.getInstance().addNetworkPartitionAlgorithmContext(algorithmContext);
         }
 
+        //Adding application context from registry
+        AutoscalerUtil.readApplicationContextsFromRegistry();
+
         //starting the processor chain
         ClusterStatusProcessorChain clusterStatusProcessorChain = new ClusterStatusProcessorChain();
         ServiceReferenceHolder.getInstance().setClusterStatusProcessorChain(clusterStatusProcessorChain);

http://git-wip-us.apache.org/repos/asf/stratos/blob/729ef7ab/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
index 3f2120c..963136f 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
@@ -110,7 +110,7 @@ public class AutoscalerServiceImpl implements AutoscalerService {
     @Override
     public boolean removeAutoScalingPolicy(String autoscalePolicyId) throws UnremovablePolicyException,
             PolicyDoesNotExistException {
-        if (removableAutoScalerPolicy(autoscalePolicyId)) {
+        if (AutoscalerUtil.removableAutoScalerPolicy(autoscalePolicyId)) {
             return PolicyManager.getInstance().removeAutoscalePolicy(autoscalePolicyId);
         } else {
             throw new UnremovablePolicyException("This autoscaler policy cannot be removed, " +
@@ -119,76 +119,6 @@ public class AutoscalerServiceImpl implements AutoscalerService {
         }
     }
 
-    /**
-     * Validate the Auto Scalar policy removal
-     *
-     * @param autoscalePolicyId Auto Scalar policy id boolean
-     * @return
-     */
-    private boolean removableAutoScalerPolicy(String autoscalePolicyId) {
-        Collection<ApplicationContext> applicationContexts = AutoscalerContext.getInstance().
-                getApplicationContexts();
-        for (ApplicationContext applicationContext : applicationContexts) {
-            if(applicationContext.getComponents().getCartridgeContexts() != null) {
-                for(CartridgeContext cartridgeContext : applicationContext.getComponents().
-                        getCartridgeContexts()) {
-                    if(autoscalePolicyId.equals(cartridgeContext.getSubscribableInfoContext().
-                            getAutoscalingPolicy())) {
-                        return false;
-                    }
-                }
-            }
-
-            if(applicationContext.getComponents().getGroupContexts() != null) {
-                return findAutoscalingPolicyInGroup(applicationContext.getComponents().getGroupContexts(),
-                        autoscalePolicyId);
-            }
-        }
-        return true;
-    }
-
-
-    private boolean findAutoscalingPolicyInGroup(GroupContext[] groupContexts,
-                                                 String autoscalePolicyId) {
-        for(GroupContext groupContext : groupContexts) {
-            if(groupContext.getCartridgeContexts() != null) {
-                for(CartridgeContext cartridgeContext : groupContext.getCartridgeContexts()) {
-                    if(autoscalePolicyId.equals(cartridgeContext.getSubscribableInfoContext().
-                            getAutoscalingPolicy())) {
-                        return false;
-                    }
-                }
-
-            }
-            if(groupContext.getGroupContexts() != null) {
-                return findAutoscalingPolicyInGroup(groupContext.getGroupContexts(),
-                        autoscalePolicyId);
-            }
-        }
-        return true;
-    }
-
-    /**
-     * Validate the deployment policy removal
-     *
-     * @param deploymentPolicyId
-     * @return
-     */
-    private boolean removableDeploymentPolicy(String deploymentPolicyId) {
-        boolean canRemove = true;
-        Map<String, Application> applications = ApplicationHolder.getApplications().getApplications();
-        for (Application application : applications.values()) {
-            List<String> deploymentPolicyIdsReferredInApplication = AutoscalerUtil.
-                    getDeploymentPolicyIdsReferredInApplication(application.getUniqueIdentifier());
-            for (String deploymentPolicyIdInApp : deploymentPolicyIdsReferredInApplication) {
-                if (deploymentPolicyId.equals(deploymentPolicyIdInApp)) {
-                    canRemove = false;
-                }
-            }
-        }
-        return canRemove;
-    }
-
     @Override
     public AutoscalePolicy getAutoscalingPolicy(String autoscalingPolicyId) {
         return PolicyManager.getInstance().getAutoscalePolicy(autoscalingPolicyId);
@@ -215,6 +145,8 @@ public class AutoscalerServiceImpl implements AutoscalerService {
 
         applicationContext.setStatus(ApplicationContext.STATUS_CREATED);
         AutoscalerContext.getInstance().addApplicationContext(applicationContext);
+        //Persisting the application
+        RegistryManager.getInstance().persistApplicationContext(applicationContext);
 
         if (log.isInfoEnabled()) {
             log.info(String.format("Application added successfully: [application-id] %s",
@@ -955,6 +887,9 @@ public class AutoscalerServiceImpl implements AutoscalerService {
         // validating application policy
         AutoscalerUtil.validateApplicationPolicy(applicationPolicy);
 
+        //Update application Monitor
+
+
         // updating application policy
         PolicyManager.getInstance().updateApplicationPolicy(applicationPolicy);
         return true;
@@ -1205,31 +1140,32 @@ public class AutoscalerServiceImpl implements AutoscalerService {
                 for (NetworkPartitionRef networkPartition : deploymentPolicy.getNetworkPartitionRefs()) {
                     ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext
                             = clusterMonitor.getClusterContext().getNetworkPartitionCtxt(networkPartition.getId());
-
-                    try {
-                        addNewPartitionsToClusterMonitor(clusterLevelNetworkPartitionContext, networkPartition,
-                                deploymentPolicy.getDeploymentPolicyID(), clusterMonitor.getClusterContext().getServiceId());
-                    } catch (RemoteException e) {
-
-                        String message = "Connection to cloud controller failed, Cluster monitor update failed for" +
-                                " [deployment-policy] " + deploymentPolicy.getDeploymentPolicyID();
-                        log.error(message);
-                        throw new CloudControllerConnectionException(message, e);
-                    } catch (CloudControllerServiceInvalidPartitionExceptionException e) {
-
-                        String message = "Invalid partition, Cluster monitor update failed for [deployment-policy] "
-                                + deploymentPolicy.getDeploymentPolicyID();
-                        log.error(message);
-                        throw new InvalidDeploymentPolicyException(message, e);
-                    } catch (CloudControllerServiceInvalidCartridgeTypeExceptionException e) {
-
-                        String message = "Invalid cartridge type, Cluster monitor update failed for [deployment-policy] "
-                                + deploymentPolicy.getDeploymentPolicyID() + " [cartridge] "
-                                + clusterMonitor.getClusterContext().getServiceId();
-                        log.error(message);
-                        throw new InvalidDeploymentPolicyException(message, e);
+                    if(clusterLevelNetworkPartitionContext != null) {
+                        try {
+                            addNewPartitionsToClusterMonitor(clusterLevelNetworkPartitionContext, networkPartition,
+                                    deploymentPolicy.getDeploymentPolicyID(), clusterMonitor.getClusterContext().getServiceId());
+                        } catch (RemoteException e) {
+
+                            String message = "Connection to cloud controller failed, Cluster monitor update failed for" +
+                                    " [deployment-policy] " + deploymentPolicy.getDeploymentPolicyID();
+                            log.error(message);
+                            throw new CloudControllerConnectionException(message, e);
+                        } catch (CloudControllerServiceInvalidPartitionExceptionException e) {
+
+                            String message = "Invalid partition, Cluster monitor update failed for [deployment-policy] "
+                                    + deploymentPolicy.getDeploymentPolicyID();
+                            log.error(message);
+                            throw new InvalidDeploymentPolicyException(message, e);
+                        } catch (CloudControllerServiceInvalidCartridgeTypeExceptionException e) {
+
+                            String message = "Invalid cartridge type, Cluster monitor update failed for [deployment-policy] "
+                                    + deploymentPolicy.getDeploymentPolicyID() + " [cartridge] "
+                                    + clusterMonitor.getClusterContext().getServiceId();
+                            log.error(message);
+                            throw new InvalidDeploymentPolicyException(message, e);
+                        }
+                        removeOldPartitionsFromClusterMonitor(clusterLevelNetworkPartitionContext, networkPartition);
                     }
-                    removeOldPartitionsFromClusterMonitor(clusterLevelNetworkPartitionContext, networkPartition);
                 }
             }
         }
@@ -1309,7 +1245,7 @@ public class AutoscalerServiceImpl implements AutoscalerService {
             log.error(message);
             throw new DeploymentPolicyNotExistsException(message);
         }
-        if (removableDeploymentPolicy(deploymentPolicyID)) {
+        if (AutoscalerUtil.removableDeploymentPolicy(deploymentPolicyID)) {
             PolicyManager.getInstance().removeDeploymentPolicy(deploymentPolicyID);
         } else {
             throw new UnremovablePolicyException("This deployment policy cannot be removed, since it is used in an " +

http://git-wip-us.apache.org/repos/asf/stratos/blob/729ef7ab/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
index 2f78fe7..db43650 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
@@ -937,7 +937,87 @@ public class AutoscalerUtil {
         }
     }
 
-    public void updateMonitors() {
+    /**
+     * Validate the Auto Scalar policy removal
+     *
+     * @param autoscalePolicyId Auto Scalar policy id boolean
+     * @return
+     */
+    public static boolean removableAutoScalerPolicy(String autoscalePolicyId) {
+        Collection<ApplicationContext> applicationContexts = AutoscalerContext.getInstance().
+                getApplicationContexts();
+        for (ApplicationContext applicationContext : applicationContexts) {
+            if(applicationContext.getComponents().getCartridgeContexts() != null) {
+                for(CartridgeContext cartridgeContext : applicationContext.getComponents().
+                        getCartridgeContexts()) {
+                    if(autoscalePolicyId.equals(cartridgeContext.getSubscribableInfoContext().
+                            getAutoscalingPolicy())) {
+                        return false;
+                    }
+                }
+            }
+
+            if(applicationContext.getComponents().getGroupContexts() != null) {
+                return findAutoscalingPolicyInGroup(applicationContext.getComponents().getGroupContexts(),
+                        autoscalePolicyId);
+            }
+        }
+        return true;
+    }
+
+    public static boolean findAutoscalingPolicyInGroup(GroupContext[] groupContexts,
+                                                String autoscalePolicyId) {
+        for(GroupContext groupContext : groupContexts) {
+            if(groupContext.getCartridgeContexts() != null) {
+                for(CartridgeContext cartridgeContext : groupContext.getCartridgeContexts()) {
+                    if(autoscalePolicyId.equals(cartridgeContext.getSubscribableInfoContext().
+                            getAutoscalingPolicy())) {
+                        return false;
+                    }
+                }
+
+            }
+            if(groupContext.getGroupContexts() != null) {
+                return findAutoscalingPolicyInGroup(groupContext.getGroupContexts(),
+                        autoscalePolicyId);
+            }
+        }
+        return true;
+    }
+
+
+    /**
+     * Validate the deployment policy removal
+     *
+     * @param deploymentPolicyId
+     * @return
+     */
+    public static boolean removableDeploymentPolicy(String deploymentPolicyId) {
+        boolean canRemove = true;
+        Map<String, Application> applications = ApplicationHolder.getApplications().getApplications();
+        for (Application application : applications.values()) {
+            List<String> deploymentPolicyIdsReferredInApplication = AutoscalerUtil.
+                    getDeploymentPolicyIdsReferredInApplication(application.getUniqueIdentifier());
+            for (String deploymentPolicyIdInApp : deploymentPolicyIdsReferredInApplication) {
+                if (deploymentPolicyId.equals(deploymentPolicyIdInApp)) {
+                    canRemove = false;
+                }
+            }
+        }
+        return canRemove;
+    }
+
+    public static void readApplicationContextsFromRegistry() {
+        String[] resourcePaths = RegistryManager.getInstance().getApplicationContextResourcePaths();
+        if ((resourcePaths == null) || (resourcePaths.length == 0)) {
+            return;
+        }
 
+        for (String resourcePath : resourcePaths) {
+            ApplicationContext applicationContext = RegistryManager.getInstance().
+                    getApplicationContextByResourcePath(resourcePath);
+            AutoscalerContext.getInstance().addApplicationContext( applicationContext);
+        }
     }
+
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/729ef7ab/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/AutoscalerUtilTest.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/AutoscalerUtilTest.java b/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/AutoscalerUtilTest.java
index 3706fd4..2f65281 100644
--- a/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/AutoscalerUtilTest.java
+++ b/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/AutoscalerUtilTest.java
@@ -19,9 +19,16 @@
 
 package org.apache.stratos.autoscaler;
 
+import org.apache.stratos.autoscaler.applications.pojo.*;
+import org.apache.stratos.autoscaler.context.AutoscalerContext;
 import org.apache.stratos.autoscaler.util.AutoscalerUtil;
+import org.apache.stratos.autoscaler.util.ServiceReferenceHolder;
+import org.apache.stratos.common.clustering.impl.HazelcastDistributedObjectProvider;
 import org.junit.Test;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import static org.junit.Assert.assertEquals;
 
 /**
@@ -68,4 +75,62 @@ public class AutoscalerUtilTest {
         tenantRange = AutoscalerUtil.findTenantRange(tenantId, null);
         assertEquals(tenantRange, "*");
     }
+
+    @Test
+    public void testRemovalOfAutoscalingPolicy() {
+        List<CartridgeContext> cartridgeContexts = new ArrayList<CartridgeContext>();
+        for(int i = 0; i < 12; i++) {
+            CartridgeContext cartridgeContext = new CartridgeContext();
+            SubscribableInfoContext subscribableContext = new SubscribableInfoContext();
+            subscribableContext.setAlias("cart-" + i);
+            subscribableContext.setDeploymentPolicy("dep-" + i);
+            subscribableContext.setAutoscalingPolicy("auto-" + i);
+            cartridgeContext.setSubscribableInfoContext(subscribableContext);
+            cartridgeContexts.add(cartridgeContext);
+        }
+        List<GroupContext> groupContextList = new ArrayList<GroupContext>();
+        for(int i = 0; i < 5; i++) {
+            GroupContext groupContext = new GroupContext();
+            groupContext.setAlias("group-" + i);
+            CartridgeContext[] cartridgeContexts1 = new CartridgeContext[2];
+            cartridgeContexts1[0] = cartridgeContexts.get(i);
+            cartridgeContexts1[1] = cartridgeContexts.get(i+5);
+
+            groupContext.setCartridgeContexts(cartridgeContexts1);
+            groupContextList.add(groupContext);
+        }
+
+        //Application-1
+        ApplicationContext applicationContext = new ApplicationContext();
+        applicationContext.setApplicationId("application-1");
+        ComponentContext componentContext = new ComponentContext();
+        CartridgeContext[] cartridgeContexts1 = new CartridgeContext[2];
+        cartridgeContexts1[0] = cartridgeContexts.get(10);
+        cartridgeContexts1[1] = cartridgeContexts.get(11);
+        componentContext.setCartridgeContexts(cartridgeContexts1);
+        GroupContext[] groupContexts = new GroupContext[groupContextList.size()];
+        componentContext.setGroupContexts(groupContextList.toArray(groupContexts));
+        applicationContext.setComponents(componentContext);
+
+        ServiceReferenceHolder holder = ServiceReferenceHolder.getInstance();
+        holder.setDistributedObjectProvider(new HazelcastDistributedObjectProvider());
+
+        AutoscalerContext.getInstance().addApplicationContext(applicationContext);
+
+
+        boolean canRemove;
+
+        canRemove = AutoscalerUtil.removableAutoScalerPolicy("test");
+        assertEquals(canRemove, true);
+
+        for(int i = 0; i < 12; i ++) {
+            canRemove = AutoscalerUtil.removableAutoScalerPolicy("auto-" + i);
+            assertEquals(canRemove, false);
+
+        }
+    }
+
+    public void testRemovalOfDeploymentPolicy() {
+
+    }
 }