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 2014/12/04 13:31:12 UTC
[1/6] stratos git commit: adding stratos restart support for
ApplicationInstances handling
Repository: stratos
Updated Branches:
refs/heads/master 64e874796 -> 707f11171
adding stratos restart support for ApplicationInstances handling
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/c7c3ec60
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/c7c3ec60
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/c7c3ec60
Branch: refs/heads/master
Commit: c7c3ec601a2800df420f770b69eead24b7733668
Parents: 64e8747
Author: reka <rt...@gmail.com>
Authored: Thu Dec 4 11:46:17 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Thu Dec 4 16:46:24 2014 +0530
----------------------------------------------------------------------
.../applications/topic/ApplicationBuilder.java | 15 +--
.../monitor/component/ApplicationMonitor.java | 112 ++++++++++++-------
.../domain/applications/Application.java | 33 ++++--
3 files changed, 106 insertions(+), 54 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/c7c3ec60/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 6fb76df..06271db 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
@@ -82,7 +82,7 @@ public class ApplicationBuilder {
ApplicationsEventPublisher.sendApplicationCreatedEvent(application);
}
- public static void handleApplicationInstanceCreatedEvent(String appId, String instanceId,
+ public static ApplicationInstance handleApplicationInstanceCreatedEvent(String appId, String instanceId,
String networkPartitionId) {
if (log.isDebugEnabled()) {
log.debug("Handling application activation event: [application-id] " + appId);
@@ -94,18 +94,18 @@ public class ApplicationBuilder {
if (application == null) {
log.warn(String.format("Application does not exist: [application-id] %s",
appId));
- return;
+ return null;
}
ApplicationStatus status = ApplicationStatus.Created;
-
+ ApplicationInstance applicationInstance = null;
if (!application.containsInstanceContext(instanceId)) {
//setting the status, persist and publish
- ApplicationInstance context = new ApplicationInstance(appId, instanceId);
- context.setStatus(status);
- context.setNetworkPartitionId(networkPartitionId);
- application.addInstanceContext(instanceId, context);
+ applicationInstance = new ApplicationInstance(appId, instanceId);
+ applicationInstance.setStatus(status);
+ applicationInstance.setNetworkPartitionId(networkPartitionId);
+ application.addInstanceContext(instanceId, applicationInstance);
//updateApplicationMonitor(appId, status);
ApplicationHolder.persistApplication(application);
//ApplicationsEventPublisher.sendApplicationActivatedEvent(appId);
@@ -113,6 +113,7 @@ public class ApplicationBuilder {
log.warn(String.format("Application Instance Context already exists" +
" [appId] %s [ApplicationInstanceId] %s", appId, instanceId));
}
+ return applicationInstance;
}
public static void handleApplicationActivatedEvent(String appId, String instanceId) {
http://git-wip-us.apache.org/repos/asf/stratos/blob/c7c3ec60/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 4a8ae19..58c1fa0 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
@@ -41,7 +41,6 @@ import org.apache.stratos.messaging.domain.applications.Application;
import org.apache.stratos.messaging.domain.applications.ApplicationStatus;
import org.apache.stratos.messaging.domain.applications.GroupStatus;
import org.apache.stratos.messaging.domain.instance.ApplicationInstance;
-import org.apache.stratos.messaging.domain.instance.GroupInstance;
import org.apache.stratos.messaging.domain.topology.ClusterStatus;
import org.apache.stratos.messaging.domain.topology.lifecycle.LifeCycleState;
@@ -108,7 +107,7 @@ public class ApplicationMonitor extends ParentComponentMonitor {
* @param status the status
*/
public void setStatus(ApplicationStatus status, String instanceId) {
- ((ApplicationInstance)this.instanceIdToInstanceMap.get(instanceId)).setStatus(status);
+ ((ApplicationInstance) this.instanceIdToInstanceMap.get(instanceId)).setStatus(status);
//notify the children about the state change
try {
@@ -144,9 +143,9 @@ public class ApplicationMonitor extends ParentComponentMonitor {
} else {
log.warn("[monitor] " + id + " cannot be found in the inActive monitors list");
}
- ApplicationInstance instance = (ApplicationInstance)instanceIdToInstanceMap.get(instanceId);
+ ApplicationInstance instance = (ApplicationInstance) instanceIdToInstanceMap.get(instanceId);
if (instance != null) {
- if(instance.getStatus() == ApplicationStatus.Terminating) {
+ if (instance.getStatus() == ApplicationStatus.Terminating) {
ServiceReferenceHolder.getInstance().getGroupStatusProcessorChain().process(this.id,
appId, instanceId);
} else {
@@ -200,37 +199,65 @@ public class ApplicationMonitor extends ParentComponentMonitor {
DeploymentPolicy deploymentPolicy = getDeploymentPolicy(application);
String instanceId;
- if(deploymentPolicy == null) {
+ if (deploymentPolicy == null) {
//FIXME for docker with deployment policy
- instanceId = createApplicationInstance(application, null);
- instanceIds.add(instanceId);
+ ApplicationInstance appInstance = createApplicationInstance(application, null);
+ instanceIds.add(appInstance.getInstanceId());
} else {
for (ApplicationLevelNetworkPartition networkPartition :
- deploymentPolicy.getApplicationLevelNetworkPartitions()) {
+ deploymentPolicy.getApplicationLevelNetworkPartitions()) {
if (networkPartition.isActiveByDefault()) {
ApplicationLevelNetworkPartitionContext context =
new ApplicationLevelNetworkPartitionContext(networkPartition.getId());
- instanceId = createApplicationInstance(application, networkPartition.getId());
- ApplicationInstanceContext instanceContext = new ApplicationInstanceContext(instanceId);
- context.addInstanceContext(instanceContext);
-
- ApplicationInstance instance = new ApplicationInstance(appId, instanceId);
- instance.setStatus(ApplicationStatus.Created);
- instance.setNetworkPartitionId(networkPartition.getId());
- this.instanceIdToInstanceMap.put(instanceId, instance);
-
- this.networkPartitionCtxts.put(context.getId(), context);
-
+ //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) {
+ //use the existing instance in the Topology to create the data
+ instanceId = handleApplicationInstanceCreation(application, context, appInstance);
+ } else {
+ //create new app instance as it doesn't exist in the Topology
+ instanceId = handleApplicationInstanceCreation(application, context, null);
+ }
instanceIds.add(instanceId);
log.info("Application instance has been added for the [network partition] " +
networkPartition.getId() + " [appInstanceId] " + instanceId);
- }
+ }
}
}
startDependency(application, instanceIds);
}
+ private String handleApplicationInstanceCreation(Application application,
+ ApplicationLevelNetworkPartitionContext context,
+ ApplicationInstance instanceExist) {
+ ApplicationInstance instance;
+ ApplicationInstanceContext instanceContext;
+ if (instanceExist != null) {
+ //using the existing instance
+ instance = instanceExist;
+ } else {
+ //creating a new applicationInstance
+ instance = createApplicationInstance(application, context.getId());
+
+ }
+ String instanceId = instance.getInstanceId();
+
+ //Creating appInstanceContext
+ instanceContext = new ApplicationInstanceContext(instanceId);
+ //adding the created App InstanceContext to ApplicationLevelNetworkPartitionContext
+ context.addInstanceContext(instanceContext);
+
+ //adding to instance map
+ this.instanceIdToInstanceMap.put(instanceId, instance);
+ //adding ApplicationLevelNetworkPartitionContext to networkPartitionContexts map
+ this.networkPartitionCtxts.put(context.getId(), context);
+
+ return instanceId;
+ }
+
public void createInstanceOnBurstingForApplication() throws TopologyInConsistentException,
PolicyValidationException,
MonitorNotFoundException {
@@ -243,48 +270,52 @@ public class ApplicationMonitor extends ParentComponentMonitor {
DeploymentPolicy deploymentPolicy = getDeploymentPolicy(application);
String instanceId = null;
//Find out the inActive network partition
- if(deploymentPolicy == null) {
+ if (deploymentPolicy == null) {
//FIXME for docker with deployment policy
- instanceId = createApplicationInstance(application, null);
+ ApplicationInstance appInstance = createApplicationInstance(application, null);
+ instanceId = appInstance.getInstanceId();
} else {
for (ApplicationLevelNetworkPartition networkPartition : deploymentPolicy.
- getApplicationLevelNetworkPartitions()) {
+ getApplicationLevelNetworkPartitions()) {
+ //Checking whether any not active NP found
if (!networkPartition.isActiveByDefault()) {
+
if (!this.networkPartitionCtxts.containsKey(networkPartition.getId())) {
+
ApplicationLevelNetworkPartitionContext context =
new ApplicationLevelNetworkPartitionContext(networkPartition.getId());
- context.setCreatedOnBurst(true);
- instanceId = createApplicationInstance(application, networkPartition.getId());
-
- ApplicationInstanceContext instanceContext = new ApplicationInstanceContext(instanceId);
- context.addInstanceContext(instanceContext);
- this.networkPartitionCtxts.put(context.getId(), context);
-
- ApplicationInstance instance = new ApplicationInstance(appId, instanceId);
- instance.setStatus(ApplicationStatus.Created);
- this.instanceIdToInstanceMap.put(instanceId, instance);
+ //Setting flags saying that it has been created by burst
+ context.setCreatedOnBurst(true);
+ ApplicationInstance appInstance = (ApplicationInstance) application.
+ getInstanceByNetworkPartitionId(context.getId());
+
+ if (appInstance == null) {
+ instanceId = handleApplicationInstanceCreation(application, context, null);
+ } else {
+ log.warn("The Network partition is already associated with an " +
+ "[ApplicationInstance] " + appInstance.getInstanceId() +
+ "in the ApplicationsTopology. Hence not creating new AppInstance.");
+ instanceId = handleApplicationInstanceCreation(application, context, appInstance);
+ }
burstNPFound = true;
}
}
}
}
-
-
if (!burstNPFound) {
log.warn("[Application] " + appId + " cannot be burst as no available resources found");
} else {
startDependency(application, instanceId);
}
-
}
private DeploymentPolicy getDeploymentPolicy(Application application) throws PolicyValidationException {
String deploymentPolicyName = application.getDeploymentPolicy();
DeploymentPolicy deploymentPolicy = PolicyManager.getInstance().
getDeploymentPolicyByApplication(application.getUniqueIdentifier());
- if(deploymentPolicyName != null) {
+ if (deploymentPolicyName != null) {
deploymentPolicy = PolicyManager.getInstance()
.getDeploymentPolicy(deploymentPolicyName);
if (deploymentPolicy == null) {
@@ -297,10 +328,11 @@ public class ApplicationMonitor extends ParentComponentMonitor {
return deploymentPolicy;
}
- private String createApplicationInstance(Application application, String networkPartitionId) {
+ private ApplicationInstance createApplicationInstance(Application application, String networkPartitionId) {
String instanceId = this.generateInstanceId(application);
- ApplicationBuilder.handleApplicationInstanceCreatedEvent(appId, instanceId, networkPartitionId);
- return instanceId;
+ ApplicationInstance instance = ApplicationBuilder.handleApplicationInstanceCreatedEvent(
+ appId, instanceId, networkPartitionId);
+ return instance;
}
public Map<String, ApplicationLevelNetworkPartitionContext> getApplicationLevelNetworkPartitionCtxts() {
http://git-wip-us.apache.org/repos/asf/stratos/blob/c7c3ec60/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Application.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Application.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Application.java
index e0238ea..b8e3ee3 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Application.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Application.java
@@ -20,9 +20,12 @@
package org.apache.stratos.messaging.domain.applications;
import org.apache.commons.lang3.RandomStringUtils;
+import org.apache.poi.ss.formula.functions.T;
import org.apache.stratos.messaging.domain.instance.ApplicationInstance;
+import org.apache.stratos.messaging.domain.instance.Instance;
-import java.util.*;
+import java.util.HashMap;
+import java.util.Stack;
/**
* Represents an Application in the Topology
@@ -44,13 +47,13 @@ public class Application extends ParentComponent<ApplicationInstance> {
// Life cycle state manager
//protected LifeCycleStateManager<ApplicationStatus> applicationStateManager;
- public Application (String id) {
+ public Application(String id) {
super();
this.id = id;
this.key = RandomStringUtils.randomAlphanumeric(16);
this.instanceIdToInstanceContextMap = new HashMap<String, ApplicationInstance>();
//this.applicationStateManager =
- //new LifeCycleStateManager<ApplicationStatus>(ApplicationStatus.Created, id);
+ //new LifeCycleStateManager<ApplicationStatus>(ApplicationStatus.Created, id);
}
public String getUniqueIdentifier() {
@@ -102,19 +105,35 @@ public class Application extends ParentComponent<ApplicationInstance> {
}
public boolean equals(Object other) {
- if(other == null || !(other instanceof Application)) {
+ if (other == null || !(other instanceof Application)) {
return false;
}
- if(this == other) {
+ if (this == other) {
return true;
}
- Application that = (Application)other;
+ Application that = (Application) other;
return this.id.equals(that.id);
}
- public int hashCode () {
+ public int hashCode() {
return id.hashCode();
}
+
+ public Instance getInstanceByNetworkPartitionId(String networkPartitionId) {
+ // if map is empty, return null
+ if (getInstanceIdToInstanceContextMap().isEmpty()) {
+ return null;
+ }
+
+ for (Instance instance : instanceIdToInstanceContextMap.values()) {
+ if (instance.getNetworkPartitionId().equals(networkPartitionId)) {
+ return instance;
+ }
+ }
+
+ return null;
+
+ }
}
[6/6] stratos git commit: fixing wrong arguement passing issue
Posted by re...@apache.org.
fixing wrong arguement passing issue
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/707f1117
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/707f1117
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/707f1117
Branch: refs/heads/master
Commit: 707f11171a98b3aebdd6ecad221f7220da452e93
Parents: ec3fd0f
Author: reka <rt...@gmail.com>
Authored: Thu Dec 4 18:00:42 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Thu Dec 4 18:00:42 2014 +0530
----------------------------------------------------------------------
.../org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java | 2 +-
.../modules/distribution/src/main/conf/drools/scaling.drl | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/707f1117/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java
index 6c58244..bbe499c 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java
@@ -194,8 +194,8 @@ public class RuleTasksDelegator {
CloudControllerClient.getInstance()
.spawnAnInstance(clusterMonitorPartitionContext.getPartition(),
clusterId,
- instanceId,
clusterMonitorPartitionContext.getNetworkPartitionId(),
+ instanceId,
isPrimary,
minimumCountOfNetworkPartition);
if (memberContext != null) {
http://git-wip-us.apache.org/repos/asf/stratos/blob/707f1117/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl
----------------------------------------------------------------------
diff --git a/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl b/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl
index 8523088..621cbe6 100644
--- a/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl
+++ b/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl
@@ -132,7 +132,7 @@ dialect "mvel"
int count = 0;
//Calculating the factor scaling
- float factor = numberOfRequiredInstances / clusterInstanceContext.getMinMembers();
+ float factor = numberOfRequiredInstances / clusterInstanceContext.getMinInstanceCount();
delegator.delegateScalingDependencyNotification(clusterId, clusterInstanceContext.getId(), factor);
while(count != additionalInstances){
@@ -146,7 +146,7 @@ dialect "mvel"
}
} else if(scaleDown){
- float factor = numberOfRequiredInstances / clusterInstanceContext.getMinMembers();
+ float factor = numberOfRequiredInstances / clusterInstanceContext.getMinInstanceCount();
delegator.delegateScalingDependencyNotification(clusterId, clusterInstanceContext.getNetworkPartitionId(), factor);
log.debug("[scale-down] Decided to Scale down [cluster] " + clusterId);
[4/6] stratos git commit: fixing min rule issue
Posted by re...@apache.org.
fixing min rule issue
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/853e1496
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/853e1496
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/853e1496
Branch: refs/heads/master
Commit: 853e149602d124fc8482e081ba6f889739b25a44
Parents: ad400d9
Author: reka <rt...@gmail.com>
Authored: Thu Dec 4 17:38:41 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Thu Dec 4 17:38:41 2014 +0530
----------------------------------------------------------------------
.../context/cluster/ClusterInstanceContext.java | 32 +--
.../context/cluster/VMClusterContext.java | 31 +--
.../partition/ClusterLevelPartitionContext.java | 201 +++++++++----------
.../context/partition/PartitionContext.java | 9 +-
.../AutoscalerTopologyEventReceiver.java | 2 +
.../monitor/cluster/VMClusterMonitor.java | 131 ++++++------
6 files changed, 177 insertions(+), 229 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/853e1496/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterInstanceContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterInstanceContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterInstanceContext.java
index a6fe42a..509ccfe 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterInstanceContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterInstanceContext.java
@@ -25,11 +25,9 @@ import org.apache.stratos.autoscaler.context.partition.ClusterLevelPartitionCont
import org.apache.stratos.autoscaler.pojo.policy.autoscale.LoadAverage;
import org.apache.stratos.autoscaler.pojo.policy.autoscale.MemoryConsumption;
import org.apache.stratos.autoscaler.pojo.policy.autoscale.RequestsInFlight;
-import org.apache.stratos.autoscaler.pojo.policy.deployment.partition.network.ChildLevelPartition;
import org.apache.stratos.messaging.domain.topology.Member;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.List;
/*
@@ -62,8 +60,6 @@ public class ClusterInstanceContext extends InstanceContext {
private int minInstanceCount = 0, maxInstanceCount = 0;
private int requiredInstanceCountBasedOnStats;
private int requiredInstanceCountBasedOnDependencies;
- private int minMembers;
- private int maxMembers;
//details required for partition selection algorithms
private int currentPartitionIndex;
@@ -74,14 +70,14 @@ public class ClusterInstanceContext extends InstanceContext {
super(clusterInstanceId);
this.networkPartitionId = networkPartitionId;
- this.setMinMembers(min);
+ this.minInstanceCount = min;
+ this.maxInstanceCount = max;
partitionCtxts = new ArrayList<ClusterLevelPartitionContext>();
this.partitionAlgorithm = partitionAlgo;
//partitionCtxts = new HashMap<String, ClusterLevelPartitionContext>();
requestsInFlight = new RequestsInFlight();
loadAverage = new LoadAverage();
memoryConsumption = new MemoryConsumption();
- maxInstanceCount = max;
requiredInstanceCountBasedOnStats = minInstanceCount;
requiredInstanceCountBasedOnDependencies = minInstanceCount;
@@ -141,10 +137,11 @@ public class ClusterInstanceContext extends InstanceContext {
}
return null;
}
- public int getNonTerminatedMemberCount(){
+
+ public int getNonTerminatedMemberCount() {
int nonTerminatedMemberCount = 0;
- for(ClusterLevelPartitionContext partitionContext : partitionCtxts){
+ for (ClusterLevelPartitionContext partitionContext : partitionCtxts) {
nonTerminatedMemberCount += partitionContext.getNonTerminatedMemberCount();
}
@@ -191,7 +188,7 @@ public class ClusterInstanceContext extends InstanceContext {
if (log.isDebugEnabled()) {
log.debug(String.format("Average Requesets Served Per Instance stats are reset, ready to do scale check " +
- "[network partition] %s" , this.id));
+ "[network partition] %s", this.id));
}
}
@@ -437,23 +434,6 @@ public class ClusterInstanceContext extends InstanceContext {
this.requiredInstanceCountBasedOnDependencies = requiredInstanceCountBasedOnDependencies;
}
-
- public int getMinMembers() {
- return minMembers;
- }
-
- public int getMaxMembers() {
- return maxMembers;
- }
-
- public void setMaxMembers(int maxMembers) {
- this.maxMembers = maxMembers;
- }
-
- public void setMinMembers(int minMembers) {
- this.minMembers = minMembers;
- }
-
public String getNetworkPartitionId() {
return networkPartitionId;
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/853e1496/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMClusterContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMClusterContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMClusterContext.java
index f5cdb32..2cdef55 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMClusterContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMClusterContext.java
@@ -208,14 +208,6 @@ public class VMClusterContext extends AbstractClusterContext {
//Fill cluster instance context with child level partitions
for (ChildLevelPartition childLevelPartition : networkPartition.getChildLevelPartitions()) {
addPartition(clusterInstance, cluster, clusterLevelNetworkPartitionContext, childLevelPartition);
- if (log.isInfoEnabled()) {
- log.info(String.format("Partition context has been added: [partition] %s",
- childLevelPartition.getPartitionId()));
- }
- }
- if (log.isInfoEnabled()) {
- log.info(String.format("Network partition context has been added: " +
- "[network partition] %s", clusterLevelNetworkPartitionContext.getId()));
}
return clusterLevelNetworkPartitionContext;
}
@@ -226,9 +218,6 @@ public class VMClusterContext extends AbstractClusterContext {
ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext,
ChildLevelPartition childLevelPartition)
throws PolicyValidationException, PartitionValidationException {
- //Getting the associated network partition
- /* ChildLevelNetworkPartition networkPartition = deploymentPolicy.
- getChildLevelNetworkPartition(clusterInstance.getNetworkPartitionId());*/
if (clusterLevelNetworkPartitionContext == null) {
String msg =
"Network Partition is null in deployment policy: [policy-name]: " +
@@ -240,7 +229,7 @@ public class VMClusterContext extends AbstractClusterContext {
String nPartitionId = clusterLevelNetworkPartitionContext.getId();
//Getting the associated partition
- if (clusterInstance.getPartitionId() == null || childLevelPartition == null) {
+ if (clusterInstance.getPartitionId() == null && childLevelPartition == null) {
String msg =
"[Partition] " + clusterInstance.getPartitionId() + " for [networkPartition] " +
clusterInstance.getNetworkPartitionId() + "is null " +
@@ -249,13 +238,6 @@ public class VMClusterContext extends AbstractClusterContext {
throw new PolicyValidationException(msg);
}
- /*//Creating cluster level network partitionContext, if not exist
- if (clusterLevelNetworkPartitionContext == null) {
- clusterLevelNetworkPartitionContext =
- new ClusterLevelNetworkPartitionContext(clusterInstance.getNetworkPartitionId()
- , networkPartition.getPartitionAlgo(), networkPartition.getMin());
- }*/
-
ClusterInstanceContext clusterInstanceContext = clusterLevelNetworkPartitionContext.
getClusterInstanceContext(clusterInstance.getInstanceId());
int maxInstances = 2;
@@ -306,13 +288,20 @@ public class VMClusterContext extends AbstractClusterContext {
//adding it to the monitors context
clusterInstanceContext.addPartitionCtxt(clusterLevelPartitionContext);
- clusterLevelNetworkPartitionContext.addClusterInstanceContext(clusterInstanceContext);
-
if (log.isInfoEnabled()) {
log.info(String.format("Partition context has been added: [partition] %s",
clusterLevelPartitionContext.getPartitionId()));
}
+ clusterLevelNetworkPartitionContext.addClusterInstanceContext(clusterInstanceContext);
+
+ if (log.isInfoEnabled()) {
+ log.info(String.format("Cluster Instance context has been added: " +
+ "[ClusterInstanceContext] %s", clusterInstanceContext.getId()));
+ }
+
+
+
return clusterLevelNetworkPartitionContext;
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/853e1496/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java
index 850a54b..4594e58 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java
@@ -22,52 +22,46 @@ import org.apache.commons.configuration.XMLConfiguration;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.stratos.autoscaler.context.member.MemberStatsContext;
-import org.apache.stratos.autoscaler.pojo.policy.deployment.partition.network.ChildLevelPartition;
import org.apache.stratos.autoscaler.util.ConfUtil;
import org.apache.stratos.cloud.controller.stub.domain.MemberContext;
+import org.apache.stratos.cloud.controller.stub.domain.Partition;
+import org.apache.stratos.common.constants.StratosConstants;
import java.io.Serializable;
import java.util.*;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
-import org.apache.stratos.cloud.controller.stub.domain.Partition;
-import org.apache.stratos.common.constants.StratosConstants;
-
/**
* This is an object that inserted to the rules engine.
* Holds information about a partition.
- *
- *
*/
-public class ClusterLevelPartitionContext extends PartitionContext implements Serializable{
+public class ClusterLevelPartitionContext extends PartitionContext implements Serializable {
- private static final long serialVersionUID = -2920388667345980487L;
- private static final Log log = LogFactory.getLog(ClusterLevelPartitionContext.class);
+ private static final long serialVersionUID = -2920388667345980487L;
+ private static final Log log = LogFactory.getLog(ClusterLevelPartitionContext.class);
+ private final int PENDING_MEMBER_FAILURE_THRESHOLD = 5;
private String serviceName;
- private String networkPartitionId;
private int minimumMemberCount = 0;
private int pendingMembersFailureCount = 0;
- private final int PENDING_MEMBER_FAILURE_THRESHOLD = 5;
-
// properties
private Properties properties;
-
+
// 15 mints as the default
private long pendingMemberExpiryTime = 900000;
// pending members
private List<MemberContext> pendingMembers;
-
+
// 1 day as default
- private long obsoltedMemberExpiryTime = 1*24*60*60*1000;
+ private long obsoltedMemberExpiryTime = 1 * 24 * 60 * 60 * 1000;
// 30 mints as default
private long terminationPendingMemberExpiryTime = 1800000;
// members to be terminated
private Map<String, MemberContext> obsoletedMembers;
-
+
// active members
private List<MemberContext> activeMembers;
@@ -87,10 +81,10 @@ public class ClusterLevelPartitionContext extends PartitionContext implements Se
this.terminationPendingMembers = new ArrayList<MemberContext>();
this.pendingMembers = new ArrayList<MemberContext>();
}
-
+
public ClusterLevelPartitionContext(int max, Partition partition, String networkPartitionId) {
- super(max,partition, networkPartitionId);
+ super(max, partition, networkPartitionId);
this.pendingMembers = new ArrayList<MemberContext>();
this.activeMembers = new ArrayList<MemberContext>();
this.terminationPendingMembers = new ArrayList<MemberContext>();
@@ -103,8 +97,8 @@ public class ClusterLevelPartitionContext extends PartitionContext implements Se
pendingMemberExpiryTime = conf.getLong(StratosConstants.PENDING_VM_MEMBER_EXPIRY_TIMEOUT, 900000);
obsoltedMemberExpiryTime = conf.getLong(StratosConstants.OBSOLETED_VM_MEMBER_EXPIRY_TIMEOUT, 86400000);
if (log.isDebugEnabled()) {
- log.debug("Member expiry time is set to: " + pendingMemberExpiryTime);
- log.debug("Member obsoleted expiry time is set to: " + obsoltedMemberExpiryTime);
+ log.debug("Member expiry time is set to: " + pendingMemberExpiryTime);
+ log.debug("Member obsoleted expiry time is set to: " + obsoltedMemberExpiryTime);
}
Thread th = new Thread(new PendingMemberWatcher(this));
@@ -118,22 +112,18 @@ public class ClusterLevelPartitionContext extends PartitionContext implements Se
public long getTerminationPendingStartedTimeOfMember(String memberId) {
return terminationPendingStartedTime.get(memberId);
}
-
+
public List<MemberContext> getPendingMembers() {
return pendingMembers;
}
-
+
public void setPendingMembers(List<MemberContext> pendingMembers) {
this.pendingMembers = pendingMembers;
}
-
+
public int getActiveMemberCount() {
return activeMembers.size();
}
-
- public void setActiveMembers(List<MemberContext> activeMembers) {
- this.activeMembers = activeMembers;
- }
public int getMinimumMemberCount() {
return minimumMemberCount;
@@ -146,9 +136,9 @@ public class ClusterLevelPartitionContext extends PartitionContext implements Se
public void addPendingMember(MemberContext ctxt) {
this.pendingMembers.add(ctxt);
}
-
+
public boolean removePendingMember(String id) {
- if (id == null) {
+ if (id == null) {
return false;
}
synchronized (pendingMembers) {
@@ -161,10 +151,10 @@ public class ClusterLevelPartitionContext extends PartitionContext implements Se
}
}
-
- return false;
+
+ return false;
}
-
+
public void movePendingMemberToActiveMembers(String memberId) {
if (memberId == null) {
return;
@@ -318,11 +308,11 @@ public class ClusterLevelPartitionContext extends PartitionContext implements Se
return null;
}
-
+
public void addActiveMember(MemberContext ctxt) {
this.activeMembers.add(ctxt);
}
-
+
public void removeActiveMember(MemberContext ctxt) {
this.activeMembers.remove(ctxt);
}
@@ -340,24 +330,24 @@ public class ClusterLevelPartitionContext extends PartitionContext implements Se
}
return terminationPendingMemberAvailable;
}
-
+
public long getObsoltedMemberExpiryTime() {
- return obsoltedMemberExpiryTime;
+ return obsoltedMemberExpiryTime;
}
-
+
public void setObsoltedMemberExpiryTime(long obsoltedMemberExpiryTime) {
- this.obsoltedMemberExpiryTime = obsoltedMemberExpiryTime;
+ this.obsoltedMemberExpiryTime = obsoltedMemberExpiryTime;
}
-
+
public void addObsoleteMember(MemberContext ctxt) {
this.obsoletedMembers.put(ctxt.getMemberId(), ctxt);
}
-
+
public boolean removeObsoleteMember(String memberId) {
- if(this.obsoletedMembers.remove(memberId) == null) {
- return false;
- }
- return true;
+ if (this.obsoletedMembers.remove(memberId) == null) {
+ return false;
+ }
+ return true;
}
public long getPendingMemberExpiryTime() {
@@ -367,30 +357,21 @@ public class ClusterLevelPartitionContext extends PartitionContext implements Se
public void setPendingMemberExpiryTime(long pendingMemberExpiryTime) {
this.pendingMemberExpiryTime = pendingMemberExpiryTime;
}
-
+
public Map<String, MemberContext> getObsoletedMembers() {
return obsoletedMembers;
}
-
+
public void setObsoletedMembers(Map<String, MemberContext> obsoletedMembers) {
this.obsoletedMembers = obsoletedMembers;
}
- public String getNetworkPartitionId() {
- return networkPartitionId;
- }
-
- public void setNetworkPartitionId(String networkPartitionId) {
- this.networkPartitionId = networkPartitionId;
- }
-
@Override
public int getActiveInstanceCount() {
-
+
return getNonTerminatedMemberCount();
}
-
public Map<String, MemberStatsContext> getMemberStatsContexts() {
return memberStatsContexts;
}
@@ -411,15 +392,14 @@ public class ClusterLevelPartitionContext extends PartitionContext implements Se
return this.memberStatsContexts.get(id);
}
-// public boolean memberExist(String memberId) {
-// return memberStatsContexts.containsKey(memberId);
-// }
-
-
public Properties getProperties() {
return properties;
}
+// public boolean memberExist(String memberId) {
+// return memberStatsContexts.containsKey(memberId);
+// }
+
public void setProperties(Properties properties) {
this.properties = properties;
}
@@ -448,18 +428,22 @@ public class ClusterLevelPartitionContext extends PartitionContext implements Se
public int getNonTerminatedMemberCount() {
return activeMembers.size() + pendingMembers.size();
}
-
+
public List<MemberContext> getActiveMembers() {
- return activeMembers;
- }
+ return activeMembers;
+ }
- public boolean removeActiveMemberById(String memberId) {
+ public void setActiveMembers(List<MemberContext> activeMembers) {
+ this.activeMembers = activeMembers;
+ }
+
+ public boolean removeActiveMemberById(String memberId) {
boolean removeActiveMember = false;
synchronized (activeMembers) {
Iterator<MemberContext> iterator = activeMembers.listIterator();
while (iterator.hasNext()) {
MemberContext memberContext = iterator.next();
- if(memberId.equals(memberContext.getMemberId())){
+ if (memberId.equals(memberContext.getMemberId())) {
iterator.remove();
removeActiveMember = true;
@@ -472,47 +456,47 @@ public class ClusterLevelPartitionContext extends PartitionContext implements Se
public boolean activeMemberExist(String memberId) {
- for (MemberContext memberContext: activeMembers) {
- if(memberId.equals(memberContext.getMemberId())){
+ for (MemberContext memberContext : activeMembers) {
+ if (memberId.equals(memberContext.getMemberId())) {
return true;
}
}
return false;
}
-
- public int getAllMemberForTerminationCount () {
- int count = activeMembers.size() + pendingMembers.size() + terminationPendingMembers.size();
- if (log.isDebugEnabled()) {
- log.debug("PartitionContext:getAllMemberForTerminationCount:size:" + count);
- }
- return count;
+
+ public int getAllMemberForTerminationCount() {
+ int count = activeMembers.size() + pendingMembers.size() + terminationPendingMembers.size();
+ if (log.isDebugEnabled()) {
+ log.debug("PartitionContext:getAllMemberForTerminationCount:size:" + count);
+ }
+ return count;
}
-
+
// Map<String, MemberStatsContext> getMemberStatsContexts().keySet()
- public Set<String> getAllMemberForTermination () {
-
- List<MemberContext> merged = new ArrayList<MemberContext>();
-
-
- merged.addAll(activeMembers);
- merged.addAll(pendingMembers);
- merged.addAll(terminationPendingMembers);
-
- Set<String> results = new HashSet<String>(merged.size());
-
- for (MemberContext ctx: merged) {
- results.add(ctx.getMemberId());
- }
-
-
- if (log.isDebugEnabled()) {
- log.debug("PartitionContext:getAllMemberForTermination:size:" + results.size());
- }
-
- //MemberContext x = new MemberContext();
- //x.getMemberId()
-
- return results;
+ public Set<String> getAllMemberForTermination() {
+
+ List<MemberContext> merged = new ArrayList<MemberContext>();
+
+
+ merged.addAll(activeMembers);
+ merged.addAll(pendingMembers);
+ merged.addAll(terminationPendingMembers);
+
+ Set<String> results = new HashSet<String>(merged.size());
+
+ for (MemberContext ctx : merged) {
+ results.add(ctx.getMemberId());
+ }
+
+
+ if (log.isDebugEnabled()) {
+ log.debug("PartitionContext:getAllMemberForTermination:size:" + results.size());
+ }
+
+ //MemberContext x = new MemberContext();
+ //x.getMemberId()
+
+ return results;
}
public void movePendingTerminationMemberToObsoleteMembers(String memberId) {
@@ -607,10 +591,10 @@ public class ClusterLevelPartitionContext extends PartitionContext implements Se
while (true) {
long expiryTime = ctxt.getPendingMemberExpiryTime();
List<MemberContext> pendingMembers = ctxt.getPendingMembers();
-
+
synchronized (pendingMembers) {
Iterator<MemberContext> iterator = pendingMembers.listIterator();
- while ( iterator.hasNext()) {
+ while (iterator.hasNext()) {
MemberContext pendingMember = iterator.next();
if (pendingMember == null) {
@@ -622,11 +606,11 @@ public class ClusterLevelPartitionContext extends PartitionContext implements Se
iterator.remove();
log.info("Pending state of member: " + pendingMember.getMemberId() +
- " is expired. " + "Adding as an obsoleted member.");
+ " is expired. " + "Adding as an obsoleted member.");
// member should be terminated
ctxt.addObsoleteMember(pendingMember);
pendingMembersFailureCount++;
- if( pendingMembersFailureCount > PENDING_MEMBER_FAILURE_THRESHOLD){
+ if (pendingMembersFailureCount > PENDING_MEMBER_FAILURE_THRESHOLD) {
setPendingMemberExpiryTime(expiryTime * 2);//Doubles the expiry time after the threshold of failure exceeded
//TODO Implement an alerting system: STRATOS-369
}
@@ -642,8 +626,8 @@ public class ClusterLevelPartitionContext extends PartitionContext implements Se
}
}
- }
-
+ }
+
private class ObsoletedMemberWatcher implements Runnable {
private ClusterLevelPartitionContext ctxt;
@@ -698,7 +682,7 @@ public class ClusterLevelPartitionContext extends PartitionContext implements Se
while (iterator.hasNext()) {
MemberContext terminationPendingMember = iterator.next();
- if (terminationPendingMember == null){
+ if (terminationPendingMember == null) {
continue;
}
long terminationPendingTime = System.currentTimeMillis()
@@ -712,7 +696,8 @@ public class ClusterLevelPartitionContext extends PartitionContext implements Se
try {
// TODO find a constant
Thread.sleep(15000);
- } catch (InterruptedException ignore) {}
+ } catch (InterruptedException ignore) {
+ }
}
}
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/853e1496/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/PartitionContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/PartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/PartitionContext.java
index db4f2cb..ad6174f 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/PartitionContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/PartitionContext.java
@@ -20,19 +20,17 @@ package org.apache.stratos.autoscaler.context.partition;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.autoscaler.pojo.policy.deployment.partition.network.ChildLevelPartition;
import org.apache.stratos.cloud.controller.stub.domain.Partition;
import java.io.Serializable;
-import java.util.*;
+import java.util.Properties;
+
/**
* This is an object that inserted to the rules engine.
* Holds information about a partition.
- *
- *
*/
-public abstract class PartitionContext implements Serializable{
+public abstract class PartitionContext implements Serializable {
private static final long serialVersionUID = -2920388667345980487L;
private static final Log log = LogFactory.getLog(ClusterLevelPartitionContext.class);
@@ -80,6 +78,7 @@ public abstract class PartitionContext implements Serializable{
}
public abstract int getActiveInstanceCount();
+
public int getMax() {
return max;
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/853e1496/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java
index 6251d18..50f2430 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java
@@ -456,6 +456,8 @@ public class AutoscalerTopologyEventReceiver {
cluster.getClusterId(),
clusterInstance.getInstanceId());
instance.setParentId(clusterInstance.getParentId());
+ instance.setNetworkPartitionId(clusterInstance.getNetworkPartitionId());
+ instance.setPartitionId(clusterInstance.getPartitionId());
instance.setStatus(clusterInstance.getStatus());
clusterMonitor.addInstance(instance);
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/853e1496/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
index edea5cc..7e86601 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
@@ -194,94 +194,87 @@ public class VMClusterMonitor extends AbstractClusterMonitor {
if (log.isDebugEnabled()) {
log.debug("Monitor is running for [cluster] : " + getClusterId());
}
-
-
- // store primary members in the cluster instance context
-
// store primary members in the cluster instance context
List<String> primaryMemberListInClusterInstance = new ArrayList<String>();
- //FIXME to check the status of the instance
- if (true) {
+ for (ClusterLevelPartitionContext partitionContext : instanceContext.getPartitionCtxts()) {
- for (ClusterLevelPartitionContext partitionContext : instanceContext.getPartitionCtxts()) {
-
- // get active primary members in this cluster instance context
- for (MemberContext memberContext : partitionContext.getActiveMembers()) {
- if (isPrimaryMember(memberContext)) {
- primaryMemberListInClusterInstance.add(memberContext.getMemberId());
- }
+ // get active primary members in this cluster instance context
+ for (MemberContext memberContext : partitionContext.getActiveMembers()) {
+ if (isPrimaryMember(memberContext)) {
+ primaryMemberListInClusterInstance.add(memberContext.getMemberId());
}
+ }
- // get pending primary members in this cluster instance context
- for (MemberContext memberContext : partitionContext.getPendingMembers()) {
- if (isPrimaryMember(memberContext)) {
- primaryMemberListInClusterInstance.add(memberContext.getMemberId());
- }
+ // get pending primary members in this cluster instance context
+ for (MemberContext memberContext : partitionContext.getPendingMembers()) {
+ if (isPrimaryMember(memberContext)) {
+ primaryMemberListInClusterInstance.add(memberContext.getMemberId());
}
}
+ }
- getMinCheckKnowledgeSession().setGlobal("clusterId", getClusterId());
- getMinCheckKnowledgeSession().setGlobal("isPrimary", hasPrimary);
- getMinCheckKnowledgeSession().setGlobal("algorithmName",
- instanceContext.getPartitionAlgorithm());
+ getMinCheckKnowledgeSession().setGlobal("clusterId", getClusterId());
+ getMinCheckKnowledgeSession().setGlobal("isPrimary", hasPrimary);
+ getMinCheckKnowledgeSession().setGlobal("algorithmName",
+ instanceContext.getPartitionAlgorithm());
- if (log.isDebugEnabled()) {
- log.debug(String.format("Running minimum check for cluster instance %s ",
- instanceContext.getId()));
- }
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Running minimum check for cluster instance %s ",
+ instanceContext.getId()));
+ }
- minCheckFactHandle = AutoscalerRuleEvaluator.evaluate(getMinCheckKnowledgeSession(),
- minCheckFactHandle, instanceContext);
+ minCheckFactHandle = AutoscalerRuleEvaluator.evaluate(getMinCheckKnowledgeSession(),
+ minCheckFactHandle, instanceContext);
- obsoleteCheckFactHandle = AutoscalerRuleEvaluator.evaluate(
- getObsoleteCheckKnowledgeSession(), obsoleteCheckFactHandle, instanceContext);
+ obsoleteCheckFactHandle = AutoscalerRuleEvaluator.evaluate(
+ getObsoleteCheckKnowledgeSession(), obsoleteCheckFactHandle, instanceContext);
- //checking the status of the cluster
- boolean rifReset = instanceContext.isRifReset();
- boolean memoryConsumptionReset = instanceContext.isMemoryConsumptionReset();
- boolean loadAverageReset = instanceContext.isLoadAverageReset();
+ //checking the status of the cluster
+ boolean rifReset = instanceContext.isRifReset();
+ boolean memoryConsumptionReset = instanceContext.isMemoryConsumptionReset();
+ boolean loadAverageReset = instanceContext.isLoadAverageReset();
+
+ if (log.isDebugEnabled()) {
+ log.debug("Execution point of scaling Rule, [Is rif Reset] : " + rifReset
+ + " [Is memoryConsumption Reset] : " + memoryConsumptionReset
+ + " [Is loadAverage Reset] : " + loadAverageReset);
+ }
+ if (rifReset || memoryConsumptionReset || loadAverageReset) {
- if (log.isDebugEnabled()) {
- log.debug("Execution point of scaling Rule, [Is rif Reset] : " + rifReset
- + " [Is memoryConsumption Reset] : " + memoryConsumptionReset
- + " [Is loadAverage Reset] : " + loadAverageReset);
- }
- if (rifReset || memoryConsumptionReset || loadAverageReset) {
-
-
- VMClusterContext vmClusterContext = (VMClusterContext) clusterContext;
-
- getScaleCheckKnowledgeSession().setGlobal("instance", instanceContext);
- getScaleCheckKnowledgeSession().setGlobal("clusterId", getClusterId());
- getScaleCheckKnowledgeSession().setGlobal("autoscalePolicy",
- vmClusterContext.getAutoscalePolicy());
- getScaleCheckKnowledgeSession().setGlobal("rifReset", rifReset);
- getScaleCheckKnowledgeSession().setGlobal("mcReset", memoryConsumptionReset);
- getScaleCheckKnowledgeSession().setGlobal("laReset", loadAverageReset);
- getScaleCheckKnowledgeSession().setGlobal("isPrimary", false);
- getScaleCheckKnowledgeSession().setGlobal("primaryMembers", primaryMemberListInClusterInstance);
- getMinCheckKnowledgeSession().setGlobal("algorithmName",
- instanceContext.getPartitionAlgorithm());
-
- if (log.isDebugEnabled()) {
- log.debug(String.format("Running scale check for [cluster instance context] %s ",
- instanceContext.getId()));
- log.debug(" Primary members : " + primaryMemberListInClusterInstance);
- }
- scaleCheckFactHandle = AutoscalerRuleEvaluator.evaluate(getScaleCheckKnowledgeSession()
- , scaleCheckFactHandle, instanceContext);
+ VMClusterContext vmClusterContext = (VMClusterContext) clusterContext;
- instanceContext.setRifReset(false);
- instanceContext.setMemoryConsumptionReset(false);
- instanceContext.setLoadAverageReset(false);
- } else if (log.isDebugEnabled()) {
- log.debug(String.format("Scale rule will not run since the LB statistics have not " +
- "received before this cycle for [cluster instance context] %s ",
+ getScaleCheckKnowledgeSession().setGlobal("instance", instanceContext);
+ getScaleCheckKnowledgeSession().setGlobal("clusterId", getClusterId());
+ getScaleCheckKnowledgeSession().setGlobal("autoscalePolicy",
+ vmClusterContext.getAutoscalePolicy());
+ getScaleCheckKnowledgeSession().setGlobal("rifReset", rifReset);
+ getScaleCheckKnowledgeSession().setGlobal("mcReset", memoryConsumptionReset);
+ getScaleCheckKnowledgeSession().setGlobal("laReset", loadAverageReset);
+ getScaleCheckKnowledgeSession().setGlobal("isPrimary", false);
+ getScaleCheckKnowledgeSession().setGlobal("primaryMembers", primaryMemberListInClusterInstance);
+ getMinCheckKnowledgeSession().setGlobal("algorithmName",
+ instanceContext.getPartitionAlgorithm());
+
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Running scale check for [cluster instance context] %s ",
instanceContext.getId()));
+ log.debug(" Primary members : " + primaryMemberListInClusterInstance);
}
+
+ scaleCheckFactHandle = AutoscalerRuleEvaluator.evaluate(getScaleCheckKnowledgeSession()
+ , scaleCheckFactHandle, instanceContext);
+
+ instanceContext.setRifReset(false);
+ instanceContext.setMemoryConsumptionReset(false);
+ instanceContext.setLoadAverageReset(false);
+ } else if (log.isDebugEnabled()) {
+ log.debug(String.format("Scale rule will not run since the LB statistics have not " +
+ "received before this cycle for [cluster instance context] %s ",
+ instanceContext.getId()));
}
+
}
};
monitoringRunnable.run();
[3/6] stratos git commit: adding status checking before monitoring
and fixing network partition issue
Posted by re...@apache.org.
adding status checking before monitoring and fixing network partition issue
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/ad400d98
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/ad400d98
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/ad400d98
Branch: refs/heads/master
Commit: ad400d984f9420acc1f3ed592b55cec1bf8b04df
Parents: 761b88f
Author: reka <rt...@gmail.com>
Authored: Thu Dec 4 17:05:41 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Thu Dec 4 17:05:41 2014 +0530
----------------------------------------------------------------------
.../context/cluster/ClusterInstanceContext.java | 13 +-
.../context/cluster/VMClusterContext.java | 20 +-
.../monitor/cluster/VMClusterMonitor.java | 186 +++++++++----------
3 files changed, 103 insertions(+), 116 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/ad400d98/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterInstanceContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterInstanceContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterInstanceContext.java
index bf6a051..a6fe42a 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterInstanceContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterInstanceContext.java
@@ -66,31 +66,22 @@ public class ClusterInstanceContext extends InstanceContext {
private int maxMembers;
//details required for partition selection algorithms
private int currentPartitionIndex;
- private ChildLevelPartition[] partitions;
private String networkPartitionId;
public ClusterInstanceContext(String clusterInstanceId, String partitionAlgo,
- ChildLevelPartition[] partitions,
- int min, String networkPartitionId) {
+ int min, int max, String networkPartitionId) {
super(clusterInstanceId);
this.networkPartitionId = networkPartitionId;
this.setMinMembers(min);
- if (partitions == null) {
- this.partitions = new ChildLevelPartition[0];
- } else {
- this.partitions = Arrays.copyOf(partitions, partitions.length);
- }
partitionCtxts = new ArrayList<ClusterLevelPartitionContext>();
this.partitionAlgorithm = partitionAlgo;
//partitionCtxts = new HashMap<String, ClusterLevelPartitionContext>();
requestsInFlight = new RequestsInFlight();
loadAverage = new LoadAverage();
memoryConsumption = new MemoryConsumption();
- for (ChildLevelPartition partition : partitions) {
- maxInstanceCount += partition.getMax();
- }
+ maxInstanceCount = max;
requiredInstanceCountBasedOnStats = minInstanceCount;
requiredInstanceCountBasedOnDependencies = minInstanceCount;
http://git-wip-us.apache.org/repos/asf/stratos/blob/ad400d98/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMClusterContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMClusterContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMClusterContext.java
index 2505cbe..f5cdb32 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMClusterContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMClusterContext.java
@@ -227,9 +227,9 @@ public class VMClusterContext extends AbstractClusterContext {
ChildLevelPartition childLevelPartition)
throws PolicyValidationException, PartitionValidationException {
//Getting the associated network partition
- ChildLevelNetworkPartition networkPartition = deploymentPolicy.
- getChildLevelNetworkPartition(clusterInstance.getNetworkPartitionId());
- if (networkPartition == null) {
+ /* ChildLevelNetworkPartition networkPartition = deploymentPolicy.
+ getChildLevelNetworkPartition(clusterInstance.getNetworkPartitionId());*/
+ if (clusterLevelNetworkPartitionContext == null) {
String msg =
"Network Partition is null in deployment policy: [policy-name]: " +
deploymentPolicy.getId();
@@ -237,6 +237,8 @@ public class VMClusterContext extends AbstractClusterContext {
throw new PolicyValidationException(msg);
}
+ String nPartitionId = clusterLevelNetworkPartitionContext.getId();
+
//Getting the associated partition
if (clusterInstance.getPartitionId() == null || childLevelPartition == null) {
String msg =
@@ -247,12 +249,12 @@ public class VMClusterContext extends AbstractClusterContext {
throw new PolicyValidationException(msg);
}
- //Creating cluster level network partitionContext, if not exist
+ /*//Creating cluster level network partitionContext, if not exist
if (clusterLevelNetworkPartitionContext == null) {
clusterLevelNetworkPartitionContext =
new ClusterLevelNetworkPartitionContext(clusterInstance.getNetworkPartitionId()
, networkPartition.getPartitionAlgo(), networkPartition.getMin());
- }
+ }*/
ClusterInstanceContext clusterInstanceContext = clusterLevelNetworkPartitionContext.
getClusterInstanceContext(clusterInstance.getInstanceId());
@@ -270,8 +272,8 @@ public class VMClusterContext extends AbstractClusterContext {
ApplicationHolder.releaseReadLock();
}
clusterInstanceContext = new ClusterInstanceContext(clusterInstance.getInstanceId(),
- networkPartition.getPartitionAlgo(),
- networkPartition.getChildLevelPartitions(), networkPartition.getMin(), networkPartition.getId());
+ clusterLevelNetworkPartitionContext.getPartitionAlgorithm(),
+ minInstances, maxInstances , nPartitionId);
}
String partitionId;
if(childLevelPartition != null) {
@@ -283,8 +285,8 @@ public class VMClusterContext extends AbstractClusterContext {
partitionId = clusterInstance.getPartitionId();
}
//Retrieving the actual partition from application
- Partition appPartition = deploymentPolicy.getApplicationLevelNetworkPartition(networkPartition.getId()).
- getPartition(partitionId);
+ Partition appPartition = deploymentPolicy.getApplicationLevelNetworkPartition(nPartitionId).
+ getPartition(partitionId);
org.apache.stratos.cloud.controller.stub.domain.Partition partition =
convertTOCCPartition(appPartition);
http://git-wip-us.apache.org/repos/asf/stratos/blob/ad400d98/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
index befe3cd..edea5cc 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
@@ -34,9 +34,9 @@ import org.apache.stratos.autoscaler.monitor.events.MonitorScalingEvent;
import org.apache.stratos.autoscaler.monitor.events.MonitorStatusEvent;
import org.apache.stratos.autoscaler.monitor.events.builder.MonitorStatusEventBuilder;
import org.apache.stratos.autoscaler.rule.AutoscalerRuleEvaluator;
-import org.apache.stratos.autoscaler.status.processor.cluster.ClusterStatusTerminatedProcessor;
import org.apache.stratos.autoscaler.status.processor.cluster.ClusterStatusActiveProcessor;
import org.apache.stratos.autoscaler.status.processor.cluster.ClusterStatusInActiveProcessor;
+import org.apache.stratos.autoscaler.status.processor.cluster.ClusterStatusTerminatedProcessor;
import org.apache.stratos.autoscaler.util.AutoScalerConstants;
import org.apache.stratos.autoscaler.util.AutoscalerUtil;
import org.apache.stratos.autoscaler.util.ConfUtil;
@@ -47,6 +47,7 @@ import org.apache.stratos.common.Property;
import org.apache.stratos.common.constants.StratosConstants;
import org.apache.stratos.messaging.domain.applications.ApplicationStatus;
import org.apache.stratos.messaging.domain.applications.GroupStatus;
+import org.apache.stratos.messaging.domain.instance.ClusterInstance;
import org.apache.stratos.messaging.domain.topology.Cluster;
import org.apache.stratos.messaging.domain.topology.ClusterStatus;
import org.apache.stratos.messaging.domain.topology.Member;
@@ -54,7 +55,6 @@ import org.apache.stratos.messaging.domain.topology.Service;
import org.apache.stratos.messaging.event.health.stat.*;
import org.apache.stratos.messaging.event.topology.*;
import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
-import org.drools.runtime.StatefulKnowledgeSession;
import java.util.*;
@@ -138,19 +138,10 @@ public class VMClusterMonitor extends AbstractClusterMonitor {
public void run() {
while (!isDestroyed()) {
try {
- /* TODO ***********if (((getStatus().getCode() <= ClusterStatus.Active.getCode()) ||
- (getStatus() == ClusterStatus.Inactive && !hasStartupDependents)) && !this.hasFaultyMember
- && !stop) {*/
if (log.isDebugEnabled()) {
log.debug("Cluster monitor is running.. " + this.toString());
}
monitor();
- /*} else {
- if (log.isDebugEnabled()) {
- log.debug("Cluster monitor is suspended as the cluster is in " +
- ClusterStatus.Inactive + " mode......");
- }
- }*/
} catch (Exception e) {
log.error("Cluster monitor: Monitor failed." + this.toString(), e);
}
@@ -189,109 +180,112 @@ public class VMClusterMonitor extends AbstractClusterMonitor {
final Collection<ClusterInstanceContext> clusterInstanceContexts = networkPartitionContext.
getClusterInstanceContextMap().values();
- for (final ClusterInstanceContext instanceContext : clusterInstanceContexts ) {
- /* TODO ***********if (((getStatus().getCode() <= ClusterStatus.Active.getCode()) ||
- (getStatus() == ClusterStatus.Inactive && !hasStartupDependents)) && !this.hasFaultyMember
- && !stop) {*/
+ for (final ClusterInstanceContext instanceContext : clusterInstanceContexts) {
+ ClusterInstance instance = (ClusterInstance) this.instanceIdToInstanceMap.
+ get(instanceContext.getId());
+ if ((instance.getStatus().getCode() <= ClusterStatus.Active.getCode()) ||
+ (getStatus() == ClusterStatus.Inactive && !hasStartupDependents) && !this.hasFaultyMember
+ && !stop) {
- Runnable monitoringRunnable = new Runnable() {
- @Override
- public void run() {
+ Runnable monitoringRunnable = new Runnable() {
+ @Override
+ public void run() {
- if (log.isDebugEnabled()) {
- log.debug("Monitor is running for [cluster] : " + getClusterId());
- }
+ if (log.isDebugEnabled()) {
+ log.debug("Monitor is running for [cluster] : " + getClusterId());
+ }
- // store primary members in the cluster instance context
+ // store primary members in the cluster instance context
- // store primary members in the cluster instance context
- List<String> primaryMemberListInClusterInstance = new ArrayList<String>();
+ // store primary members in the cluster instance context
+ List<String> primaryMemberListInClusterInstance = new ArrayList<String>();
- //FIXME to check the status of the instance
- if (true) {
+ //FIXME to check the status of the instance
+ if (true) {
- for (ClusterLevelPartitionContext partitionContext : instanceContext.getPartitionCtxts()) {
+ for (ClusterLevelPartitionContext partitionContext : instanceContext.getPartitionCtxts()) {
- // get active primary members in this cluster instance context
- for (MemberContext memberContext : partitionContext.getActiveMembers()) {
- if (isPrimaryMember(memberContext)) {
- primaryMemberListInClusterInstance.add(memberContext.getMemberId());
- }
- }
+ // get active primary members in this cluster instance context
+ for (MemberContext memberContext : partitionContext.getActiveMembers()) {
+ if (isPrimaryMember(memberContext)) {
+ primaryMemberListInClusterInstance.add(memberContext.getMemberId());
+ }
+ }
- // get pending primary members in this cluster instance context
- for (MemberContext memberContext : partitionContext.getPendingMembers()) {
- if (isPrimaryMember(memberContext)) {
- primaryMemberListInClusterInstance.add(memberContext.getMemberId());
+ // get pending primary members in this cluster instance context
+ for (MemberContext memberContext : partitionContext.getPendingMembers()) {
+ if (isPrimaryMember(memberContext)) {
+ primaryMemberListInClusterInstance.add(memberContext.getMemberId());
+ }
+ }
}
- }
- }
-
- getMinCheckKnowledgeSession().setGlobal("clusterId", getClusterId());
- getMinCheckKnowledgeSession().setGlobal("isPrimary", hasPrimary);
- getMinCheckKnowledgeSession().setGlobal("algorithmName",
- instanceContext.getPartitionAlgorithm());
-
- if (log.isDebugEnabled()) {
- log.debug(String.format("Running minimum check for cluster instance %s ",
- instanceContext.getId()));
- }
-
- minCheckFactHandle = AutoscalerRuleEvaluator.evaluate(getMinCheckKnowledgeSession(),
- minCheckFactHandle, instanceContext);
- obsoleteCheckFactHandle = AutoscalerRuleEvaluator.evaluate(
- getObsoleteCheckKnowledgeSession(), obsoleteCheckFactHandle, instanceContext);
+ getMinCheckKnowledgeSession().setGlobal("clusterId", getClusterId());
+ getMinCheckKnowledgeSession().setGlobal("isPrimary", hasPrimary);
+ getMinCheckKnowledgeSession().setGlobal("algorithmName",
+ instanceContext.getPartitionAlgorithm());
- //checking the status of the cluster
- boolean rifReset = instanceContext.isRifReset();
- boolean memoryConsumptionReset = instanceContext.isMemoryConsumptionReset();
- boolean loadAverageReset = instanceContext.isLoadAverageReset();
-
- if (log.isDebugEnabled()) {
- log.debug("Execution point of scaling Rule, [Is rif Reset] : " + rifReset
- + " [Is memoryConsumption Reset] : " + memoryConsumptionReset
- + " [Is loadAverage Reset] : " + loadAverageReset);
- }
- if (rifReset || memoryConsumptionReset || loadAverageReset) {
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Running minimum check for cluster instance %s ",
+ instanceContext.getId()));
+ }
+ minCheckFactHandle = AutoscalerRuleEvaluator.evaluate(getMinCheckKnowledgeSession(),
+ minCheckFactHandle, instanceContext);
- VMClusterContext vmClusterContext = (VMClusterContext) clusterContext;
+ obsoleteCheckFactHandle = AutoscalerRuleEvaluator.evaluate(
+ getObsoleteCheckKnowledgeSession(), obsoleteCheckFactHandle, instanceContext);
- getScaleCheckKnowledgeSession().setGlobal("instance", instanceContext);
- getScaleCheckKnowledgeSession().setGlobal("clusterId", getClusterId());
- getScaleCheckKnowledgeSession().setGlobal("autoscalePolicy",
- vmClusterContext.getAutoscalePolicy());
- getScaleCheckKnowledgeSession().setGlobal("rifReset", rifReset);
- getScaleCheckKnowledgeSession().setGlobal("mcReset", memoryConsumptionReset);
- getScaleCheckKnowledgeSession().setGlobal("laReset", loadAverageReset);
- getScaleCheckKnowledgeSession().setGlobal("isPrimary", false);
- getScaleCheckKnowledgeSession().setGlobal("primaryMembers", primaryMemberListInClusterInstance);
- getMinCheckKnowledgeSession().setGlobal("algorithmName",
- instanceContext.getPartitionAlgorithm());
+ //checking the status of the cluster
+ boolean rifReset = instanceContext.isRifReset();
+ boolean memoryConsumptionReset = instanceContext.isMemoryConsumptionReset();
+ boolean loadAverageReset = instanceContext.isLoadAverageReset();
- if (log.isDebugEnabled()) {
- log.debug(String.format("Running scale check for [cluster instance context] %s ",
- instanceContext.getId()));
- log.debug(" Primary members : " + primaryMemberListInClusterInstance);
+ if (log.isDebugEnabled()) {
+ log.debug("Execution point of scaling Rule, [Is rif Reset] : " + rifReset
+ + " [Is memoryConsumption Reset] : " + memoryConsumptionReset
+ + " [Is loadAverage Reset] : " + loadAverageReset);
+ }
+ if (rifReset || memoryConsumptionReset || loadAverageReset) {
+
+
+ VMClusterContext vmClusterContext = (VMClusterContext) clusterContext;
+
+ getScaleCheckKnowledgeSession().setGlobal("instance", instanceContext);
+ getScaleCheckKnowledgeSession().setGlobal("clusterId", getClusterId());
+ getScaleCheckKnowledgeSession().setGlobal("autoscalePolicy",
+ vmClusterContext.getAutoscalePolicy());
+ getScaleCheckKnowledgeSession().setGlobal("rifReset", rifReset);
+ getScaleCheckKnowledgeSession().setGlobal("mcReset", memoryConsumptionReset);
+ getScaleCheckKnowledgeSession().setGlobal("laReset", loadAverageReset);
+ getScaleCheckKnowledgeSession().setGlobal("isPrimary", false);
+ getScaleCheckKnowledgeSession().setGlobal("primaryMembers", primaryMemberListInClusterInstance);
+ getMinCheckKnowledgeSession().setGlobal("algorithmName",
+ instanceContext.getPartitionAlgorithm());
+
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Running scale check for [cluster instance context] %s ",
+ instanceContext.getId()));
+ log.debug(" Primary members : " + primaryMemberListInClusterInstance);
+ }
+
+ scaleCheckFactHandle = AutoscalerRuleEvaluator.evaluate(getScaleCheckKnowledgeSession()
+ , scaleCheckFactHandle, instanceContext);
+
+ instanceContext.setRifReset(false);
+ instanceContext.setMemoryConsumptionReset(false);
+ instanceContext.setLoadAverageReset(false);
+ } else if (log.isDebugEnabled()) {
+ log.debug(String.format("Scale rule will not run since the LB statistics have not " +
+ "received before this cycle for [cluster instance context] %s ",
+ instanceContext.getId()));
+ }
}
-
- scaleCheckFactHandle = AutoscalerRuleEvaluator.evaluate(getScaleCheckKnowledgeSession()
- , scaleCheckFactHandle, instanceContext);
-
- instanceContext.setRifReset(false);
- instanceContext.setMemoryConsumptionReset(false);
- instanceContext.setLoadAverageReset(false);
- } else if (log.isDebugEnabled()) {
- log.debug(String.format("Scale rule will not run since the LB statistics have not " +
- "received before this cycle for [cluster instance context] %s ",
- instanceContext.getId()));
}
- }
- }
- };
- monitoringRunnable.run();
+ };
+ monitoringRunnable.run();
+ }
}
}
}
[5/6] stratos git commit: fixing log format issue
Posted by re...@apache.org.
fixing log format issue
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/ec3fd0fe
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/ec3fd0fe
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/ec3fd0fe
Branch: refs/heads/master
Commit: ec3fd0fe29517035a04397fba468bdbf012055b2
Parents: 853e149
Author: reka <rt...@gmail.com>
Authored: Thu Dec 4 17:44:33 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Thu Dec 4 17:44:33 2014 +0530
----------------------------------------------------------------------
.../apache/stratos/autoscaler/client/CloudControllerClient.java | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/ec3fd0fe/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/CloudControllerClient.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/CloudControllerClient.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/CloudControllerClient.java
index a8e275a..308e276 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/CloudControllerClient.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/CloudControllerClient.java
@@ -173,7 +173,8 @@ public class CloudControllerClient {
int minMemberCount) throws SpawningException {
try {
if (log.isInfoEnabled()) {
- log.info(String.format("Trying to spawn an instance via cloud controller: [cluster] %s [partition] %s [lb-cluster] %s [network-partition-id] %s",
+ log.info(String.format("Trying to spawn an instance via cloud controller: " +
+ "[cluster] %s [partition] %s [network-partition-id] %s",
clusterId, partition.getId(), networkPartitionId));
}
[2/6] stratos git commit: adding restart support for cluster monitor
and app monitor
Posted by re...@apache.org.
adding restart support for cluster monitor and app monitor
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/761b88f8
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/761b88f8
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/761b88f8
Branch: refs/heads/master
Commit: 761b88f8940b6b89ade1c926489bab73730ec6ed
Parents: c7c3ec6
Author: reka <rt...@gmail.com>
Authored: Thu Dec 4 16:46:04 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Thu Dec 4 16:48:23 2014 +0530
----------------------------------------------------------------------
.../context/cluster/ClusterContextFactory.java | 8 +-
.../context/cluster/VMClusterContext.java | 152 +++++++++----------
.../partition/ClusterLevelPartitionContext.java | 8 +-
.../partition/GroupLevelPartitionContext.java | 4 +-
.../context/partition/PartitionContext.java | 13 +-
.../autoscaler/monitor/MonitorFactory.java | 84 +++++-----
.../monitor/cluster/VMClusterMonitor.java | 6 +
.../monitor/component/ApplicationMonitor.java | 19 +--
8 files changed, 140 insertions(+), 154 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/761b88f8/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterContextFactory.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterContextFactory.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterContextFactory.java
index c92ee73..68ed6a4 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterContextFactory.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterContextFactory.java
@@ -63,12 +63,8 @@ public class ClusterContextFactory {
log.debug("Autoscaler policy name: " + autoscalePolicyName);
}
DeploymentPolicy deploymentPolicy;
- ApplicationHolder.acquireReadLock();
- try {
- deploymentPolicy = PolicyManager.getInstance().getDeploymentPolicyByApplication(cluster.getAppId());
- } finally {
- ApplicationHolder.releaseReadLock();
- }
+ deploymentPolicy = PolicyManager.getInstance().
+ getDeploymentPolicyByApplication(cluster.getAppId());
return new VMClusterContext(cluster.getClusterId(), cluster.getServiceName(), autoscalePolicy,
deploymentPolicy);
http://git-wip-us.apache.org/repos/asf/stratos/blob/761b88f8/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMClusterContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMClusterContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMClusterContext.java
index 9944f94..2505cbe 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMClusterContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMClusterContext.java
@@ -138,16 +138,18 @@ public class VMClusterContext extends AbstractClusterContext {
networkPartition.getPartitionAlgo(), 0);
} else {
//Parent should have the partition specified
- networkPartitionContext = new ClusterLevelNetworkPartitionContext(clusterInstance.getNetworkPartitionId(),
- null, 0);
+ networkPartitionContext = new ClusterLevelNetworkPartitionContext(
+ clusterInstance.getNetworkPartitionId(),
+ null,
+ 0);
}
}
if (clusterInstance.getPartitionId() != null) {
//Need to add partition Context based on the given one from the parent
- networkPartitionContext = addPartition(clusterInstance, cluster, networkPartitionContext);
-
+ networkPartitionContext = addPartition(clusterInstance, cluster,
+ networkPartitionContext, null);
} else {
networkPartitionContext = parseDeploymentPolicy(clusterInstance, cluster,
policy, networkPartitionContext);
@@ -165,7 +167,7 @@ public class VMClusterContext extends AbstractClusterContext {
}
private ClusterLevelNetworkPartitionContext parseDeploymentPolicy(
- ClusterInstance instance,
+ ClusterInstance clusterInstance,
Cluster cluster,
ChildPolicy childPolicy,
ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext)
@@ -192,65 +194,25 @@ public class VMClusterContext extends AbstractClusterContext {
throw new PolicyValidationException(msg);
}
- for(ChildLevelPartition childLevelPartition : childLevelPartitions) {
- Partition partition = this.deploymentPolicy.
- getApplicationLevelNetworkPartition(clusterLevelNetworkPartitionContext.getId()).
- getPartition(childLevelPartition.getPartitionId());
- CloudControllerClient.getInstance().validatePartition(convertTOCCPartition(partition));
- }
-
-
+ //Retrieving the ChildLevelNetworkPartition and create NP Context
ChildLevelNetworkPartition networkPartition;
- networkPartition = childPolicy.getChildLevelNetworkPartition(instance.getNetworkPartitionId());
- String networkPartitionId = networkPartition.getId();
-
+ networkPartition = childPolicy.
+ getChildLevelNetworkPartition(clusterInstance.getNetworkPartitionId());
if (clusterLevelNetworkPartitionContext == null) {
clusterLevelNetworkPartitionContext = new ClusterLevelNetworkPartitionContext(
- networkPartitionId, networkPartition.getPartitionAlgo(), networkPartition.getMin());
- }
- ClusterInstanceContext clusterInstanceContext = clusterLevelNetworkPartitionContext.
- getClusterInstanceContext(instance.getInstanceId());
- if (clusterInstanceContext == null) {
- clusterInstanceContext = new ClusterInstanceContext(instance.getInstanceId(),
- networkPartition.getPartitionAlgo(),
- networkPartition.getChildLevelPartitions(), 2,
- networkPartitionId);
- ApplicationHolder.acquireReadLock();
- try {
- Application application = ApplicationHolder.getApplications().
- getApplication(cluster.getAppId());
- ClusterDataHolder dataHolder = application.
- getClusterData(AutoscalerUtil.getAliasFromClusterId(clusterId));
- clusterInstanceContext.setMinMembers(2); //dataHolder.getMinInstances());
- clusterInstanceContext.setMaxMembers(2); //dataHolder.getMaxInstances());
- } finally {
- ApplicationHolder.releaseReadLock();
- }
+ networkPartition.getId(),
+ networkPartition.getPartitionAlgo(),
+ networkPartition.getMin());
}
- for (ChildLevelPartition partition : networkPartition.getChildLevelPartitions()) {
- //FIXME to have correct member expirery time
- ClusterLevelPartitionContext clusterLevelPartitionContext =
- new ClusterLevelPartitionContext(0);
- clusterLevelPartitionContext.setServiceName(cluster.getServiceName());
- clusterLevelPartitionContext.setProperties(cluster.getProperties());
- clusterLevelPartitionContext.setNetworkPartitionId(networkPartition.getId());
- //add members to partition Context
- Partition partition1 = this.deploymentPolicy.
- getApplicationLevelNetworkPartition(clusterLevelNetworkPartitionContext.getId()).
- getPartition(partition.getPartitionId());
-
- addMembersFromTopology(cluster, partition1, clusterLevelPartitionContext);
-
- clusterInstanceContext.addPartitionCtxt(clusterLevelPartitionContext);
+ //Fill cluster instance context with child level partitions
+ for (ChildLevelPartition childLevelPartition : networkPartition.getChildLevelPartitions()) {
+ addPartition(clusterInstance, cluster, clusterLevelNetworkPartitionContext, childLevelPartition);
if (log.isInfoEnabled()) {
log.info(String.format("Partition context has been added: [partition] %s",
- clusterLevelPartitionContext.getPartitionId()));
+ childLevelPartition.getPartitionId()));
}
}
-
- clusterLevelNetworkPartitionContext.addClusterInstanceContext(clusterInstanceContext);
-
if (log.isInfoEnabled()) {
log.info(String.format("Network partition context has been added: " +
"[network partition] %s", clusterLevelNetworkPartitionContext.getId()));
@@ -261,9 +223,10 @@ public class VMClusterContext extends AbstractClusterContext {
private ClusterLevelNetworkPartitionContext addPartition(
ClusterInstance clusterInstance,
Cluster cluster,
- ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext)
+ ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext,
+ ChildLevelPartition childLevelPartition)
throws PolicyValidationException, PartitionValidationException {
-
+ //Getting the associated network partition
ChildLevelNetworkPartition networkPartition = deploymentPolicy.
getChildLevelNetworkPartition(clusterInstance.getNetworkPartitionId());
if (networkPartition == null) {
@@ -273,8 +236,9 @@ public class VMClusterContext extends AbstractClusterContext {
log.error(msg);
throw new PolicyValidationException(msg);
}
- ChildLevelPartition partition = networkPartition.getChildLevelPartition(clusterInstance.getPartitionId());
- if (partition == null) {
+
+ //Getting the associated partition
+ if (clusterInstance.getPartitionId() == null || childLevelPartition == null) {
String msg =
"[Partition] " + clusterInstance.getPartitionId() + " for [networkPartition] " +
clusterInstance.getNetworkPartitionId() + "is null " +
@@ -283,41 +247,62 @@ public class VMClusterContext extends AbstractClusterContext {
throw new PolicyValidationException(msg);
}
- Partition partition1 = deploymentPolicy.getApplicationLevelNetworkPartition(networkPartition.getId()).
- getPartition(partition.getPartitionId());
- CloudControllerClient.getInstance().validatePartition(convertTOCCPartition(partition1));
+ //Creating cluster level network partitionContext, if not exist
if (clusterLevelNetworkPartitionContext == null) {
clusterLevelNetworkPartitionContext =
new ClusterLevelNetworkPartitionContext(clusterInstance.getNetworkPartitionId()
, networkPartition.getPartitionAlgo(), networkPartition.getMin());
}
- //FIXME to have correct member expiry time
- ClusterLevelPartitionContext clusterLevelPartitionContext =
- new ClusterLevelPartitionContext(0);
- clusterLevelPartitionContext.setServiceName(cluster.getServiceName());
- clusterLevelPartitionContext.setProperties(cluster.getProperties());
- clusterLevelPartitionContext.setNetworkPartitionId(networkPartition.getId());
- //add members to partition Context
- addMembersFromTopology(cluster, partition1, clusterLevelPartitionContext);
ClusterInstanceContext clusterInstanceContext = clusterLevelNetworkPartitionContext.
- getClusterInstanceContext(clusterInstance.getInstanceId());
- ApplicationHolder.acquireReadLock();
- try {
- Application application = ApplicationHolder.getApplications().
- getApplication(cluster.getAppId());
- ClusterDataHolder dataHolder = application.getClusterData(AutoscalerUtil.getAliasFromClusterId(clusterId));
- clusterInstanceContext.setMinMembers(2); //dataHolder.getMinInstances());
- clusterInstanceContext.setMaxMembers(2); //dataHolder.getMaxInstances());
- } finally {
- ApplicationHolder.releaseReadLock();
- }
+ getClusterInstanceContext(clusterInstance.getInstanceId());
+ int maxInstances = 2;
if (clusterInstanceContext == null) {
+ int minInstances = 2;
+ ApplicationHolder.acquireReadLock();
+ try {
+ Application application = ApplicationHolder.getApplications().
+ getApplication(cluster.getAppId());
+ ClusterDataHolder dataHolder = application.getClusterData(AutoscalerUtil.getAliasFromClusterId(clusterId));
+ //TODO minInstances = dataHolder.getMinInstances();
+ //maxInstances = dataHolder.getMaxInstances();
+ } finally {
+ ApplicationHolder.releaseReadLock();
+ }
clusterInstanceContext = new ClusterInstanceContext(clusterInstance.getInstanceId(),
networkPartition.getPartitionAlgo(),
networkPartition.getChildLevelPartitions(), networkPartition.getMin(), networkPartition.getId());
}
+ String partitionId;
+ if(childLevelPartition != null) {
+ //use it own defined partition
+ partitionId = childLevelPartition.getPartitionId();
+ maxInstances = childLevelPartition.getMax();
+ } else {
+ //handling the partition given by the parent
+ partitionId = clusterInstance.getPartitionId();
+ }
+ //Retrieving the actual partition from application
+ Partition appPartition = deploymentPolicy.getApplicationLevelNetworkPartition(networkPartition.getId()).
+ getPartition(partitionId);
+ org.apache.stratos.cloud.controller.stub.domain.Partition partition =
+ convertTOCCPartition(appPartition);
+
+ //Validate the partition
+ CloudControllerClient.getInstance().validatePartition(partition);
+
+ //Creating cluster level partition context
+ ClusterLevelPartitionContext clusterLevelPartitionContext = new ClusterLevelPartitionContext(
+ maxInstances,
+ partition,
+ clusterInstance.getNetworkPartitionId());
+ clusterLevelPartitionContext.setServiceName(cluster.getServiceName());
+ clusterLevelPartitionContext.setProperties(cluster.getProperties());
+
+ //add members to partition Context
+ addMembersFromTopology(cluster, partition, clusterLevelPartitionContext);
+ //adding it to the monitors context
clusterInstanceContext.addPartitionCtxt(clusterLevelPartitionContext);
clusterLevelNetworkPartitionContext.addClusterInstanceContext(clusterInstanceContext);
@@ -330,7 +315,8 @@ public class VMClusterContext extends AbstractClusterContext {
return clusterLevelNetworkPartitionContext;
}
- private void addMembersFromTopology(Cluster cluster, Partition partition,
+ private void addMembersFromTopology(Cluster cluster,
+ org.apache.stratos.cloud.controller.stub.domain.Partition partition,
ClusterLevelPartitionContext clusterLevelPartitionContext) {
for (Member member : cluster.getMembers()) {
String memberId = member.getMemberId();
@@ -339,7 +325,7 @@ public class VMClusterContext extends AbstractClusterContext {
memberContext.setClusterId(member.getClusterId());
memberContext.setMemberId(memberId);
memberContext.setInitTime(member.getInitTime());
- memberContext.setPartition(convertTOCCPartition(partition));
+ memberContext.setPartition(partition);
//FIXME********memberContext.setProperties(convertMemberPropsToMemberContextProps(member.getProperties()));
if (MemberStatus.Activated.equals(member.getStatus())) {
http://git-wip-us.apache.org/repos/asf/stratos/blob/761b88f8/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java
index e9c3cff..850a54b 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java
@@ -24,13 +24,14 @@ import org.apache.commons.logging.LogFactory;
import org.apache.stratos.autoscaler.context.member.MemberStatsContext;
import org.apache.stratos.autoscaler.pojo.policy.deployment.partition.network.ChildLevelPartition;
import org.apache.stratos.autoscaler.util.ConfUtil;
-import org.apache.stratos.cloud.controller.stub.domain.Partition;
import org.apache.stratos.cloud.controller.stub.domain.MemberContext;
import java.io.Serializable;
import java.util.*;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.stratos.cloud.controller.stub.domain.Partition;
import org.apache.stratos.common.constants.StratosConstants;
/**
@@ -87,10 +88,9 @@ public class ClusterLevelPartitionContext extends PartitionContext implements Se
this.pendingMembers = new ArrayList<MemberContext>();
}
- public ClusterLevelPartitionContext(ChildLevelPartition childLevelPartition, Partition partition, int max) {
+ public ClusterLevelPartitionContext(int max, Partition partition, String networkPartitionId) {
- super(partition, childLevelPartition, max);
- this.minimumMemberCount = partition.getPartitionMin();
+ super(max,partition, networkPartitionId);
this.pendingMembers = new ArrayList<MemberContext>();
this.activeMembers = new ArrayList<MemberContext>();
this.terminationPendingMembers = new ArrayList<MemberContext>();
http://git-wip-us.apache.org/repos/asf/stratos/blob/761b88f8/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/GroupLevelPartitionContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/GroupLevelPartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/GroupLevelPartitionContext.java
index 8cf5e61..dfb1225 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/GroupLevelPartitionContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/GroupLevelPartitionContext.java
@@ -85,8 +85,8 @@ public class GroupLevelPartitionContext extends PartitionContext implements Seri
pendingInstanceExpiryTime = instanceExpiryTime;
}
- public GroupLevelPartitionContext(Partition partition, ChildLevelPartition childLevelPartition, int max) {
- super(partition, childLevelPartition, max);
+ public GroupLevelPartitionContext(int max, Partition partition, String networkPartitionIid ) {
+ super(max, partition, networkPartitionIid);
this.setPartition(partition);
this.minimumInstanceCount = partition.getPartitionMin();
this.partitionId = partition.getId();
http://git-wip-us.apache.org/repos/asf/stratos/blob/761b88f8/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/PartitionContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/PartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/PartitionContext.java
index 3a81952..db4f2cb 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/PartitionContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/PartitionContext.java
@@ -22,6 +22,7 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.stratos.autoscaler.pojo.policy.deployment.partition.network.ChildLevelPartition;
import org.apache.stratos.cloud.controller.stub.domain.Partition;
+
import java.io.Serializable;
import java.util.*;
/**
@@ -38,7 +39,6 @@ public abstract class PartitionContext implements Serializable{
protected String partitionId;
private Partition partition;
private int max;
- private ChildLevelPartition childLevelPartition;
private String networkPartitionId;
// properties
private Properties properties;
@@ -48,11 +48,11 @@ public abstract class PartitionContext implements Serializable{
}
- public PartitionContext(Partition partition, ChildLevelPartition childLevelPartition, int max) {
-
+ public PartitionContext(int max, Partition partition, String networkPartitionId) {
this.partition = partition;
- this.childLevelPartition = childLevelPartition;
this.max = max;
+ this.partitionId = partition.getId();
+ this.networkPartitionId = networkPartitionId;
}
public Partition getPartition() {
@@ -80,11 +80,6 @@ public abstract class PartitionContext implements Serializable{
}
public abstract int getActiveInstanceCount();
-
- public ChildLevelPartition getChildLevelPartition() {
- return childLevelPartition;
- }
-
public int getMax() {
return max;
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/761b88f8/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 63e2b4a..addffa4 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
@@ -26,6 +26,8 @@ import org.apache.stratos.autoscaler.applications.dependency.context.ClusterChil
import org.apache.stratos.autoscaler.applications.dependency.context.GroupChildContext;
import org.apache.stratos.autoscaler.client.CloudControllerClient;
import org.apache.stratos.autoscaler.context.AutoscalerContext;
+import org.apache.stratos.autoscaler.context.cluster.ClusterContextFactory;
+import org.apache.stratos.autoscaler.context.cluster.VMClusterContext;
import org.apache.stratos.autoscaler.exception.application.DependencyBuilderException;
import org.apache.stratos.autoscaler.exception.application.TopologyInConsistentException;
import org.apache.stratos.autoscaler.exception.partition.PartitionValidationException;
@@ -39,6 +41,7 @@ import org.apache.stratos.autoscaler.util.ServiceReferenceHolder;
import org.apache.stratos.messaging.domain.applications.Application;
import org.apache.stratos.messaging.domain.applications.Group;
import org.apache.stratos.messaging.domain.instance.ApplicationInstance;
+import org.apache.stratos.messaging.domain.instance.ClusterInstance;
import org.apache.stratos.messaging.domain.instance.GroupInstance;
import org.apache.stratos.messaging.domain.instance.Instance;
import org.apache.stratos.messaging.domain.topology.Cluster;
@@ -77,32 +80,7 @@ public class MonitorFactory {
if (context instanceof GroupChildContext) {
monitor = getGroupMonitor(parentMonitor, context, appId, parentInstanceIds);
} else if (context instanceof ClusterChildContext) {
- monitor = getClusterMonitor(parentMonitor, (ClusterChildContext) context);
- if (monitor != null) {
- //((AbstractClusterMonitor)monitor).startScheduler();
- ClusterChildContext clusterChildCtxt = (ClusterChildContext) context;
- AbstractClusterMonitor clusterMonitor = (AbstractClusterMonitor) monitor;
- AutoscalerContext.getInstance().
- addClusterMonitor((AbstractClusterMonitor) monitor);
- // FIXME: passing null as alias for cluster instance temporarily. should be removed.
- for(String parentInstanceId : parentInstanceIds) {
- Instance instance = parentMonitor.getInstance(parentInstanceId);
- String partitionId = null;
- if(instance instanceof GroupInstance) {
- partitionId = ((GroupInstance)instance).getPartitionId();
- }
- if(instance != null) {
- createClusterInstance(clusterChildCtxt.getServiceName(),
- clusterMonitor.getClusterId(), null,
- parentInstanceId, partitionId,
- instance.getNetworkPartitionId());
- } else {
-
- }
-
- }
-
- }
+ monitor = getClusterMonitor(parentMonitor, (ClusterChildContext) context, parentInstanceIds);
} else {
monitor = getApplicationMonitor(appId);
}
@@ -270,7 +248,8 @@ public class MonitorFactory {
* @throws org.apache.stratos.autoscaler.exception.partition.PartitionValidationException
*/
public static AbstractClusterMonitor getClusterMonitor(ParentComponentMonitor parentMonitor,
- ClusterChildContext context)
+ ClusterChildContext context,
+ List<String> parentInstanceIds)
throws PolicyValidationException,
PartitionValidationException,
TopologyInConsistentException {
@@ -315,19 +294,48 @@ public class MonitorFactory {
} else {
clusterMonitor.setHasGroupScalingDependent(false);
}
- //setting the status of the cluster, if it doesn't match with Topology cluster status.
- //TODO after adding cluster instances*************
- /*if (cluster.getStatus(null) != clusterMonitor.getStatus()) {
- //updating the status, so that it will notify the parent
- clusterMonitor.setStatus(cluster.getStatus(null));
- } else {
- if(!cluster.hasMembers()) {
- StatusChecker.getInstance().onMemberStatusChange(clusterId);
+
+ for(String parentInstanceId : parentInstanceIds) {
+ Instance instance = parentMonitor.getInstance(parentInstanceId);
+ String partitionId = null;
+ if(instance instanceof GroupInstance) {
+ partitionId = ((GroupInstance)instance).getPartitionId();
}
- }*/
- if (cluster.getInstanceContextCount() > 0) {
- //Starting the cluster monitor as existing instances are found
+ if(instance != null) {
+ ClusterInstance clusterInstance = cluster.getInstanceContexts(parentInstanceId);
+ if(clusterInstance != null) {
+ if(cluster.isKubernetesCluster()) {
+ clusterMonitor.setClusterContext(
+ ClusterContextFactory.getKubernetesClusterContext(
+ clusterInstance.getInstanceId(),
+ cluster));
+ } else {
+ //Cluster instance is already there. No need to create one.
+ VMClusterContext clusterContext;
+ clusterContext = ClusterContextFactory.
+ getVMClusterContext(clusterInstance.getInstanceId(),
+ cluster);
+ clusterMonitor.setClusterContext(clusterContext);
+ //create VMClusterContext and then add all the instanceContexts
+ clusterContext.addInstanceContext(parentInstanceId, cluster);
+ if(clusterMonitor.getInstance(clusterInstance.getInstanceId()) == null) {
+ clusterMonitor.addInstance(clusterInstance);
+ }
+ }
+ } else {
+ createClusterInstance(cluster.getServiceName(),
+ clusterId, null,
+ parentInstanceId, partitionId,
+ instance.getNetworkPartitionId());
+ }
+
+ } else {
+
+ }
+ AutoscalerContext.getInstance().addClusterMonitor(clusterMonitor);
+
}
+
return clusterMonitor;
} finally {
http://git-wip-us.apache.org/repos/asf/stratos/blob/761b88f8/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
index 2744361..befe3cd 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
@@ -190,6 +190,9 @@ public class VMClusterMonitor extends AbstractClusterMonitor {
getClusterInstanceContextMap().values();
for (final ClusterInstanceContext instanceContext : clusterInstanceContexts ) {
+ /* TODO ***********if (((getStatus().getCode() <= ClusterStatus.Active.getCode()) ||
+ (getStatus() == ClusterStatus.Inactive && !hasStartupDependents)) && !this.hasFaultyMember
+ && !stop) {*/
Runnable monitoringRunnable = new Runnable() {
@Override
@@ -199,6 +202,9 @@ public class VMClusterMonitor extends AbstractClusterMonitor {
log.debug("Monitor is running for [cluster] : " + getClusterId());
}
+
+ // store primary members in the cluster instance context
+
// store primary members in the cluster instance context
List<String> primaryMemberListInClusterInstance = new ArrayList<String>();
http://git-wip-us.apache.org/repos/asf/stratos/blob/761b88f8/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 58c1fa0..e49f3bf 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
@@ -180,21 +180,13 @@ public class ApplicationMonitor extends ParentComponentMonitor {
public boolean startMinimumDependencies(Application application)
throws TopologyInConsistentException, PolicyValidationException {
- boolean initialStartup = false;
- //There will be one application instance
- //FIXME when having multiple network partitions
- if (application.getInstanceContextCount() > 0) {
- startDependency(application);
- } else {
- //No available instances in the Applications. Need to start them all
- createInstanceAndStartDependency(application);
- initialStartup = true;
- }
- return initialStartup;
+
+ return createInstanceAndStartDependency(application);
}
- private void createInstanceAndStartDependency(Application application)
+ private boolean createInstanceAndStartDependency(Application application)
throws TopologyInConsistentException, PolicyValidationException {
+ boolean initialStartup = true;
List<String> instanceIds = new ArrayList<String>();
DeploymentPolicy deploymentPolicy = getDeploymentPolicy(application);
String instanceId;
@@ -216,9 +208,11 @@ public class ApplicationMonitor extends ParentComponentMonitor {
if (appInstance != null) {
//use the existing instance in the Topology to create the data
instanceId = handleApplicationInstanceCreation(application, context, appInstance);
+ initialStartup = false;
} else {
//create new app instance as it doesn't exist in the Topology
instanceId = handleApplicationInstanceCreation(application, context, null);
+
}
instanceIds.add(instanceId);
log.info("Application instance has been added for the [network partition] " +
@@ -228,6 +222,7 @@ public class ApplicationMonitor extends ParentComponentMonitor {
}
}
startDependency(application, instanceIds);
+ return initialStartup;
}
private String handleApplicationInstanceCreation(Application application,