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() {
+
+ }
}