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/05/12 17:51:31 UTC
stratos git commit: adding application instance scale down support
based on available network-partition
Repository: stratos
Updated Branches:
refs/heads/master ac02c043c -> 10cf2da77
adding application instance scale down support based on available network-partition
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/10cf2da7
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/10cf2da7
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/10cf2da7
Branch: refs/heads/master
Commit: 10cf2da77ff69efa1180ca0a288843a5a5a0a263
Parents: ac02c04
Author: reka <rt...@gmail.com>
Authored: Tue May 12 21:17:57 2015 +0530
Committer: reka <rt...@gmail.com>
Committed: Tue May 12 21:21:17 2015 +0530
----------------------------------------------------------------------
.../algorithms/NetworkPartitionAlgorithm.java | 9 +-
.../networkpartition/AllAtOnceAlgorithm.java | 25 ++-
.../NetworkPartitionAlgorithmContext.java | 14 +-
.../OneAfterAnotherAlgorithm.java | 169 ++++++++++++++-----
.../monitor/component/ApplicationMonitor.java | 53 +++++-
.../services/impl/AutoscalerServiceImpl.java | 25 ++-
6 files changed, 233 insertions(+), 62 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/10cf2da7/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithms/NetworkPartitionAlgorithm.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithms/NetworkPartitionAlgorithm.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithms/NetworkPartitionAlgorithm.java
index e881452..aa2f925 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithms/NetworkPartitionAlgorithm.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithms/NetworkPartitionAlgorithm.java
@@ -27,8 +27,13 @@ public interface NetworkPartitionAlgorithm {
/**
* Get a list network partitions in which application instances to be spawned
*
- * @param networkPartitionAlgorithmContext the {@link NetworkPartitionAlgorithmContext}
+ * @param networkPartitionAlgorithmContext the {@link org.apache.stratos.autoscaler.algorithms.networkpartition.NetworkPartitionAlgorithmContext}
* @return list of network partition ids
*/
- public List<String> getNextNetworkPartitions(NetworkPartitionAlgorithmContext networkPartitionAlgorithmContext);
+ public List getNextNetworkPartitions(NetworkPartitionAlgorithmContext
+ networkPartitionAlgorithmContext);
+
+
+ public List<String> getDefaultNetworkPartitions(NetworkPartitionAlgorithmContext
+ networkPartitionAlgorithmContext);
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/10cf2da7/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithms/networkpartition/AllAtOnceAlgorithm.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithms/networkpartition/AllAtOnceAlgorithm.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithms/networkpartition/AllAtOnceAlgorithm.java
index 8cd7268..1966d0c 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithms/networkpartition/AllAtOnceAlgorithm.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithms/networkpartition/AllAtOnceAlgorithm.java
@@ -20,6 +20,7 @@ package org.apache.stratos.autoscaler.algorithms.networkpartition;
import edu.emory.mathcs.backport.java.util.Arrays;
import org.apache.stratos.autoscaler.algorithms.NetworkPartitionAlgorithm;
+import org.apache.stratos.autoscaler.pojo.policy.PolicyManager;
import org.apache.stratos.autoscaler.pojo.policy.deployment.ApplicationPolicy;
import java.util.List;
@@ -33,7 +34,29 @@ public class AllAtOnceAlgorithm implements NetworkPartitionAlgorithm {
return null;
}
- ApplicationPolicy applicationPolicy = networkPartitionAlgorithmContext.getApplicationPolicy();
+ ApplicationPolicy applicationPolicy = PolicyManager.getInstance().getApplicationPolicy(
+ networkPartitionAlgorithmContext.getApplicationPolicyId());
+ if (applicationPolicy == null) {
+ return null;
+ }
+
+ String[] networkPartitions = applicationPolicy.getNetworkPartitions();
+ if (networkPartitions == null || networkPartitions.length == 0) {
+ return null;
+ }
+
+ return Arrays.asList(networkPartitions);
+ }
+
+ @Override
+ public List<String> getDefaultNetworkPartitions(NetworkPartitionAlgorithmContext
+ networkPartitionAlgorithmContext) {
+ if (networkPartitionAlgorithmContext == null) {
+ return null;
+ }
+
+ ApplicationPolicy applicationPolicy = PolicyManager.getInstance().getApplicationPolicy(
+ networkPartitionAlgorithmContext.getApplicationPolicyId());
if (applicationPolicy == null) {
return null;
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/10cf2da7/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithms/networkpartition/NetworkPartitionAlgorithmContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithms/networkpartition/NetworkPartitionAlgorithmContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithms/networkpartition/NetworkPartitionAlgorithmContext.java
index 53605f5..b605d4f 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithms/networkpartition/NetworkPartitionAlgorithmContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithms/networkpartition/NetworkPartitionAlgorithmContext.java
@@ -27,13 +27,13 @@ public class NetworkPartitionAlgorithmContext implements Serializable {
private static final long serialVersionUID = -1539453541207312793L;
private String applicationId;
- private ApplicationPolicy applicationPolicy;
+ private String applicationPolicyId;
private AtomicInteger currentNetworkPartitionIndex;
- public NetworkPartitionAlgorithmContext(String applicationId, ApplicationPolicy applicationPolicy,
+ public NetworkPartitionAlgorithmContext(String applicationId, String applicationPolicyId,
int currentNetworkPartitionIndex) {
this.applicationId = applicationId;
- this.applicationPolicy = applicationPolicy;
+ this.applicationPolicyId = applicationPolicyId;
this.currentNetworkPartitionIndex = new AtomicInteger(currentNetworkPartitionIndex);
}
@@ -41,11 +41,11 @@ public class NetworkPartitionAlgorithmContext implements Serializable {
return currentNetworkPartitionIndex;
}
- public ApplicationPolicy getApplicationPolicy() {
- return applicationPolicy;
- }
-
public String getApplicationId() {
return applicationId;
}
+
+ public String getApplicationPolicyId() {
+ return applicationPolicyId;
+ }
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/10cf2da7/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithms/networkpartition/OneAfterAnotherAlgorithm.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithms/networkpartition/OneAfterAnotherAlgorithm.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithms/networkpartition/OneAfterAnotherAlgorithm.java
index d70d028..c9f6970 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithms/networkpartition/OneAfterAnotherAlgorithm.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithms/networkpartition/OneAfterAnotherAlgorithm.java
@@ -18,22 +18,27 @@
*/
package org.apache.stratos.autoscaler.algorithms.networkpartition;
-import edu.emory.mathcs.backport.java.util.Arrays;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.stratos.autoscaler.algorithms.NetworkPartitionAlgorithm;
+import org.apache.stratos.autoscaler.pojo.policy.PolicyManager;
import org.apache.stratos.autoscaler.pojo.policy.deployment.ApplicationPolicy;
import org.apache.stratos.common.constants.StratosConstants;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
+/**
+ * One after algorithm for the network-partition or groups
+ */
public class OneAfterAnotherAlgorithm implements NetworkPartitionAlgorithm {
private static final Log log = LogFactory.getLog(NetworkPartitionAlgorithm.class);
@Override
- public List<String> getNextNetworkPartitions(NetworkPartitionAlgorithmContext networkPartitionAlgorithmContext) {
+ public List<String> getNextNetworkPartitions(NetworkPartitionAlgorithmContext
+ networkPartitionAlgorithmContext) {
if (networkPartitionAlgorithmContext == null) {
if (log.isWarnEnabled()) {
@@ -46,78 +51,92 @@ public class OneAfterAnotherAlgorithm implements NetworkPartitionAlgorithm {
String applicationId = networkPartitionAlgorithmContext.getApplicationId();
if (applicationId == null) {
if (log.isWarnEnabled()) {
- String msg = "Application id is null in etwork partition algorithm context";
+ String msg = "Application id is null in network partition algorithm context";
log.warn(msg);
}
return null;
}
- ApplicationPolicy applicationPolicy = networkPartitionAlgorithmContext.getApplicationPolicy();
+ ApplicationPolicy applicationPolicy = PolicyManager.getInstance().getApplicationPolicy(
+ networkPartitionAlgorithmContext.getApplicationPolicyId());
if (applicationPolicy == null) {
if (log.isWarnEnabled()) {
- String msg = String.format("No application policy found in network partition algorithm context [application-id] %s", applicationId);
+ String msg = String.format("No application policy found in network partition " +
+ "algorithm context [application-id] %s", applicationId);
log.warn(msg);
}
return null;
}
- String applicatioinPolicyId = applicationPolicy.getId();
+ String applicationPolicyId = applicationPolicy.getId();
String[] networkPartitionGroups = applicationPolicy.getNetworkPartitionGroups();
if (networkPartitionGroups != null && networkPartitionGroups.length != 0) {
if (log.isDebugEnabled()) {
- String msg = String.format("Network partition groups property found in application policy [application-id] %s [application-policy-id] %s. "
- + "Hence using network partition groups for app bursting", applicationId, applicatioinPolicyId);
+ String msg = String.format("Network partition groups property found in " +
+ "application policy [application-id] %s [application-policy-id] %s. "
+ + "Hence using network partition groups for app bursting",
+ applicationId, applicationPolicyId);
log.debug(msg);
}
int totalNetworkPartitionGroups = networkPartitionGroups.length;
if (log.isDebugEnabled()) {
- String msg = String.format("%s network partition groups found in application policy [application-id] %s [application-policy-id] %s",
- totalNetworkPartitionGroups, applicationId, applicatioinPolicyId);
+ String msg = String.format("%s network partition groups found in application " +
+ "policy [application-id] %s [application-policy-id] %s",
+ totalNetworkPartitionGroups, applicationId, applicationPolicyId);
log.debug(msg);
}
- int currentPartitionIndex = networkPartitionAlgorithmContext.getCurrentNetworkPartitionIndex().intValue();
+ int currentPartitionIndex = networkPartitionAlgorithmContext.
+ getCurrentNetworkPartitionIndex().intValue();
if (log.isDebugEnabled()) {
- String msg = String.format("Current network partition group index is %s [application-id] %s [application-policy-d]",
- currentPartitionIndex, applicationId, applicatioinPolicyId);
+ String msg = String.format("Current network partition group index is %s " +
+ "[application-id] %s [application-policy-d] %s",
+ currentPartitionIndex, applicationId, applicationPolicyId);
log.debug(msg);
}
if (currentPartitionIndex >= totalNetworkPartitionGroups) {
if (log.isDebugEnabled()) {
- String msg = String.format("currentPartitionIndex >= totalNetworkPartitionGroups, hence no more network partition groups are available "
- + "[application-id] %s [application-policy-d]", currentPartitionIndex, applicationId, applicatioinPolicyId);
+ String msg = String.format("currentPartitionIndex %s >= " +
+ "totalNetworkPartitionGroups %s, hence no more network partition" +
+ " groups are available [application-id] %s " +
+ "[application-policy-id] %s", currentPartitionIndex,
+ totalNetworkPartitionGroups, applicationId, applicationPolicyId);
log.debug(msg);
}
return null;
}
- int selectedIndex = networkPartitionAlgorithmContext.getCurrentNetworkPartitionIndex().incrementAndGet();
+ int selectedIndex = networkPartitionAlgorithmContext.
+ getCurrentNetworkPartitionIndex().incrementAndGet();
if (log.isDebugEnabled()) {
- String msg = String.format("Selected network partition group index is %s (starting from 1,2,3...) [application-id] %s [application-policy-d]",
- selectedIndex, applicationId, applicatioinPolicyId);
+ String msg = String.format("Selected network partition group index is %s " +
+ "(starting from 1,2,3...) [application-id] %s " +
+ "[application-policy-d] %s", selectedIndex,
+ applicationId, applicationPolicyId);
log.debug(msg);
}
if (log.isDebugEnabled()) {
- String msg = String.format("Selected network partition group is %s [application-id] %s [application-policy-d]",
- networkPartitionGroups[selectedIndex - 1], applicationId, applicatioinPolicyId);
+ String msg = String.format("Selected network partition group is %s " +
+ "[application-id] %s [application-policy-id] %s",
+ networkPartitionGroups[selectedIndex - 1], applicationId, applicationPolicyId);
log.debug(msg);
}
- String[] selectedNetworkPartitions = networkPartitionGroups[selectedIndex - 1].split(StratosConstants.APPLICATION_POLICY_NETWORK_PARTITIONS_SPLITTER);
- if (selectedNetworkPartitions == null) {
- return null;
- }
+ List<String> selectedNetworkPartitions = new ArrayList<String>();
+ Collections.addAll(selectedNetworkPartitions, networkPartitionGroups[selectedIndex - 1].
+ split(StratosConstants.APPLICATION_POLICY_NETWORK_PARTITIONS_SPLITTER));
- return Arrays.asList(selectedNetworkPartitions);
+ return selectedNetworkPartitions;
}
String[] networkPartitions = applicationPolicy.getNetworkPartitions();
if (networkPartitions == null || networkPartitions.length == 0) {
if (log.isWarnEnabled()) {
- String msg = String.format("Network partitions found in application policy [application-id] %s [application-policy-id] %s",
- applicationId, applicatioinPolicyId);
+ String msg = String.format("Network partitions found in application policy " +
+ "[application-id] %s [application-policy-id] %s",
+ applicationId, applicationPolicyId);
log.warn(msg);
}
return null;
@@ -125,37 +144,45 @@ public class OneAfterAnotherAlgorithm implements NetworkPartitionAlgorithm {
int totalNetworkPartitions = networkPartitions.length;
if (log.isDebugEnabled()) {
- String msg = String.format("%s network partitions found in application policy [application-id] %s [application-policy-id] %s",
- totalNetworkPartitions, applicationId, applicatioinPolicyId);
+ String msg = String.format("%s network partitions found in application policy " +
+ "[application-id] %s [application-policy-id] %s",
+ totalNetworkPartitions, applicationId, applicationPolicyId);
log.debug(msg);
}
- int currentPartitionIndex = networkPartitionAlgorithmContext.getCurrentNetworkPartitionIndex().intValue();
+ int currentPartitionIndex = networkPartitionAlgorithmContext.
+ getCurrentNetworkPartitionIndex().intValue();
if (log.isDebugEnabled()) {
- String msg = String.format("Current network partition index is %s [application-id] %s [application-policy-d]",
- currentPartitionIndex, applicationId, applicatioinPolicyId);
+ String msg = String.format("Current network partition index is %s " +
+ "[application-id] %s [application-policy-id] %s",
+ currentPartitionIndex, applicationId, applicationPolicyId);
log.debug(msg);
}
if (currentPartitionIndex >= totalNetworkPartitions) {
if (log.isDebugEnabled()) {
- String msg = String.format("currentPartitionIndex >= totalNetworkPartitions, hence no more network partitions are available "
- + "[application-id] %s [application-policy-d]", currentPartitionIndex, applicationId, applicatioinPolicyId);
+ String msg = String.format("currentPartitionIndex %s >= totalNetworkPartitions %s , " +
+ "hence no more network partitions are available "
+ + "[application-id] %s [application-policy-id] %s", currentPartitionIndex,
+ totalNetworkPartitions, applicationId, applicationPolicyId);
log.debug(msg);
}
return null;
}
- int selectedIndex = networkPartitionAlgorithmContext.getCurrentNetworkPartitionIndex().incrementAndGet();
+ int selectedIndex = networkPartitionAlgorithmContext.getCurrentNetworkPartitionIndex().
+ incrementAndGet();
if (log.isDebugEnabled()) {
- String msg = String.format("Selected network partition index is %s (starting from 1,2,3...) [application-id] %s [application-policy-d]",
- selectedIndex, applicationId, applicatioinPolicyId);
+ String msg = String.format("Selected network partition index is %s " +
+ "(starting from 1,2,3...) [application-id] %s [application-policy-id] %s",
+ selectedIndex, applicationId, applicationPolicyId);
log.debug(msg);
}
if (log.isDebugEnabled()) {
- String msg = String.format("Selected network partition is %s [application-id] %s [application-policy-d]",
- networkPartitions[selectedIndex - 1], applicationId, applicatioinPolicyId);
+ String msg = String.format("Selected network partition is %s [application-id] %s " +
+ "[application-policy-id] %s",
+ networkPartitions[selectedIndex - 1], applicationId, applicationPolicyId);
log.debug(msg);
}
@@ -164,4 +191,68 @@ public class OneAfterAnotherAlgorithm implements NetworkPartitionAlgorithm {
return nextNetworkPartitions;
}
+
+ @Override
+ public List<String> getDefaultNetworkPartitions(NetworkPartitionAlgorithmContext
+ networkPartitionAlgorithmContext) {
+ if (networkPartitionAlgorithmContext == null) {
+ if (log.isWarnEnabled()) {
+ String msg = "Network partition algorithm context is null";
+ log.warn(msg);
+ }
+ return null;
+ }
+
+ String applicationId = networkPartitionAlgorithmContext.getApplicationId();
+ if (applicationId == null) {
+ if (log.isWarnEnabled()) {
+ String msg = "Application id is null in network partition algorithm context";
+ log.warn(msg);
+ }
+ return null;
+ }
+
+ ApplicationPolicy applicationPolicy = PolicyManager.getInstance().getApplicationPolicy(
+ networkPartitionAlgorithmContext.getApplicationPolicyId());
+ if (applicationPolicy == null) {
+ if (log.isWarnEnabled()) {
+ String msg = String.format("No application policy found in network partition " +
+ "algorithm context [application-id] %s", applicationId);
+ log.warn(msg);
+ }
+ return null;
+ }
+
+ String applicationPolicyId = applicationPolicy.getId();
+ String[] networkPartitionGroups = applicationPolicy.getNetworkPartitionGroups();
+ List<String> selectedNetworkPartitions = new ArrayList<String>();
+
+ if (networkPartitionGroups != null && networkPartitionGroups.length != 0) {
+ if (log.isDebugEnabled()) {
+ String msg = String.format("Network partition groups property found in application " +
+ "policy [application-id] %s [application-policy-id] %s. "
+ + "Hence using network partition groups for app bursting",
+ applicationId, applicationPolicyId);
+ log.debug(msg);
+ }
+ int totalNetworkPartitionGroups = networkPartitionGroups.length;
+ if (log.isDebugEnabled()) {
+ String msg = String.format("%s network partition groups found in application policy" +
+ " [application-id] %s [application-policy-id] %s",
+ totalNetworkPartitionGroups, applicationId, applicationPolicyId);
+ log.debug(msg);
+ }
+ //Returning the very first network-partition group as the default one
+ Collections.addAll(selectedNetworkPartitions, networkPartitionGroups[0].
+ split(StratosConstants.APPLICATION_POLICY_NETWORK_PARTITIONS_SPLITTER));
+
+ } else {
+ //Returning the very first network-partition as the default one
+ String[] networkPartitions = applicationPolicy.getNetworkPartitions();
+ selectedNetworkPartitions.add(networkPartitions[0]);
+ }
+
+ return selectedNetworkPartitions;
+
+ }
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/10cf2da7/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 8183ea8..871bbf6 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
@@ -120,7 +120,7 @@ public class ApplicationMonitor extends ParentComponentMonitor {
ApplicationInstance instance = (ApplicationInstance) instanceIdToInstanceMap.
get(instanceContext.getId());
//stopping the monitoring when the group is inactive/Terminating/Terminated
- if (instance.getStatus().getCode() <= GroupStatus.Active.getCode()) {
+ if (instance.getStatus().getCode() <= ApplicationStatus.Active.getCode()) {
//Gives priority to scaling max out rather than dependency scaling
if (!instanceContext.getIdToScalingOverMaxEvent().isEmpty()) {
//handling the scaling max out of the children
@@ -192,9 +192,54 @@ public class ApplicationMonitor extends ParentComponentMonitor {
//all the children sent the scale down only, it will try to scale down
if (allChildrenScaleDown) {
- //Check whether this app monitor has burst application
- ApplicationBuilder.handleApplicationInstanceTerminatingEvent(this.appId,
- instanceContext.getId());
+ //Need to get the network partition
+ NetworkPartitionAlgorithmContext algorithmContext = AutoscalerContext.getInstance().
+ getNetworkPartitionAlgorithmContext(appId);
+ if (algorithmContext == null) {
+ String msg = String.format("Network partition algorithm context not found " +
+ "in registry or in-memory [application-id] %s", appId);
+ log.error(msg);
+ throw new RuntimeException(msg);
+ }
+
+ ApplicationPolicy applicationPolicy = PolicyManager.getInstance().
+ getApplicationPolicy(algorithmContext.getApplicationPolicyId());
+ if (applicationPolicy == null) {
+ String msg = String.format("Application policy not found in registry or " +
+ "in-memory [application-id] %s", appId);
+ log.error(msg);
+ throw new RuntimeException(msg);
+ }
+
+ 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.
+ List<String> defaultNetworkPartitions = algorithm.
+ getDefaultNetworkPartitions(algorithmContext);
+ if(!defaultNetworkPartitions.contains(nwPartitionContext.getId())) {
+ //Since it is not default network-partition, it can be terminated
+ // upon scale-down of the children as it has been created by bursting
+ ApplicationBuilder.handleApplicationInstanceTerminatingEvent(this.appId,
+ instanceContext.getId());
+ }
+
}
//Resetting the events
http://git-wip-us.apache.org/repos/asf/stratos/blob/10cf2da7/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 328aa26..4d2e3bf 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
@@ -221,24 +221,28 @@ public class AutoscalerServiceImpl implements AutoscalerService {
@Override
public ApplicationContext[] getApplications() {
return AutoscalerContext.getInstance().getApplicationContexts().
- toArray(new ApplicationContext[AutoscalerContext.getInstance().getApplicationContexts().size()]);
+ toArray(new ApplicationContext[AutoscalerContext.getInstance().
+ getApplicationContexts().size()]);
}
@Override
- public boolean deployApplication(String applicationId, String applicationPolicyId) throws ApplicationDefinitionException {
+ public boolean deployApplication(String applicationId, String applicationPolicyId)
+ throws ApplicationDefinitionException {
try {
Application application = ApplicationHolder.getApplications().getApplication(applicationId);
if (application == null) {
throw new RuntimeException("Application not found: " + applicationId);
}
- ApplicationContext applicationContext = RegistryManager.getInstance().getApplicationContext(applicationId);
+ ApplicationContext applicationContext = RegistryManager.getInstance().
+ getApplicationContext(applicationId);
if (applicationContext == null) {
throw new RuntimeException("Application context not found: " + applicationId);
}
// Create application clusters in cloud controller and send application created event
- ApplicationBuilder.handleApplicationDeployment(application, applicationContext.getComponents().getApplicationClusterContexts());
+ ApplicationBuilder.handleApplicationDeployment(application,
+ applicationContext.getComponents().getApplicationClusterContexts());
// validating application policy against the application
AutoscalerUtil.validateApplicationPolicyAgainstApplication(applicationId, applicationPolicyId);
@@ -254,13 +258,14 @@ public class AutoscalerServiceImpl implements AutoscalerService {
}
// adding network partition algorithm context to registry
- ApplicationPolicy applicationPolicy = PolicyManager.getInstance().getApplicationPolicy(applicationPolicyId);
- NetworkPartitionAlgorithmContext algorithmContext = new NetworkPartitionAlgorithmContext(applicationId, applicationPolicy, 0);
+ NetworkPartitionAlgorithmContext algorithmContext =
+ new NetworkPartitionAlgorithmContext(applicationId, applicationPolicyId, 0);
AutoscalerContext.getInstance().addNetworkPartitionAlgorithmContext(algorithmContext);
if (!applicationContext.isMultiTenant()) {
// Add application signup for single tenant applications
- addApplicationSignUp(applicationContext, application.getKey(), findApplicationClusterIds(application));
+ addApplicationSignUp(applicationContext, application.getKey(),
+ findApplicationClusterIds(application));
}
applicationContext.setStatus(ApplicationContext.STATUS_DEPLOYED);
AutoscalerContext.getInstance().updateApplicationContext(applicationContext);
@@ -268,7 +273,8 @@ public class AutoscalerServiceImpl implements AutoscalerService {
log.info("Waiting for application clusters to be created: [application] " + applicationId);
return true;
} catch (Exception e) {
- ApplicationContext applicationContext = RegistryManager.getInstance().getApplicationContext(applicationId);
+ ApplicationContext applicationContext = RegistryManager.getInstance().
+ getApplicationContext(applicationId);
if (applicationContext != null) {
// Revert application status
applicationContext.setStatus(ApplicationContext.STATUS_CREATED);
@@ -367,7 +373,8 @@ public class AutoscalerServiceImpl implements AutoscalerService {
}
}
if (groupContext.getGroupContexts() != null) {
- for (CartridgeContext cartridgeContext : getCartridgeContextsOfGroupsRecursively(groupContext.getGroupContexts())) {
+ for (CartridgeContext cartridgeContext :
+ getCartridgeContextsOfGroupsRecursively(groupContext.getGroupContexts())) {
cartridgeContextsList.add(cartridgeContext);
}