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/11/27 12:00:24 UTC
[1/3] stratos git commit: adding network partition context to cluster
and application
Repository: stratos
Updated Branches:
refs/heads/master 7587568a7 -> dd68738a4
http://git-wip-us.apache.org/repos/asf/stratos/blob/746bdc10/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitorFactory.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitorFactory.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitorFactory.java
index c7d6d02..9e9e84d 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitorFactory.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitorFactory.java
@@ -98,7 +98,7 @@ public class ApplicationMonitorFactory {
* @throws TopologyInConsistentException throws while traversing thr topology
*/
public static Monitor getGroupMonitor(ParentComponentMonitor parentMonitor,
- ApplicationChildContext context, String appId, List<String> instanceId)
+ ApplicationChildContext context, String appId, List<String> instanceIds)
throws DependencyBuilderException,
TopologyInConsistentException {
GroupMonitor groupMonitor;
@@ -107,7 +107,7 @@ public class ApplicationMonitorFactory {
try {
Group group = ApplicationHolder.getApplications().
getApplication(appId).getGroupRecursively(context.getId());
- groupMonitor = new GroupMonitor(group, appId, instanceId);
+ groupMonitor = new GroupMonitor(group, appId, instanceIds);
groupMonitor.setAppId(appId);
if (parentMonitor != null) {
groupMonitor.setParent(parentMonitor);
@@ -126,6 +126,9 @@ public class ApplicationMonitorFactory {
groupMonitor.setHasGroupScalingDependent(true);
}
}
+
+ //Starting the minimum dependencies
+ groupMonitor.startMinimumDependencies(group, instanceIds);
//TODO*********** make it sync with the topology in the restart
/*if (group.getStatus() != groupMonitor.getStatus()) {
@@ -154,7 +157,7 @@ public class ApplicationMonitorFactory {
*/
public static ApplicationMonitor getApplicationMonitor(String appId)
throws DependencyBuilderException,
- TopologyInConsistentException {
+ TopologyInConsistentException, PolicyValidationException {
ApplicationMonitor applicationMonitor;
ApplicationHolder.acquireReadLock();
try {
@@ -162,6 +165,7 @@ public class ApplicationMonitorFactory {
if (application != null) {
applicationMonitor = new ApplicationMonitor(application);
applicationMonitor.setHasStartupDependents(false);
+ applicationMonitor.startMinimumDependencies(application);
} else {
String msg = "[Application] " + appId + " cannot be found in the Topology";
http://git-wip-us.apache.org/repos/asf/stratos/blob/746bdc10/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 558c612..197a337 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
@@ -71,9 +71,9 @@ abstract public class VMClusterMonitor extends AbstractClusterMonitor {
clusterId, networkPartitionId, value));
}
- NetworkPartitionContext networkPartitionContext = getNetworkPartitionCtxt(instanceId ,networkPartitionId);
- if (null != networkPartitionContext) {
- networkPartitionContext.setAverageLoadAverage(value);
+ ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext = getNetworkPartitionCtxt(instanceId ,networkPartitionId);
+ if (null != clusterLevelNetworkPartitionContext) {
+ clusterLevelNetworkPartitionContext.setAverageLoadAverage(value);
} else {
if (log.isDebugEnabled()) {
log.debug(String.format("Network partition context is not available for :" +
@@ -95,9 +95,9 @@ abstract public class VMClusterMonitor extends AbstractClusterMonitor {
log.debug(String.format("Grad of load avg event: [cluster] %s [network-partition] %s [value] %s",
clusterId, networkPartitionId, value));
}
- NetworkPartitionContext networkPartitionContext = getNetworkPartitionCtxt(instanceId, networkPartitionId);
- if (null != networkPartitionContext) {
- networkPartitionContext.setLoadAverageGradient(value);
+ ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext = getNetworkPartitionCtxt(instanceId, networkPartitionId);
+ if (null != clusterLevelNetworkPartitionContext) {
+ clusterLevelNetworkPartitionContext.setLoadAverageGradient(value);
} else {
if (log.isDebugEnabled()) {
log.debug(String.format("Network partition context is not available for :" +
@@ -118,9 +118,9 @@ abstract public class VMClusterMonitor extends AbstractClusterMonitor {
log.debug(String.format("Second Derivation of load avg event: [cluster] %s "
+ "[network-partition] %s [value] %s", clusterId, networkPartitionId, value));
}
- NetworkPartitionContext networkPartitionContext = getNetworkPartitionCtxt(instanceId, networkPartitionId);
- if (null != networkPartitionContext) {
- networkPartitionContext.setLoadAverageSecondDerivative(value);
+ ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext = getNetworkPartitionCtxt(instanceId, networkPartitionId);
+ if (null != clusterLevelNetworkPartitionContext) {
+ clusterLevelNetworkPartitionContext.setLoadAverageSecondDerivative(value);
} else {
if (log.isDebugEnabled()) {
log.debug(String.format("Network partition context is not available for :" +
@@ -141,9 +141,9 @@ abstract public class VMClusterMonitor extends AbstractClusterMonitor {
log.debug(String.format("Avg Memory Consumption event: [cluster] %s [network-partition] %s "
+ "[value] %s", clusterId, networkPartitionId, value));
}
- NetworkPartitionContext networkPartitionContext = getNetworkPartitionCtxt(instanceId, networkPartitionId);
- if (null != networkPartitionContext) {
- networkPartitionContext.setAverageMemoryConsumption(value);
+ ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext = getNetworkPartitionCtxt(instanceId, networkPartitionId);
+ if (null != clusterLevelNetworkPartitionContext) {
+ clusterLevelNetworkPartitionContext.setAverageMemoryConsumption(value);
} else {
if (log.isDebugEnabled()) {
log.debug(String
@@ -165,9 +165,9 @@ abstract public class VMClusterMonitor extends AbstractClusterMonitor {
log.debug(String.format("Grad of Memory Consumption event: [cluster] %s "
+ "[network-partition] %s [value] %s", clusterId, networkPartitionId, value));
}
- NetworkPartitionContext networkPartitionContext = getNetworkPartitionCtxt(instanceId, networkPartitionId);
- if (null != networkPartitionContext) {
- networkPartitionContext.setMemoryConsumptionGradient(value);
+ ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext = getNetworkPartitionCtxt(instanceId, networkPartitionId);
+ if (null != clusterLevelNetworkPartitionContext) {
+ clusterLevelNetworkPartitionContext.setMemoryConsumptionGradient(value);
} else {
if (log.isDebugEnabled()) {
log.debug(String.format("Network partition context is not available for :" +
@@ -188,9 +188,9 @@ abstract public class VMClusterMonitor extends AbstractClusterMonitor {
log.debug(String.format("Second Derivation of Memory Consumption event: [cluster] %s "
+ "[network-partition] %s [value] %s", clusterId, networkPartitionId, value));
}
- NetworkPartitionContext networkPartitionContext = getNetworkPartitionCtxt(instanceId, networkPartitionId);
- if (null != networkPartitionContext) {
- networkPartitionContext.setMemoryConsumptionSecondDerivative(value);
+ ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext = getNetworkPartitionCtxt(instanceId, networkPartitionId);
+ if (null != clusterLevelNetworkPartitionContext) {
+ clusterLevelNetworkPartitionContext.setMemoryConsumptionSecondDerivative(value);
} else {
if (log.isDebugEnabled()) {
log.debug(String.format("Network partition context is not available for :" +
@@ -210,9 +210,9 @@ abstract public class VMClusterMonitor extends AbstractClusterMonitor {
clusterId, networkPartitionId, floatValue));
}
- NetworkPartitionContext networkPartitionContext = getNetworkPartitionCtxt(null, networkPartitionId);
- if(null != networkPartitionContext){
- networkPartitionContext.setAverageRequestsServedPerInstance(floatValue);
+ ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext = getNetworkPartitionCtxt(null, networkPartitionId);
+ if(null != clusterLevelNetworkPartitionContext){
+ clusterLevelNetworkPartitionContext.setAverageRequestsServedPerInstance(floatValue);
} else {
if (log.isDebugEnabled()) {
@@ -241,9 +241,9 @@ abstract public class VMClusterMonitor extends AbstractClusterMonitor {
log.debug(String.format("Average Rif event: [cluster] %s [network-partition] %s [value] %s",
clusterId, networkPartitionId, value));
}
- NetworkPartitionContext networkPartitionContext = getNetworkPartitionCtxt(instanceId, networkPartitionId);
- if (null != networkPartitionContext) {
- networkPartitionContext.setAverageRequestsInFlight(value);
+ ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext = getNetworkPartitionCtxt(instanceId, networkPartitionId);
+ if (null != clusterLevelNetworkPartitionContext) {
+ clusterLevelNetworkPartitionContext.setAverageRequestsInFlight(value);
} else {
if (log.isDebugEnabled()) {
log.debug(String.format("Network partition context is not available for :" +
@@ -264,9 +264,9 @@ abstract public class VMClusterMonitor extends AbstractClusterMonitor {
log.debug(String.format("Gradient of Rif event: [cluster] %s [network-partition] %s [value] %s",
clusterId, networkPartitionId, value));
}
- NetworkPartitionContext networkPartitionContext = getNetworkPartitionCtxt(instanceId, networkPartitionId);
- if (null != networkPartitionContext) {
- networkPartitionContext.setRequestsInFlightGradient(value);
+ ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext = getNetworkPartitionCtxt(instanceId, networkPartitionId);
+ if (null != clusterLevelNetworkPartitionContext) {
+ clusterLevelNetworkPartitionContext.setRequestsInFlightGradient(value);
} else {
if (log.isDebugEnabled()) {
log.debug(String.format("Network partition context is not available for :" +
@@ -287,9 +287,9 @@ abstract public class VMClusterMonitor extends AbstractClusterMonitor {
log.debug(String.format("Second derivative of Rif event: [cluster] %s "
+ "[network-partition] %s [value] %s", clusterId, networkPartitionId, value));
}
- NetworkPartitionContext networkPartitionContext = getNetworkPartitionCtxt(instanceId, networkPartitionId);
- if (null != networkPartitionContext) {
- networkPartitionContext.setRequestsInFlightSecondDerivative(value);
+ ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext = getNetworkPartitionCtxt(instanceId, networkPartitionId);
+ if (null != clusterLevelNetworkPartitionContext) {
+ clusterLevelNetworkPartitionContext.setRequestsInFlightSecondDerivative(value);
} else {
if (log.isDebugEnabled()) {
log.debug(String.format("Network partition context is not available for :" +
@@ -306,7 +306,7 @@ abstract public class VMClusterMonitor extends AbstractClusterMonitor {
String memberId = memberAverageMemoryConsumptionEvent.getMemberId();
Member member = getMemberByMemberId(memberId);
String networkPartitionId = getNetworkPartitionIdByMemberId(memberId);
- NetworkPartitionContext networkPartitionCtxt = getNetworkPartitionCtxt(instanceId, networkPartitionId);
+ ClusterLevelNetworkPartitionContext networkPartitionCtxt = getNetworkPartitionCtxt(instanceId, networkPartitionId);
ClusterLevelPartitionContext partitionCtxt = networkPartitionCtxt.getPartitionCtxt(member.getPartitionId());
MemberStatsContext memberStatsContext = partitionCtxt.getMemberStatsContext(memberId);
if (null == memberStatsContext) {
@@ -327,7 +327,7 @@ abstract public class VMClusterMonitor extends AbstractClusterMonitor {
String memberId = memberGradientOfMemoryConsumptionEvent.getMemberId();
Member member = getMemberByMemberId(memberId);
String networkPartitionId = getNetworkPartitionIdByMemberId(memberId);
- NetworkPartitionContext networkPartitionCtxt = getNetworkPartitionCtxt(instanceId, networkPartitionId);
+ ClusterLevelNetworkPartitionContext networkPartitionCtxt = getNetworkPartitionCtxt(instanceId, networkPartitionId);
ClusterLevelPartitionContext partitionCtxt = networkPartitionCtxt.getPartitionCtxt(member.getPartitionId());
MemberStatsContext memberStatsContext = partitionCtxt.getMemberStatsContext(memberId);
if (null == memberStatsContext) {
@@ -354,7 +354,7 @@ abstract public class VMClusterMonitor extends AbstractClusterMonitor {
String memberId = memberAverageLoadAverageEvent.getMemberId();
Member member = getMemberByMemberId(memberId);
String networkPartitionId = getNetworkPartitionIdByMemberId(memberId);
- NetworkPartitionContext networkPartitionCtxt = getNetworkPartitionCtxt(instanceId, networkPartitionId);
+ ClusterLevelNetworkPartitionContext networkPartitionCtxt = getNetworkPartitionCtxt(instanceId, networkPartitionId);
ClusterLevelPartitionContext partitionCtxt = networkPartitionCtxt.getPartitionCtxt(member.getPartitionId());
MemberStatsContext memberStatsContext = partitionCtxt.getMemberStatsContext(memberId);
if (null == memberStatsContext) {
@@ -375,7 +375,7 @@ abstract public class VMClusterMonitor extends AbstractClusterMonitor {
String memberId = memberGradientOfLoadAverageEvent.getMemberId();
Member member = getMemberByMemberId(memberId);
String networkPartitionId = getNetworkPartitionIdByMemberId(memberId);
- NetworkPartitionContext networkPartitionCtxt = getNetworkPartitionCtxt(instanceId, networkPartitionId);
+ ClusterLevelNetworkPartitionContext networkPartitionCtxt = getNetworkPartitionCtxt(instanceId, networkPartitionId);
ClusterLevelPartitionContext partitionCtxt = networkPartitionCtxt.getPartitionCtxt(member.getPartitionId());
MemberStatsContext memberStatsContext = partitionCtxt.getMemberStatsContext(memberId);
if (null == memberStatsContext) {
@@ -396,7 +396,8 @@ abstract public class VMClusterMonitor extends AbstractClusterMonitor {
String memberId = memberSecondDerivativeOfLoadAverageEvent.getMemberId();
Member member = getMemberByMemberId(memberId);
String networkPartitionId = getNetworkPartitionIdByMemberId(memberId);
- NetworkPartitionContext networkPartitionCtxt = getNetworkPartitionCtxt(instanceId, networkPartitionId);
+
+ ClusterLevelNetworkPartitionContext networkPartitionCtxt = getNetworkPartitionCtxt(instanceId, networkPartitionId);
ClusterLevelPartitionContext partitionCtxt = networkPartitionCtxt.getPartitionCtxt(member.getPartitionId());
MemberStatsContext memberStatsContext = partitionCtxt.getMemberStatsContext(memberId);
if (null == memberStatsContext) {
@@ -429,7 +430,7 @@ abstract public class VMClusterMonitor extends AbstractClusterMonitor {
return;
}
- NetworkPartitionContext nwPartitionCtxt;
+ ClusterLevelNetworkPartitionContext nwPartitionCtxt;
nwPartitionCtxt = getNetworkPartitionCtxt(instanceId, member);
String partitionId = getPartitionOfMember(memberId);
ClusterLevelPartitionContext partitionCtxt = nwPartitionCtxt.getPartitionCtxt(partitionId);
@@ -469,15 +470,15 @@ abstract public class VMClusterMonitor extends AbstractClusterMonitor {
String networkPartitionId = memberActivatedEvent.getNetworkPartitionId();
String partitionId = memberActivatedEvent.getPartitionId();
String memberId = memberActivatedEvent.getMemberId();
- NetworkPartitionContext networkPartitionCtxt = getNetworkPartitionCtxt(instanceId, networkPartitionId);
- ClusterLevelPartitionContext clusterMonitorPartitionContext;
- clusterMonitorPartitionContext = networkPartitionCtxt.getPartitionCtxt(partitionId);
- clusterMonitorPartitionContext.addMemberStatsContext(new MemberStatsContext(memberId));
+ ClusterLevelNetworkPartitionContext networkPartitionCtxt = getNetworkPartitionCtxt(instanceId, networkPartitionId);
+ ClusterLevelPartitionContext clusterLevelPartitionContext;
+ clusterLevelPartitionContext = networkPartitionCtxt.getPartitionCtxt(partitionId);
+ clusterLevelPartitionContext.addMemberStatsContext(new MemberStatsContext(memberId));
if (log.isInfoEnabled()) {
log.info(String.format("Member stat context has been added successfully: "
+ "[member] %s", memberId));
}
- clusterMonitorPartitionContext.movePendingMemberToActiveMembers(memberId);
+ clusterLevelPartitionContext.movePendingMemberToActiveMembers(memberId);
StatusChecker.getInstance().onMemberStatusChange(memberActivatedEvent.getClusterId());
}
@@ -489,7 +490,7 @@ abstract public class VMClusterMonitor extends AbstractClusterMonitor {
String partitionId = maintenanceModeEvent.getPartitionId();
String memberId = maintenanceModeEvent.getMemberId();
String instanceId = maintenanceModeEvent.getInstanceId();
- NetworkPartitionContext networkPartitionCtxt = getNetworkPartitionCtxt(instanceId, networkPartitionId);
+ ClusterLevelNetworkPartitionContext networkPartitionCtxt = getNetworkPartitionCtxt(instanceId, networkPartitionId);
ClusterLevelPartitionContext clusterMonitorPartitionContext = networkPartitionCtxt.getPartitionCtxt(partitionId);
clusterMonitorPartitionContext.addMemberStatsContext(new MemberStatsContext(memberId));
if (log.isDebugEnabled()) {
@@ -502,7 +503,7 @@ abstract public class VMClusterMonitor extends AbstractClusterMonitor {
@Override
public void handleMemberReadyToShutdownEvent(MemberReadyToShutdownEvent memberReadyToShutdownEvent) {
- NetworkPartitionContext nwPartitionCtxt;
+ ClusterLevelNetworkPartitionContext nwPartitionCtxt;
String networkPartitionId = memberReadyToShutdownEvent.getNetworkPartitionId();
String instanceId = memberReadyToShutdownEvent.getInstanceId();
nwPartitionCtxt = getNetworkPartitionCtxt(instanceId, networkPartitionId);
@@ -553,8 +554,8 @@ abstract public class VMClusterMonitor extends AbstractClusterMonitor {
String clusterId = memberTerminatedEvent.getClusterId();
String instanceId = memberTerminatedEvent.getInstanceId();
String partitionId = memberTerminatedEvent.getPartitionId();
- NetworkPartitionContext networkPartitionContext = getNetworkPartitionCtxt(instanceId, networkPartitionId);
- ClusterLevelPartitionContext clusterMonitorPartitionContext = networkPartitionContext.getPartitionCtxt(partitionId);
+ ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext = getNetworkPartitionCtxt(instanceId, networkPartitionId);
+ ClusterLevelPartitionContext clusterMonitorPartitionContext = clusterLevelNetworkPartitionContext.getPartitionCtxt(partitionId);
clusterMonitorPartitionContext.removeMemberStatsContext(memberId);
if (clusterMonitorPartitionContext.removeTerminationPendingMember(memberId)) {
@@ -641,7 +642,7 @@ abstract public class VMClusterMonitor extends AbstractClusterMonitor {
Thread memberTerminator = new Thread(new Runnable() {
public void run() {
- for (NetworkPartitionContext networkPartitionContext : getAllNetworkPartitionCtxts().values()) {
+ for (ClusterLevelNetworkPartitionContext networkPartitionContext : getAllNetworkPartitionCtxts().values()) {
for (ClusterLevelPartitionContext partitionContext : networkPartitionContext.getPartitionCtxts().values()) {
//if (log.isDebugEnabled()) {
log.info("Starting to terminate all members in cluster [" + getClusterId() + "] Network Partition [ " +
@@ -678,15 +679,15 @@ abstract public class VMClusterMonitor extends AbstractClusterMonitor {
memberTerminator.start();
}
- public Map<String, NetworkPartitionContext> getNetworkPartitionCtxts(String instanceId) {
+ public Map<String, ClusterLevelNetworkPartitionContext> getNetworkPartitionCtxts(String instanceId) {
VMClusterContext vmClusterContext = (VMClusterContext) instanceIdToClusterContextMap.get(instanceId);
return vmClusterContext.getNetworkPartitionCtxts();
}
- public Map<String, NetworkPartitionContext> getAllNetworkPartitionCtxts() {
+ public Map<String, ClusterLevelNetworkPartitionContext> getAllNetworkPartitionCtxts() {
- Map<String, NetworkPartitionContext> nwPartitionIdToNwPartitionMap = new HashMap<String, NetworkPartitionContext>();
+ Map<String, ClusterLevelNetworkPartitionContext> nwPartitionIdToNwPartitionMap = new HashMap<String, ClusterLevelNetworkPartitionContext>();
for (AbstractClusterContext clusterContext : instanceIdToClusterContextMap.values()) {
VMClusterContext vmClusterContext = (VMClusterContext) clusterContext;
@@ -695,13 +696,13 @@ abstract public class VMClusterMonitor extends AbstractClusterMonitor {
return nwPartitionIdToNwPartitionMap;
}
- public NetworkPartitionContext getNetworkPartitionCtxt(String instanceId, String id) {
+ public ClusterLevelNetworkPartitionContext getNetworkPartitionCtxt(String instanceId, String id) {
VMClusterContext vmClusterContext = (VMClusterContext) instanceIdToClusterContextMap.get(instanceId);
return vmClusterContext.getNetworkPartitionCtxt(id);
}
- protected NetworkPartitionContext getNetworkPartitionCtxt(String instanceId, Member member) {
+ protected ClusterLevelNetworkPartitionContext getNetworkPartitionCtxt(String instanceId, Member member) {
VMClusterContext vmClusterContext = (VMClusterContext) instanceIdToClusterContextMap.get(instanceId);
return vmClusterContext.getNetworkPartitionCtxt(member);
http://git-wip-us.apache.org/repos/asf/stratos/blob/746bdc10/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMLbClusterMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMLbClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMLbClusterMonitor.java
index d22d20c..dbf73e4 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMLbClusterMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMLbClusterMonitor.java
@@ -86,7 +86,7 @@ public class VMLbClusterMonitor extends VMClusterMonitor {
@Override
public void run() {
- for (NetworkPartitionContext networkPartitionContext : getNetworkPartitionCtxts(instanceIdToClusterCtxtEntry.getKey()).values()) {
+ for (ClusterLevelNetworkPartitionContext networkPartitionContext : getNetworkPartitionCtxts(instanceIdToClusterCtxtEntry.getKey()).values()) {
// minimum check per partition
for (ClusterLevelPartitionContext partitionContext : networkPartitionContext.getPartitionCtxts()
http://git-wip-us.apache.org/repos/asf/stratos/blob/746bdc10/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMServiceClusterMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMServiceClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMServiceClusterMonitor.java
index 37b7eda..5e2cc25 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMServiceClusterMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMServiceClusterMonitor.java
@@ -116,7 +116,7 @@ public class VMServiceClusterMonitor extends VMClusterMonitor {
Runnable monitoringRunnable = new Runnable() {
@Override
public void run() {
- for (NetworkPartitionContext networkPartitionContext :
+ for (ClusterLevelNetworkPartitionContext networkPartitionContext :
getNetworkPartitionCtxts(instanceIdToClusterCtxtEntry.getKey()).values()) {
// store primary members in the network partition context
List<String> primaryMemberListInNetworkPartition = new ArrayList<String>();
@@ -285,13 +285,13 @@ public class VMServiceClusterMonitor extends VMClusterMonitor {
this.scalingFactorBasedOnDependencies = scalingEvent.getFactor();
VMClusterContext vmClusterContext = (VMClusterContext) instanceIdToClusterContextMap.get(scalingEvent.getInstanceId());
- NetworkPartitionContext networkPartitionContext = getNetworkPartitionCtxt(null, scalingEvent.getNetworkPartitionId());
+ ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext = getNetworkPartitionCtxt(null, scalingEvent.getNetworkPartitionId());
- float requiredInstanceCount = networkPartitionContext.getMinInstanceCount() * scalingFactorBasedOnDependencies;
+ float requiredInstanceCount = clusterLevelNetworkPartitionContext.getMinInstanceCount() * scalingFactorBasedOnDependencies;
int roundedRequiredInstanceCount = getRoundedInstanceCount(requiredInstanceCount,
vmClusterContext.getAutoscalePolicy().getInstanceRoundingFactor());
- networkPartitionContext.setRequiredInstanceCountBasedOnDependencies(roundedRequiredInstanceCount);
+ clusterLevelNetworkPartitionContext.setRequiredInstanceCountBasedOnDependencies(roundedRequiredInstanceCount);
getDependentScaleCheckKnowledgeSession().setGlobal("clusterId", getClusterId());
getDependentScaleCheckKnowledgeSession().setGlobal("scalingFactor", scalingFactorBasedOnDependencies);
@@ -299,7 +299,7 @@ public class VMServiceClusterMonitor extends VMClusterMonitor {
vmClusterContext.getAutoscalePolicy().getInstanceRoundingFactor());
dependentScaleCheckFactHandle = AutoscalerRuleEvaluator.evaluateScaleCheck(getScaleCheckKnowledgeSession()
- , scaleCheckFactHandle, networkPartitionContext);
+ , scaleCheckFactHandle, clusterLevelNetworkPartitionContext);
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/746bdc10/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/group/GroupMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/group/GroupMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/group/GroupMonitor.java
index 8fde5dd..3a2498f 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/group/GroupMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/group/GroupMonitor.java
@@ -21,6 +21,8 @@ package org.apache.stratos.autoscaler.monitor.group;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.stratos.autoscaler.AutoscalerContext;
+import org.apache.stratos.autoscaler.ParentComponentLevelNetworkPartitionContext;
+import org.apache.stratos.autoscaler.algorithm.AutoscaleAlgorithm;
import org.apache.stratos.autoscaler.applications.ApplicationHolder;
import org.apache.stratos.autoscaler.applications.dependency.context.ApplicationChildContext;
import org.apache.stratos.autoscaler.applications.dependency.context.GroupChildContext;
@@ -33,6 +35,10 @@ import org.apache.stratos.autoscaler.monitor.MonitorStatusEventBuilder;
import org.apache.stratos.autoscaler.monitor.ParentComponentMonitor;
import org.apache.stratos.autoscaler.monitor.application.ApplicationMonitor;
import org.apache.stratos.autoscaler.monitor.events.*;
+import org.apache.stratos.autoscaler.partition.PartitionGroup;
+import org.apache.stratos.autoscaler.policy.PolicyManager;
+import org.apache.stratos.autoscaler.policy.model.DeploymentPolicy;
+import org.apache.stratos.cloud.controller.stub.deployment.partition.Partition;
import org.apache.stratos.messaging.domain.applications.*;
import org.apache.stratos.messaging.domain.instance.context.GroupInstanceContext;
import org.apache.stratos.messaging.domain.instance.context.InstanceContext;
@@ -63,7 +69,7 @@ public class GroupMonitor extends ParentComponentMonitor implements EventHandler
super(group);
this.appId = appId;
//starting the minimum start able dependencies
- startMinimumDependencies(group, parentInstanceId);
+ //startMinimumDependencies(group, parentInstanceId);
}
/**
@@ -225,7 +231,7 @@ public class GroupMonitor extends ParentComponentMonitor implements EventHandler
this.groupScalingEnabled = groupScalingEnabled;
}
- private void startMinimumDependencies(Group group, List<String> parentInstanceIds)
+ public void startMinimumDependencies(Group group, List<String> parentInstanceIds)
throws TopologyInConsistentException {
int min = group.getGroupMinInstances();
if(group.getInstanceContextCount() >= min) {
@@ -257,11 +263,36 @@ public class GroupMonitor extends ParentComponentMonitor implements EventHandler
private void createInstanceAndStartDependency(Group group, List<String> parentInstanceIds)
throws TopologyInConsistentException {
List<String> instanceIds = new ArrayList<String>();
+ String deploymentPolicyName = group.getDeploymentPolicy();
+
String instanceId;
for(String parentInstanceId : parentInstanceIds) {
+ InstanceContext parentInstanceContext = this.parent.getInstanceContext(parentInstanceId);
+ ParentComponentLevelNetworkPartitionContext clusterLevelNetworkPartitionContext;
+ if(this.networkPartitionCtxts.containsKey(parentInstanceContext)) {
+ clusterLevelNetworkPartitionContext = this.networkPartitionCtxts.
+ get(parentInstanceContext.getNetworkPartitionId());
+ } else {
+ clusterLevelNetworkPartitionContext = new ParentComponentLevelNetworkPartitionContext(
+ parentInstanceContext.getNetworkPartitionId(),
+ null, null);
+ this.addNetworkPartitionContext(clusterLevelNetworkPartitionContext);
+ }
+
+ if(deploymentPolicyName != null) {
+ DeploymentPolicy deploymentPolicy = PolicyManager.getInstance()
+ .getDeploymentPolicy(deploymentPolicyName);
+ PartitionGroup partitionGroup = deploymentPolicy.
+ getPartitionGroup(parentInstanceContext.getNetworkPartitionId());
+
+ AutoscaleAlgorithm algorithm = this.getAutoscaleAlgorithm(partitionGroup.getPartitionAlgo());
+ Partition partition = algorithm.getNextScaleUpPartition(clusterLevelNetworkPartitionContext, this.id);
+ }
instanceId = createGroupInstance(group, parentInstanceId);
instanceIds.add(instanceId);
+
+
}
startDependency(group, instanceIds);
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/746bdc10/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 8a21257..d3e2474 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
@@ -445,12 +445,12 @@ public class RuleTasksDelegator {
return (int) Math.ceil(predictedValue);
}
- public double getLoadAveragePredictedValue(NetworkPartitionContext networkPartitionContext) {
+ public double getLoadAveragePredictedValue(ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext) {
double loadAveragePredicted = 0.0d;
int totalMemberCount = 0;
- for (ClusterLevelPartitionContext clusterMonitorPartitionContext : networkPartitionContext.getPartitionCtxts().values()) {
- for (MemberStatsContext memberStatsContext : clusterMonitorPartitionContext.getMemberStatsContexts().values()) {
+ for (ClusterLevelPartitionContext partitionContext : clusterLevelNetworkPartitionContext.getPartitionCtxts().values()) {
+ for (MemberStatsContext memberStatsContext : partitionContext.getMemberStatsContexts().values()) {
float memberAverageLoadAverage = memberStatsContext.getLoadAverage().getAverage();
float memberGredientLoadAverage = memberStatsContext.getLoadAverage().getGradient();
@@ -473,12 +473,12 @@ public class RuleTasksDelegator {
}
}
- public double getMemoryConsumptionPredictedValue(NetworkPartitionContext networkPartitionContext) {
+ public double getMemoryConsumptionPredictedValue(ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext) {
double memoryConsumptionPredicted = 0.0d;
int totalMemberCount = 0;
- for (ClusterLevelPartitionContext clusterMonitorPartitionContext : networkPartitionContext.getPartitionCtxts().values()) {
- for (MemberStatsContext memberStatsContext : clusterMonitorPartitionContext.getMemberStatsContexts().values()) {
+ for (ClusterLevelPartitionContext partitionContext : clusterLevelNetworkPartitionContext.getPartitionCtxts().values()) {
+ for (MemberStatsContext memberStatsContext : partitionContext.getMemberStatsContexts().values()) {
float memberMemoryConsumptionAverage = memberStatsContext.getMemoryConsumption().getAverage();
float memberMemoryConsumptionGredient = memberStatsContext.getMemoryConsumption().getGradient();
http://git-wip-us.apache.org/repos/asf/stratos/blob/746bdc10/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/StatusChecker.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/StatusChecker.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/StatusChecker.java
index d4d0a2e..bd0109c 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/StatusChecker.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/StatusChecker.java
@@ -22,7 +22,7 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.stratos.autoscaler.AutoscalerContext;
import org.apache.stratos.autoscaler.ClusterLevelPartitionContext;
-import org.apache.stratos.autoscaler.NetworkPartitionContext;
+import org.apache.stratos.autoscaler.ClusterLevelNetworkPartitionContext;
import org.apache.stratos.autoscaler.applications.ApplicationHolder;
import org.apache.stratos.autoscaler.applications.topic.ApplicationBuilder;
import org.apache.stratos.autoscaler.event.publisher.ClusterStatusEventPublisher;
@@ -172,9 +172,9 @@ public class StatusChecker {
*/
private boolean clusterActive(VMClusterMonitor monitor) {
boolean clusterActive = false;
- for (NetworkPartitionContext networkPartitionContext : monitor.getAllNetworkPartitionCtxts().values()) {
+ for (ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext : monitor.getAllNetworkPartitionCtxts().values()) {
//minimum check per partition
- for (ClusterLevelPartitionContext clusterMonitorPartitionContext : networkPartitionContext.getPartitionCtxts().values()) {
+ for (ClusterLevelPartitionContext clusterMonitorPartitionContext : clusterLevelNetworkPartitionContext.getPartitionCtxts().values()) {
if (clusterMonitorPartitionContext.getMinimumMemberCount() == clusterMonitorPartitionContext.getActiveMemberCount()) {
clusterActive = true;
} else if (clusterMonitorPartitionContext.getActiveMemberCount() > clusterMonitorPartitionContext.getMinimumMemberCount()) {
@@ -196,10 +196,10 @@ public class StatusChecker {
*/
private boolean clusterMonitorHasMembers(VMClusterMonitor monitor) {
boolean hasMember = false;
- for (NetworkPartitionContext networkPartitionContext : monitor.getAllNetworkPartitionCtxts().values()) {
+ for (ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext : monitor.getAllNetworkPartitionCtxts().values()) {
//minimum check per partition
- for (ClusterLevelPartitionContext clusterMonitorPartitionContext : networkPartitionContext.getPartitionCtxts().values()) {
- if (clusterMonitorPartitionContext.getNonTerminatedMemberCount() > 0) {
+ for (ClusterLevelPartitionContext partitionContext : clusterLevelNetworkPartitionContext.getPartitionCtxts().values()) {
+ if (partitionContext.getNonTerminatedMemberCount() > 0) {
hasMember = true;
} else {
hasMember = false;
@@ -261,8 +261,8 @@ public class StatusChecker {
*/
private boolean getClusterInactive(VMClusterMonitor monitor, String partitionId) {
boolean clusterInActive = false;
- for (NetworkPartitionContext networkPartitionContext : monitor.getAllNetworkPartitionCtxts().values()) {
- for (ClusterLevelPartitionContext partition : networkPartitionContext.getPartitionCtxts().values()) {
+ for (ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext : monitor.getAllNetworkPartitionCtxts().values()) {
+ for (ClusterLevelPartitionContext partition : clusterLevelNetworkPartitionContext.getPartitionCtxts().values()) {
if (partitionId.equals(partition.getPartitionId()) &&
partition.getActiveMemberCount() <= partition.getMinimumMemberCount()) {
clusterInActive = true;
http://git-wip-us.apache.org/repos/asf/stratos/blob/746bdc10/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusActiveProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusActiveProcessor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusActiveProcessor.java
index 4d4cb03..cce28cc 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusActiveProcessor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusActiveProcessor.java
@@ -22,7 +22,7 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.stratos.autoscaler.AutoscalerContext;
import org.apache.stratos.autoscaler.ClusterLevelPartitionContext;
-import org.apache.stratos.autoscaler.NetworkPartitionContext;
+import org.apache.stratos.autoscaler.ClusterLevelNetworkPartitionContext;
import org.apache.stratos.autoscaler.event.publisher.ClusterStatusEventPublisher;
import org.apache.stratos.autoscaler.monitor.cluster.VMClusterMonitor;
import org.apache.stratos.autoscaler.status.processor.StatusProcessor;
@@ -65,9 +65,9 @@ public class ClusterStatusActiveProcessor extends ClusterStatusProcessor {
VMClusterMonitor monitor = (VMClusterMonitor) AutoscalerContext.getInstance().
getClusterMonitor(clusterId);
boolean clusterActive = false;
- for (NetworkPartitionContext networkPartitionContext : monitor.getNetworkPartitionCtxts(instanceId).values()) {
+ for (ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext : monitor.getNetworkPartitionCtxts(instanceId).values()) {
//minimum check per partition
- for (ClusterLevelPartitionContext clusterMonitorPartitionContext : networkPartitionContext.getPartitionCtxts().values()) {
+ for (ClusterLevelPartitionContext clusterMonitorPartitionContext : clusterLevelNetworkPartitionContext.getPartitionCtxts().values()) {
if (clusterMonitorPartitionContext.getMinimumMemberCount() == clusterMonitorPartitionContext.getActiveMemberCount()) {
clusterActive = true;
} else if (clusterMonitorPartitionContext.getActiveMemberCount() > clusterMonitorPartitionContext.getMinimumMemberCount()) {
http://git-wip-us.apache.org/repos/asf/stratos/blob/746bdc10/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusInActiveProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusInActiveProcessor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusInActiveProcessor.java
index 6728371..10f9707 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusInActiveProcessor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusInActiveProcessor.java
@@ -22,7 +22,7 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.stratos.autoscaler.AutoscalerContext;
import org.apache.stratos.autoscaler.ClusterLevelPartitionContext;
-import org.apache.stratos.autoscaler.NetworkPartitionContext;
+import org.apache.stratos.autoscaler.ClusterLevelNetworkPartitionContext;
import org.apache.stratos.autoscaler.event.publisher.ClusterStatusEventPublisher;
import org.apache.stratos.autoscaler.monitor.cluster.VMClusterMonitor;
import org.apache.stratos.autoscaler.status.processor.StatusProcessor;
@@ -91,8 +91,8 @@ public class ClusterStatusInActiveProcessor extends ClusterStatusProcessor {
private boolean getClusterInactive(VMClusterMonitor monitor) {
boolean clusterInActive = false;
- for (NetworkPartitionContext networkPartitionContext : monitor.getAllNetworkPartitionCtxts().values()) {
- for (ClusterLevelPartitionContext partition : networkPartitionContext.getPartitionCtxts().values()) {
+ for (ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext : monitor.getAllNetworkPartitionCtxts().values()) {
+ for (ClusterLevelPartitionContext partition : clusterLevelNetworkPartitionContext.getPartitionCtxts().values()) {
if (partition.getActiveMemberCount() <= partition.getMinimumMemberCount()) {
clusterInActive = true;
return clusterInActive;
http://git-wip-us.apache.org/repos/asf/stratos/blob/746bdc10/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusTerminatedProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusTerminatedProcessor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusTerminatedProcessor.java
index 7da0012..f3b6dd1 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusTerminatedProcessor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusTerminatedProcessor.java
@@ -22,7 +22,7 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.stratos.autoscaler.AutoscalerContext;
import org.apache.stratos.autoscaler.ClusterLevelPartitionContext;
-import org.apache.stratos.autoscaler.NetworkPartitionContext;
+import org.apache.stratos.autoscaler.ClusterLevelNetworkPartitionContext;
import org.apache.stratos.autoscaler.applications.ApplicationHolder;
import org.apache.stratos.autoscaler.event.publisher.ClusterStatusEventPublisher;
import org.apache.stratos.autoscaler.monitor.cluster.VMClusterMonitor;
@@ -120,10 +120,10 @@ public class ClusterStatusTerminatedProcessor extends ClusterStatusProcessor {
*/
private boolean clusterMonitorHasMembers(VMClusterMonitor monitor) {
boolean hasMember = false;
- for (NetworkPartitionContext networkPartitionContext : monitor.getAllNetworkPartitionCtxts().values()) {
+ for (ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext : monitor.getAllNetworkPartitionCtxts().values()) {
//minimum check per partition
- for (ClusterLevelPartitionContext clusterMonitorPartitionContext : networkPartitionContext.getPartitionCtxts().values()) {
- if (clusterMonitorPartitionContext.getNonTerminatedMemberCount() > 0) {
+ for (ClusterLevelPartitionContext partitionContext : clusterLevelNetworkPartitionContext.getPartitionCtxts().values()) {
+ if (partitionContext.getNonTerminatedMemberCount() > 0) {
hasMember = true;
} else {
hasMember = false;
[2/3] stratos git commit: adding network partition context to cluster
and application
Posted by re...@apache.org.
adding network partition context to cluster and application
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/746bdc10
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/746bdc10
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/746bdc10
Branch: refs/heads/master
Commit: 746bdc10356d1d21fc5b1653829c0a6b699cc19e
Parents: 7587568
Author: reka <rt...@gmail.com>
Authored: Thu Nov 27 16:11:37 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Thu Nov 27 16:26:13 2014 +0530
----------------------------------------------------------------------
.../autoscaler/ClusterContextFactory.java | 20 +-
.../ClusterLevelNetworkPartitionContext.java | 443 +++++++++++++++++++
.../autoscaler/NetworkPartitionContext.java | 278 ++----------
...ntComponentLevelNetworkPartitionContext.java | 222 ++++++++++
.../stratos/autoscaler/VMClusterContext.java | 16 +-
.../autoscaler/VMServiceClusterContext.java | 3 +-
.../algorithm/AutoscaleAlgorithm.java | 8 +-
.../autoscaler/algorithm/OneAfterAnother.java | 34 +-
.../autoscaler/algorithm/RoundRobin.java | 32 +-
.../applications/topic/ApplicationBuilder.java | 4 +-
.../AutoscalerTopologyEventReceiver.java | 8 +-
.../monitor/ParentComponentMonitor.java | 52 ++-
.../monitor/application/ApplicationMonitor.java | 49 +-
.../application/ApplicationMonitorFactory.java | 10 +-
.../monitor/cluster/VMClusterMonitor.java | 103 ++---
.../monitor/cluster/VMLbClusterMonitor.java | 2 +-
.../cluster/VMServiceClusterMonitor.java | 10 +-
.../autoscaler/monitor/group/GroupMonitor.java | 35 +-
.../autoscaler/rule/RuleTasksDelegator.java | 12 +-
.../status/processor/StatusChecker.java | 16 +-
.../cluster/ClusterStatusActiveProcessor.java | 6 +-
.../cluster/ClusterStatusInActiveProcessor.java | 6 +-
.../ClusterStatusTerminatedProcessor.java | 8 +-
23 files changed, 981 insertions(+), 396 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/746bdc10/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterContextFactory.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterContextFactory.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterContextFactory.java
index 4e17b2a..7a9d4d6 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterContextFactory.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterContextFactory.java
@@ -85,12 +85,12 @@ public class ClusterContextFactory {
CloudControllerClient.getInstance().validateDeploymentPolicy(cluster.getServiceName(), deploymentPolicy);
- Map<String, NetworkPartitionContext> networkPartitionContextMap = new HashMap<String, NetworkPartitionContext>();
+ Map<String, ClusterLevelNetworkPartitionContext> networkPartitionContextMap = new HashMap<String, ClusterLevelNetworkPartitionContext>();
for (PartitionGroup partitionGroup : deploymentPolicy.getPartitionGroups()) {
String networkPartitionId = partitionGroup.getId();
- NetworkPartitionContext networkPartitionContext = new NetworkPartitionContext(networkPartitionId,
+ ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext = new ClusterLevelNetworkPartitionContext(networkPartitionId,
partitionGroup.getPartitionAlgo(),
partitionGroup.getPartitions());
@@ -137,17 +137,17 @@ public class ClusterContextFactory {
}
}
- networkPartitionContext.addPartitionContext(clusterMonitorPartitionContext);
+ clusterLevelNetworkPartitionContext.addPartitionContext(clusterMonitorPartitionContext);
if (log.isInfoEnabled()) {
log.info(String.format("Partition context has been added: [partition] %s",
clusterMonitorPartitionContext.getPartitionId()));
}
}
- networkPartitionContextMap.put(networkPartitionId, networkPartitionContext);
+ networkPartitionContextMap.put(networkPartitionId, clusterLevelNetworkPartitionContext);
if (log.isInfoEnabled()) {
log.info(String.format("Network partition context has been added: [network partition] %s",
- networkPartitionContext.getId()));
+ clusterLevelNetworkPartitionContext.getId()));
}
}
@@ -186,7 +186,7 @@ public class ClusterContextFactory {
String clusterId = cluster.getClusterId();
- Map<String, NetworkPartitionContext> networkPartitionContextMap = new HashMap<String, NetworkPartitionContext>();
+ Map<String, ClusterLevelNetworkPartitionContext> networkPartitionContextMap = new HashMap<String, ClusterLevelNetworkPartitionContext>();
// partition group = network partition context
for (PartitionGroup partitionGroup : deploymentPolicy.getPartitionGroups()) {
@@ -206,12 +206,12 @@ public class ClusterContextFactory {
clusterMonitorPartitionContext.setNetworkPartitionId(networkPartitionId);
clusterMonitorPartitionContext.setMinimumMemberCount(1);//Here it hard codes the minimum value as one for LB cartridge partitions
- NetworkPartitionContext networkPartitionContext = new NetworkPartitionContext(networkPartitionId,
+ ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext = new ClusterLevelNetworkPartitionContext(networkPartitionId,
partitionGroup.getPartitionAlgo(),
partitionGroup.getPartitions());
for (Member member : cluster.getMembers()) {
String memberId = member.getMemberId();
- if (member.getNetworkPartitionId().equalsIgnoreCase(networkPartitionContext.getId())) {
+ if (member.getNetworkPartitionId().equalsIgnoreCase(clusterLevelNetworkPartitionContext.getId())) {
MemberContext memberContext = new MemberContext();
memberContext.setClusterId(member.getClusterId());
memberContext.setMemberId(memberId);
@@ -245,7 +245,7 @@ public class ClusterContextFactory {
}
}
- networkPartitionContext.addPartitionContext(clusterMonitorPartitionContext);
+ clusterLevelNetworkPartitionContext.addPartitionContext(clusterMonitorPartitionContext);
// populate lb cluster id in network partition context.
java.util.Properties props = cluster.getProperties();
@@ -273,7 +273,7 @@ public class ClusterContextFactory {
}
}
- networkPartitionContextMap.put(networkPartitionId, networkPartitionContext);
+ networkPartitionContextMap.put(networkPartitionId, clusterLevelNetworkPartitionContext);
}
return new VMClusterContext(clusterId, cluster.getServiceName(), autoscalePolicy,
http://git-wip-us.apache.org/repos/asf/stratos/blob/746bdc10/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterLevelNetworkPartitionContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterLevelNetworkPartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterLevelNetworkPartitionContext.java
new file mode 100644
index 0000000..73f1bce
--- /dev/null
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterLevelNetworkPartitionContext.java
@@ -0,0 +1,443 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.stratos.autoscaler;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.autoscaler.policy.model.LoadAverage;
+import org.apache.stratos.autoscaler.policy.model.MemoryConsumption;
+import org.apache.stratos.autoscaler.policy.model.RequestsInFlight;
+import org.apache.stratos.cloud.controller.stub.deployment.partition.Partition;
+import org.apache.stratos.messaging.domain.instance.context.InstanceContext;
+
+import java.io.Serializable;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Holds runtime data of a network partition.
+ *
+ */
+public class ClusterLevelNetworkPartitionContext extends NetworkPartitionContext implements Serializable {
+
+ private static final Log log = LogFactory.getLog(ClusterLevelNetworkPartitionContext.class);
+ private static final long serialVersionUID = 572769304374110159L;
+ private final String id;
+ private int scaleDownRequestsCount = 0;
+ private float averageRequestsServedPerInstance;
+ private float requestsServedPerInstance;
+
+ private int minInstanceCount = 0, maxInstanceCount = 0;
+ private int requiredInstanceCountBasedOnStats;
+ private int requiredInstanceCountBasedOnDependencies;
+
+ private Map<String, InstanceContext> instanceIdToInstanceContextMap;
+
+
+ private final String partitionAlgorithm;
+
+ //boolean values to keep whether the requests in flight parameters are reset or not
+ private boolean rifReset = false, averageRifReset = false, gradientRifReset = false, secondDerivativeRifRest = false;
+ //boolean values to keep whether the memory consumption parameters are reset or not
+ private boolean memoryConsumptionReset = false, averageMemoryConsumptionReset = false,
+ gradientMemoryConsumptionReset = false, secondDerivativeMemoryConsumptionRest = false;
+ //boolean values to keep whether the load average parameters are reset or not
+ private boolean loadAverageReset = false, averageLoadAverageReset = false, gradientLoadAverageReset = false,
+ secondDerivativeLoadAverageRest = false;
+ //boolean values to keep whether average requests served per instance parameters are reset or not
+ private boolean averageRequestServedPerInstanceReset = false;
+
+ private final Partition[] partitions;
+
+ //Following information will keep events details
+ private RequestsInFlight requestsInFlight;
+ private MemoryConsumption memoryConsumption;
+ private LoadAverage loadAverage;
+
+ //details required for partition selection algorithms
+ private int currentPartitionIndex;
+
+ //partitions of this network partition
+ private final Map<String, ClusterLevelPartitionContext> partitionCtxts;
+
+ public ClusterLevelNetworkPartitionContext(String id, String partitionAlgo, Partition[] partitions) {
+
+ super(id, partitionAlgo, partitions);
+ this.id = id;
+ this.partitionAlgorithm = partitionAlgo;
+ if (partitions == null) {
+ this.partitions = new Partition[0];
+ } else {
+ this.partitions = Arrays.copyOf(partitions, partitions.length);
+ }
+ partitionCtxts = new HashMap<String, ClusterLevelPartitionContext>();
+ requestsInFlight = new RequestsInFlight();
+ loadAverage = new LoadAverage();
+ memoryConsumption = new MemoryConsumption();
+ for (Partition partition : partitions) {
+ minInstanceCount += partition.getPartitionMin();
+ maxInstanceCount += partition.getPartitionMax();
+ }
+ requiredInstanceCountBasedOnStats = minInstanceCount;
+ requiredInstanceCountBasedOnDependencies = minInstanceCount;
+ instanceIdToInstanceContextMap = new HashMap<String, InstanceContext>();
+
+ }
+
+ public int getMinInstanceCount() {
+ return minInstanceCount;
+ }
+
+ public void setMinInstanceCount(int minInstanceCount) {
+ this.minInstanceCount = minInstanceCount;
+ }
+
+ public int getMaxInstanceCount() {
+ return maxInstanceCount;
+ }
+
+ public void setMaxInstanceCount(int maxInstanceCount) {
+ this.maxInstanceCount = maxInstanceCount;
+ }
+
+ public int hashCode() {
+
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((this.id == null) ? 0 : this.id.hashCode());
+ return result;
+
+ }
+
+ public boolean equals(final Object obj) {
+
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (!(obj instanceof ClusterLevelNetworkPartitionContext)) {
+ return false;
+ }
+ final ClusterLevelNetworkPartitionContext other = (ClusterLevelNetworkPartitionContext) obj;
+ if (this.id == null) {
+ if (other.id != null) {
+ return false;
+ }
+ } else if (!this.id.equals(other.id)) {
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public String toString() {
+ return "NetworkPartitionContext [id=" + id + "partitionAlgorithm=" + partitionAlgorithm + ", minInstanceCount=" +
+ minInstanceCount + ", maxInstanceCount=" + maxInstanceCount + "]";
+ }
+
+ public int getCurrentPartitionIndex() {
+ return currentPartitionIndex;
+ }
+
+ public void setCurrentPartitionIndex(int currentPartitionIndex) {
+ this.currentPartitionIndex = currentPartitionIndex;
+ }
+
+ public float getAverageRequestsServedPerInstance() {
+ return averageRequestsServedPerInstance;
+ }
+
+ public void setAverageRequestsServedPerInstance(float averageRequestServedPerInstance) {
+ this.averageRequestsServedPerInstance = averageRequestServedPerInstance;
+ averageRequestServedPerInstanceReset = true;
+
+ 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));
+
+ }
+ }
+
+ public float getRequestsServedPerInstance() {
+ return requestsServedPerInstance;
+ }
+
+ public float getAverageRequestsInFlight() {
+ return requestsInFlight.getAverage();
+ }
+
+ public void setAverageRequestsInFlight(float averageRequestsInFlight) {
+ requestsInFlight.setAverage(averageRequestsInFlight);
+ averageRifReset = true;
+ if (secondDerivativeRifRest && gradientRifReset) {
+ rifReset = true;
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Requests in flights stats are reset, ready to do scale check [network partition] %s"
+ , this.id));
+ }
+ }
+ }
+
+ public float getRequestsInFlightSecondDerivative() {
+ return requestsInFlight.getSecondDerivative();
+ }
+
+ public void setRequestsInFlightSecondDerivative(float requestsInFlightSecondDerivative) {
+ requestsInFlight.setSecondDerivative(requestsInFlightSecondDerivative);
+ secondDerivativeRifRest = true;
+ if (averageRifReset && gradientRifReset) {
+ rifReset = true;
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Requests in flights stats are reset, ready to do scale check [network partition] %s"
+ , this.id));
+ }
+ }
+ }
+
+ public float getRequestsInFlightGradient() {
+ return requestsInFlight.getGradient();
+ }
+
+ public void setRequestsInFlightGradient(float requestsInFlightGradient) {
+ requestsInFlight.setGradient(requestsInFlightGradient);
+ gradientRifReset = true;
+ if (secondDerivativeRifRest && averageRifReset) {
+ rifReset = true;
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Requests in flights stats are reset, ready to do scale check [network partition] %s"
+ , this.id));
+ }
+ }
+ }
+
+ public boolean isRifReset() {
+ return rifReset;
+ }
+
+ public void setRifReset(boolean rifReset) {
+ this.rifReset = rifReset;
+ this.averageRifReset = rifReset;
+ this.gradientRifReset = rifReset;
+ this.secondDerivativeRifRest = rifReset;
+ }
+
+
+ public float getAverageMemoryConsumption() {
+ return memoryConsumption.getAverage();
+ }
+
+ public void setAverageMemoryConsumption(float averageMemoryConsumption) {
+ memoryConsumption.setAverage(averageMemoryConsumption);
+ averageMemoryConsumptionReset = true;
+ if (secondDerivativeMemoryConsumptionRest && gradientMemoryConsumptionReset) {
+ memoryConsumptionReset = true;
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Memory consumption stats are reset, ready to do scale check [network partition] %s"
+ , this.id));
+ }
+ }
+ }
+
+ public float getMemoryConsumptionSecondDerivative() {
+ return memoryConsumption.getSecondDerivative();
+ }
+
+ public void setMemoryConsumptionSecondDerivative(float memoryConsumptionSecondDerivative) {
+ memoryConsumption.setSecondDerivative(memoryConsumptionSecondDerivative);
+ secondDerivativeMemoryConsumptionRest = true;
+ if (averageMemoryConsumptionReset && gradientMemoryConsumptionReset) {
+ memoryConsumptionReset = true;
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Memory consumption stats are reset, ready to do scale check [network partition] %s"
+ , this.id));
+ }
+ }
+ }
+
+ public float getMemoryConsumptionGradient() {
+ return memoryConsumption.getGradient();
+ }
+
+ public void setMemoryConsumptionGradient(float memoryConsumptionGradient) {
+ memoryConsumption.setGradient(memoryConsumptionGradient);
+ gradientMemoryConsumptionReset = true;
+ if (secondDerivativeMemoryConsumptionRest && averageMemoryConsumptionReset) {
+ memoryConsumptionReset = true;
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Memory consumption stats are reset, ready to do scale check [network partition] %s"
+ , this.id));
+ }
+ }
+ }
+
+ public boolean isMemoryConsumptionReset() {
+ return memoryConsumptionReset;
+ }
+
+ public void setMemoryConsumptionReset(boolean memoryConsumptionReset) {
+ this.memoryConsumptionReset = memoryConsumptionReset;
+ this.averageMemoryConsumptionReset = memoryConsumptionReset;
+ this.gradientMemoryConsumptionReset = memoryConsumptionReset;
+ this.secondDerivativeMemoryConsumptionRest = memoryConsumptionReset;
+ }
+
+
+ public float getAverageLoadAverage() {
+ return loadAverage.getAverage();
+ }
+
+ public void setAverageLoadAverage(float averageLoadAverage) {
+ loadAverage.setAverage(averageLoadAverage);
+ averageLoadAverageReset = true;
+ if (secondDerivativeLoadAverageRest && gradientLoadAverageReset) {
+ loadAverageReset = true;
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Load average stats are reset, ready to do scale check [network partition] %s"
+ , this.id));
+ }
+ }
+ }
+
+ public float getLoadAverageSecondDerivative() {
+ return loadAverage.getSecondDerivative();
+ }
+
+ public void setLoadAverageSecondDerivative(float loadAverageSecondDerivative) {
+ loadAverage.setSecondDerivative(loadAverageSecondDerivative);
+ secondDerivativeLoadAverageRest = true;
+ if (averageLoadAverageReset && gradientLoadAverageReset) {
+ loadAverageReset = true;
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Load average stats are reset, ready to do scale check [network partition] %s"
+ , this.id));
+ }
+ }
+ }
+
+ public float getLoadAverageGradient() {
+ return loadAverage.getGradient();
+ }
+
+ public void setLoadAverageGradient(float loadAverageGradient) {
+ loadAverage.setGradient(loadAverageGradient);
+ gradientLoadAverageReset = true;
+ if (secondDerivativeLoadAverageRest && averageLoadAverageReset) {
+ loadAverageReset = true;
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Load average stats are reset, ready to do scale check [network partition] %s"
+ , this.id));
+ }
+ }
+ }
+
+ public boolean isLoadAverageReset() {
+ return loadAverageReset;
+ }
+
+ public void setLoadAverageReset(boolean loadAverageReset) {
+ this.loadAverageReset = loadAverageReset;
+ this.averageLoadAverageReset = loadAverageReset;
+ this.gradientLoadAverageReset = loadAverageReset;
+ this.secondDerivativeLoadAverageRest = loadAverageReset;
+ }
+
+
+ public String getId() {
+ return id;
+ }
+
+ public Map<String, ClusterLevelPartitionContext> getPartitionCtxts() {
+ return partitionCtxts;
+ }
+
+ public ClusterLevelPartitionContext getPartitionCtxt(String partitionId) {
+ return partitionCtxts.get(partitionId);
+ }
+
+ public void addPartitionContext(ClusterLevelPartitionContext partitionContext) {
+ partitionCtxts.put(partitionContext.getPartitionId(), partitionContext);
+ }
+
+ public String getPartitionAlgorithm() {
+ return partitionAlgorithm;
+ }
+
+ public Partition[] getPartitions() {
+ return partitions;
+ }
+
+ public int getNonTerminatedMemberCountOfPartition(String partitionId) {
+ if (partitionCtxts.containsKey(partitionId)) {
+ return getPartitionCtxt(partitionId).getNonTerminatedMemberCount();
+ }
+ return 0;
+ }
+
+ public int getActiveMemberCount(String currentPartitionId) {
+ if (partitionCtxts.containsKey(currentPartitionId)) {
+ return getPartitionCtxt(currentPartitionId).getActiveMemberCount();
+ }
+ return 0;
+ }
+
+ public int getScaleDownRequestsCount() {
+ return scaleDownRequestsCount;
+ }
+
+ public void resetScaleDownRequestsCount() {
+ this.scaleDownRequestsCount = 0;
+ }
+
+ public void increaseScaleDownRequestsCount() {
+ this.scaleDownRequestsCount += 1;
+ }
+
+ public float getRequiredInstanceCountBasedOnStats() {
+ return requiredInstanceCountBasedOnStats;
+ }
+
+ public void setRequiredInstanceCountBasedOnStats(int requiredInstanceCountBasedOnStats) {
+ this.requiredInstanceCountBasedOnStats = requiredInstanceCountBasedOnStats;
+ }
+
+ public int getRequiredInstanceCountBasedOnDependencies() {
+ return requiredInstanceCountBasedOnDependencies;
+ }
+
+ public void setRequiredInstanceCountBasedOnDependencies(int requiredInstanceCountBasedOnDependencies) {
+ this.requiredInstanceCountBasedOnDependencies = requiredInstanceCountBasedOnDependencies;
+ }
+
+ public Map<String, InstanceContext> getInstanceIdToInstanceContextMap() {
+ return instanceIdToInstanceContextMap;
+ }
+
+ public void setInstanceIdToInstanceContextMap(Map<String, InstanceContext> instanceIdToInstanceContextMap) {
+ this.instanceIdToInstanceContextMap = instanceIdToInstanceContextMap;
+ }
+
+ public void addInstanceContext(InstanceContext context) {
+ this.instanceIdToInstanceContextMap.put(context.getInstanceId(), context);
+
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/stratos/blob/746bdc10/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/NetworkPartitionContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/NetworkPartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/NetworkPartitionContext.java
index 8fc7bf7..9ca60ca 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/NetworkPartitionContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/NetworkPartitionContext.java
@@ -1,18 +1,18 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
+ * or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
+ * regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
+ * with the License. You may obtain a copy of the License at
*
- * http://www.apache.org/licenses/LICENSE-2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
+ * KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
@@ -20,54 +20,33 @@ package org.apache.stratos.autoscaler;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.autoscaler.policy.model.LoadAverage;
-import org.apache.stratos.autoscaler.policy.model.MemoryConsumption;
-import org.apache.stratos.autoscaler.policy.model.RequestsInFlight;
import org.apache.stratos.cloud.controller.stub.deployment.partition.Partition;
+import org.apache.stratos.messaging.domain.instance.context.InstanceContext;
-import java.io.Serializable;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
/**
- * Holds runtime data of a network partition.
- *
+ * This will keep track of network partition level information.
*/
-public class NetworkPartitionContext implements Serializable{
-
- private static final Log log = LogFactory.getLog(NetworkPartitionContext.class);
- private static final long serialVersionUID = 572769304374110159L;
+public abstract class NetworkPartitionContext {
+ private static final Log log = LogFactory.getLog(ParentComponentLevelNetworkPartitionContext.class);
private final String id;
private int scaleDownRequestsCount = 0;
private float averageRequestsServedPerInstance;
- private float requestsServedPerInstance;
private int minInstanceCount = 0, maxInstanceCount = 0;
private int requiredInstanceCountBasedOnStats;
private int requiredInstanceCountBasedOnDependencies;
+ private Map<String, InstanceContext> instanceIdToInstanceContextMap;
- private final String partitionAlgorithm;
- //boolean values to keep whether the requests in flight parameters are reset or not
- private boolean rifReset = false, averageRifReset = false, gradientRifReset = false, secondDerivativeRifRest = false;
- //boolean values to keep whether the memory consumption parameters are reset or not
- private boolean memoryConsumptionReset = false, averageMemoryConsumptionReset = false,
- gradientMemoryConsumptionReset = false, secondDerivativeMemoryConsumptionRest = false;
- //boolean values to keep whether the load average parameters are reset or not
- private boolean loadAverageReset = false, averageLoadAverageReset = false, gradientLoadAverageReset = false,
- secondDerivativeLoadAverageRest = false;
- //boolean values to keep whether average requests served per instance parameters are reset or not
- private boolean averageRequestServedPerInstanceReset= false;
+ private final String partitionAlgorithm;
private final Partition[] partitions;
- //Following information will keep events details
- private RequestsInFlight requestsInFlight;
- private MemoryConsumption memoryConsumption;
- private LoadAverage loadAverage;
-
//details required for partition selection algorithms
private int currentPartitionIndex;
@@ -79,21 +58,19 @@ public class NetworkPartitionContext implements Serializable{
super();
this.id = id;
this.partitionAlgorithm = partitionAlgo;
- if(partitions == null) {
+ if (partitions == null) {
this.partitions = new Partition[0];
} else {
this.partitions = Arrays.copyOf(partitions, partitions.length);
}
partitionCtxts = new HashMap<String, ClusterLevelPartitionContext>();
- requestsInFlight = new RequestsInFlight();
- loadAverage = new LoadAverage();
- memoryConsumption = new MemoryConsumption();
- for(Partition partition : partitions){
+ for (Partition partition : partitions) {
minInstanceCount += partition.getPartitionMin();
maxInstanceCount += partition.getPartitionMax();
}
requiredInstanceCountBasedOnStats = minInstanceCount;
requiredInstanceCountBasedOnDependencies = minInstanceCount;
+ instanceIdToInstanceContextMap = new HashMap<String, InstanceContext>();
}
@@ -130,16 +107,15 @@ public class NetworkPartitionContext implements Serializable{
if (obj == null) {
return false;
}
- if (!(obj instanceof NetworkPartitionContext)) {
+ if (!(obj instanceof ParentComponentLevelNetworkPartitionContext)) {
return false;
}
- final NetworkPartitionContext other = (NetworkPartitionContext) obj;
+ final ParentComponentLevelNetworkPartitionContext other = (ParentComponentLevelNetworkPartitionContext) obj;
if (this.id == null) {
- if (other.id != null) {
+ if (this.id != null) {
return false;
}
- }
- else if (!this.id.equals(other.id)) {
+ } else if (!this.id.equals(this.id)) {
return false;
}
return true;
@@ -148,7 +124,7 @@ public class NetworkPartitionContext implements Serializable{
@Override
public String toString() {
return "NetworkPartitionContext [id=" + id + "partitionAlgorithm=" + partitionAlgorithm + ", minInstanceCount=" +
- minInstanceCount + ", maxInstanceCount=" + maxInstanceCount + "]";
+ minInstanceCount + ", maxInstanceCount=" + maxInstanceCount + "]";
}
public int getCurrentPartitionIndex() {
@@ -159,202 +135,6 @@ public class NetworkPartitionContext implements Serializable{
this.currentPartitionIndex = currentPartitionIndex;
}
- public float getAverageRequestsServedPerInstance() { return averageRequestsServedPerInstance;}
-
- public void setAverageRequestsServedPerInstance(float averageRequestServedPerInstance) {
- this.averageRequestsServedPerInstance = averageRequestServedPerInstance;
- averageRequestServedPerInstanceReset = true;
-
- 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));
-
- }
- }
-
- public float getRequestsServedPerInstance() { return requestsServedPerInstance;}
-
- public float getAverageRequestsInFlight() {
- return requestsInFlight.getAverage();
- }
-
- public void setAverageRequestsInFlight(float averageRequestsInFlight) {
- requestsInFlight.setAverage(averageRequestsInFlight);
- averageRifReset = true;
- if(secondDerivativeRifRest && gradientRifReset){
- rifReset = true;
- if(log.isDebugEnabled()){
- log.debug(String.format("Requests in flights stats are reset, ready to do scale check [network partition] %s"
- , this.id));
- }
- }
- }
-
- public float getRequestsInFlightSecondDerivative() {
- return requestsInFlight.getSecondDerivative();
- }
-
- public void setRequestsInFlightSecondDerivative(float requestsInFlightSecondDerivative) {
- requestsInFlight.setSecondDerivative(requestsInFlightSecondDerivative);
- secondDerivativeRifRest = true;
- if(averageRifReset && gradientRifReset){
- rifReset = true;
- if(log.isDebugEnabled()){
- log.debug(String.format("Requests in flights stats are reset, ready to do scale check [network partition] %s"
- , this.id));
- }
- }
- }
-
- public float getRequestsInFlightGradient() {
- return requestsInFlight.getGradient();
- }
-
- public void setRequestsInFlightGradient(float requestsInFlightGradient) {
- requestsInFlight.setGradient(requestsInFlightGradient);
- gradientRifReset = true;
- if(secondDerivativeRifRest && averageRifReset){
- rifReset = true;
- if(log.isDebugEnabled()){
- log.debug(String.format("Requests in flights stats are reset, ready to do scale check [network partition] %s"
- , this.id));
- }
- }
- }
-
- public boolean isRifReset() {
- return rifReset;
- }
-
- public void setRifReset(boolean rifReset) {
- this.rifReset = rifReset;
- this.averageRifReset = rifReset;
- this.gradientRifReset = rifReset;
- this.secondDerivativeRifRest = rifReset;
- }
-
-
- public float getAverageMemoryConsumption() {
- return memoryConsumption.getAverage();
- }
-
- public void setAverageMemoryConsumption(float averageMemoryConsumption) {
- memoryConsumption.setAverage(averageMemoryConsumption);
- averageMemoryConsumptionReset = true;
- if(secondDerivativeMemoryConsumptionRest && gradientMemoryConsumptionReset){
- memoryConsumptionReset = true;
- if(log.isDebugEnabled()){
- log.debug(String.format("Memory consumption stats are reset, ready to do scale check [network partition] %s"
- , this.id));
- }
- }
- }
-
- public float getMemoryConsumptionSecondDerivative() {
- return memoryConsumption.getSecondDerivative();
- }
-
- public void setMemoryConsumptionSecondDerivative(float memoryConsumptionSecondDerivative) {
- memoryConsumption.setSecondDerivative(memoryConsumptionSecondDerivative);
- secondDerivativeMemoryConsumptionRest = true;
- if(averageMemoryConsumptionReset && gradientMemoryConsumptionReset){
- memoryConsumptionReset = true;
- if(log.isDebugEnabled()){
- log.debug(String.format("Memory consumption stats are reset, ready to do scale check [network partition] %s"
- , this.id));
- }
- }
- }
-
- public float getMemoryConsumptionGradient() {
- return memoryConsumption.getGradient();
- }
-
- public void setMemoryConsumptionGradient(float memoryConsumptionGradient) {
- memoryConsumption.setGradient(memoryConsumptionGradient);
- gradientMemoryConsumptionReset = true;
- if(secondDerivativeMemoryConsumptionRest && averageMemoryConsumptionReset){
- memoryConsumptionReset = true;
- if(log.isDebugEnabled()){
- log.debug(String.format("Memory consumption stats are reset, ready to do scale check [network partition] %s"
- , this.id));
- }
- }
- }
-
- public boolean isMemoryConsumptionReset() {
- return memoryConsumptionReset;
- }
-
- public void setMemoryConsumptionReset(boolean memoryConsumptionReset) {
- this.memoryConsumptionReset = memoryConsumptionReset;
- this.averageMemoryConsumptionReset = memoryConsumptionReset;
- this.gradientMemoryConsumptionReset = memoryConsumptionReset;
- this.secondDerivativeMemoryConsumptionRest = memoryConsumptionReset;
- }
-
-
- public float getAverageLoadAverage() {
- return loadAverage.getAverage();
- }
-
- public void setAverageLoadAverage(float averageLoadAverage) {
- loadAverage.setAverage(averageLoadAverage);
- averageLoadAverageReset = true;
- if(secondDerivativeLoadAverageRest && gradientLoadAverageReset){
- loadAverageReset = true;
- if(log.isDebugEnabled()){
- log.debug(String.format("Load average stats are reset, ready to do scale check [network partition] %s"
- , this.id));
- }
- }
- }
-
- public float getLoadAverageSecondDerivative() {
- return loadAverage.getSecondDerivative();
- }
-
- public void setLoadAverageSecondDerivative(float loadAverageSecondDerivative) {
- loadAverage.setSecondDerivative(loadAverageSecondDerivative);
- secondDerivativeLoadAverageRest = true;
- if(averageLoadAverageReset && gradientLoadAverageReset){
- loadAverageReset = true;
- if(log.isDebugEnabled()){
- log.debug(String.format("Load average stats are reset, ready to do scale check [network partition] %s"
- , this.id));
- }
- }
- }
-
- public float getLoadAverageGradient() {
- return loadAverage.getGradient();
- }
-
- public void setLoadAverageGradient(float loadAverageGradient) {
- loadAverage.setGradient(loadAverageGradient);
- gradientLoadAverageReset = true;
- if(secondDerivativeLoadAverageRest && averageLoadAverageReset){
- loadAverageReset = true;
- if(log.isDebugEnabled()){
- log.debug(String.format("Load average stats are reset, ready to do scale check [network partition] %s"
- , this.id));
- }
- }
- }
-
- public boolean isLoadAverageReset() {
- return loadAverageReset;
- }
-
- public void setLoadAverageReset(boolean loadAverageReset) {
- this.loadAverageReset = loadAverageReset;
- this.averageLoadAverageReset = loadAverageReset;
- this.gradientLoadAverageReset = loadAverageReset;
- this.secondDerivativeLoadAverageRest = loadAverageReset;
- }
-
-
-
public String getId() {
return id;
}
@@ -380,14 +160,14 @@ public class NetworkPartitionContext implements Serializable{
}
public int getNonTerminatedMemberCountOfPartition(String partitionId) {
- if(partitionCtxts.containsKey(partitionId)){
+ if (partitionCtxts.containsKey(partitionId)) {
return getPartitionCtxt(partitionId).getNonTerminatedMemberCount();
}
return 0;
}
public int getActiveMemberCount(String currentPartitionId) {
- if(partitionCtxts.containsKey(currentPartitionId)){
+ if (partitionCtxts.containsKey(currentPartitionId)) {
return getPartitionCtxt(currentPartitionId).getActiveMemberCount();
}
return 0;
@@ -400,6 +180,7 @@ public class NetworkPartitionContext implements Serializable{
public void resetScaleDownRequestsCount() {
this.scaleDownRequestsCount = 0;
}
+
public void increaseScaleDownRequestsCount() {
this.scaleDownRequestsCount += 1;
}
@@ -419,4 +200,17 @@ public class NetworkPartitionContext implements Serializable{
public void setRequiredInstanceCountBasedOnDependencies(int requiredInstanceCountBasedOnDependencies) {
this.requiredInstanceCountBasedOnDependencies = requiredInstanceCountBasedOnDependencies;
}
-}
\ No newline at end of file
+
+ public Map<String, InstanceContext> getInstanceIdToInstanceContextMap() {
+ return instanceIdToInstanceContextMap;
+ }
+
+ public void setInstanceIdToInstanceContextMap(Map<String, InstanceContext> instanceIdToInstanceContextMap) {
+ this.instanceIdToInstanceContextMap = instanceIdToInstanceContextMap;
+ }
+
+ public void addInstanceContext(InstanceContext context) {
+ this.instanceIdToInstanceContextMap.put(context.getInstanceId(), context);
+
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/746bdc10/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ParentComponentLevelNetworkPartitionContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ParentComponentLevelNetworkPartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ParentComponentLevelNetworkPartitionContext.java
new file mode 100644
index 0000000..e9ca470
--- /dev/null
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ParentComponentLevelNetworkPartitionContext.java
@@ -0,0 +1,222 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.stratos.autoscaler;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.autoscaler.policy.model.LoadAverage;
+import org.apache.stratos.autoscaler.policy.model.MemoryConsumption;
+import org.apache.stratos.autoscaler.policy.model.RequestsInFlight;
+import org.apache.stratos.cloud.controller.stub.deployment.partition.Partition;
+import org.apache.stratos.messaging.domain.instance.context.InstanceContext;
+
+import java.io.Serializable;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Holds runtime data of a network partition.
+ *
+ */
+public class ParentComponentLevelNetworkPartitionContext extends NetworkPartitionContext implements Serializable {
+ private static final Log log = LogFactory.getLog(ParentComponentLevelNetworkPartitionContext.class);
+ private final String id;
+ private int scaleDownRequestsCount = 0;
+ private float averageRequestsServedPerInstance;
+
+ private int minInstanceCount = 0, maxInstanceCount = 0;
+ private int requiredInstanceCountBasedOnStats;
+ private int requiredInstanceCountBasedOnDependencies;
+
+ private Map<String, InstanceContext> instanceIdToInstanceContextMap;
+
+
+ private final String partitionAlgorithm;
+
+ private final Partition[] partitions;
+
+ //details required for partition selection algorithms
+ private int currentPartitionIndex;
+
+ //partitions of this network partition
+ private final Map<String, PartitionContext> partitionCtxts;
+
+ public ParentComponentLevelNetworkPartitionContext(String id, String partitionAlgo, Partition[] partitions) {
+
+ super(id, partitionAlgo, partitions);
+ this.id = id;
+ this.partitionAlgorithm = partitionAlgo;
+ if (partitions == null) {
+ this.partitions = new Partition[0];
+ } else {
+ this.partitions = Arrays.copyOf(partitions, partitions.length);
+ }
+ partitionCtxts = new HashMap<String, PartitionContext>();
+ for (Partition partition : partitions) {
+ minInstanceCount += partition.getPartitionMin();
+ maxInstanceCount += partition.getPartitionMax();
+ }
+ requiredInstanceCountBasedOnStats = minInstanceCount;
+ requiredInstanceCountBasedOnDependencies = minInstanceCount;
+ instanceIdToInstanceContextMap = new HashMap<String, InstanceContext>();
+
+ }
+
+ public int getMinInstanceCount() {
+ return minInstanceCount;
+ }
+
+ public void setMinInstanceCount(int minInstanceCount) {
+ this.minInstanceCount = minInstanceCount;
+ }
+
+ public int getMaxInstanceCount() {
+ return maxInstanceCount;
+ }
+
+ public void setMaxInstanceCount(int maxInstanceCount) {
+ this.maxInstanceCount = maxInstanceCount;
+ }
+
+ public int hashCode() {
+
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((this.id == null) ? 0 : this.id.hashCode());
+ return result;
+
+ }
+
+ public boolean equals(final Object obj) {
+
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (!(obj instanceof ParentComponentLevelNetworkPartitionContext)) {
+ return false;
+ }
+ final ParentComponentLevelNetworkPartitionContext other = (ParentComponentLevelNetworkPartitionContext) obj;
+ if (this.id == null) {
+ if (other.id != null) {
+ return false;
+ }
+ } else if (!this.id.equals(other.id)) {
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public String toString() {
+ return "NetworkPartitionContext [id=" + id + "partitionAlgorithm=" + partitionAlgorithm + ", minInstanceCount=" +
+ minInstanceCount + ", maxInstanceCount=" + maxInstanceCount + "]";
+ }
+
+ public int getCurrentPartitionIndex() {
+ return currentPartitionIndex;
+ }
+
+ public void setCurrentPartitionIndex(int currentPartitionIndex) {
+ this.currentPartitionIndex = currentPartitionIndex;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public Map<String, PartitionContext> getPartitionCtxts() {
+ return partitionCtxts;
+ }
+
+ public PartitionContext getPartitionCtxt(String partitionId) {
+ return partitionCtxts.get(partitionId);
+ }
+
+ public void addPartitionContext(PartitionContext partitionContext) {
+ partitionCtxts.put(partitionContext.getPartitionId(), partitionContext);
+ }
+
+ public String getPartitionAlgorithm() {
+ return partitionAlgorithm;
+ }
+
+ public Partition[] getPartitions() {
+ return partitions;
+ }
+
+ public int getNonTerminatedMemberCountOfPartition(String partitionId) {
+ if (partitionCtxts.containsKey(partitionId)) {
+ return getPartitionCtxt(partitionId).getNonTerminatedMemberCount();
+ }
+ return 0;
+ }
+
+ public int getActiveMemberCount(String currentPartitionId) {
+ if (partitionCtxts.containsKey(currentPartitionId)) {
+ return getPartitionCtxt(currentPartitionId).getActiveMemberCount();
+ }
+ return 0;
+ }
+
+ public int getScaleDownRequestsCount() {
+ return scaleDownRequestsCount;
+ }
+
+ public void resetScaleDownRequestsCount() {
+ this.scaleDownRequestsCount = 0;
+ }
+
+ public void increaseScaleDownRequestsCount() {
+ this.scaleDownRequestsCount += 1;
+ }
+
+ public float getRequiredInstanceCountBasedOnStats() {
+ return requiredInstanceCountBasedOnStats;
+ }
+
+ public void setRequiredInstanceCountBasedOnStats(int requiredInstanceCountBasedOnStats) {
+ this.requiredInstanceCountBasedOnStats = requiredInstanceCountBasedOnStats;
+ }
+
+ public int getRequiredInstanceCountBasedOnDependencies() {
+ return requiredInstanceCountBasedOnDependencies;
+ }
+
+ public void setRequiredInstanceCountBasedOnDependencies(int requiredInstanceCountBasedOnDependencies) {
+ this.requiredInstanceCountBasedOnDependencies = requiredInstanceCountBasedOnDependencies;
+ }
+
+ public Map<String, InstanceContext> getInstanceIdToInstanceContextMap() {
+ return instanceIdToInstanceContextMap;
+ }
+
+ public void setInstanceIdToInstanceContextMap(Map<String, InstanceContext> instanceIdToInstanceContextMap) {
+ this.instanceIdToInstanceContextMap = instanceIdToInstanceContextMap;
+ }
+
+ public void addInstanceContext(InstanceContext context) {
+ this.instanceIdToInstanceContextMap.put(context.getInstanceId(), context);
+
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/stratos/blob/746bdc10/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/VMClusterContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/VMClusterContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/VMClusterContext.java
index 1c031a5..b492d76 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/VMClusterContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/VMClusterContext.java
@@ -33,12 +33,12 @@ public class VMClusterContext extends AbstractClusterContext {
private static final Log log = LogFactory.getLog(VMClusterContext.class);
// Map<NetworkpartitionId, Network Partition Context>
- protected Map<String, NetworkPartitionContext> networkPartitionCtxts;
+ protected Map<String, ClusterLevelNetworkPartitionContext> networkPartitionCtxts;
protected DeploymentPolicy deploymentPolicy;
protected AutoscalePolicy autoscalePolicy;
public VMClusterContext(String clusterId, String serviceId, AutoscalePolicy autoscalePolicy, DeploymentPolicy deploymentPolicy,
- Map<String, NetworkPartitionContext> networkPartitionCtxts) {
+ Map<String, ClusterLevelNetworkPartitionContext> networkPartitionCtxts) {
super(clusterId, serviceId);
this.deploymentPolicy = deploymentPolicy;
@@ -47,7 +47,7 @@ public class VMClusterContext extends AbstractClusterContext {
}
- public Map<String, NetworkPartitionContext> getNetworkPartitionCtxts(){
+ public Map<String, ClusterLevelNetworkPartitionContext> getNetworkPartitionCtxts(){
return networkPartitionCtxts;
}
@@ -67,11 +67,11 @@ public class VMClusterContext extends AbstractClusterContext {
this.autoscalePolicy = autoscalePolicy;
}
- public NetworkPartitionContext getNetworkPartitionCtxt(String networkPartitionId) {
+ public ClusterLevelNetworkPartitionContext getNetworkPartitionCtxt(String networkPartitionId) {
return networkPartitionCtxts.get(networkPartitionId);
}
- public void setPartitionCtxt(Map<String, NetworkPartitionContext> partitionCtxt) {
+ public void setPartitionCtxt(Map<String, ClusterLevelNetworkPartitionContext> partitionCtxt) {
this.networkPartitionCtxts = partitionCtxt;
}
@@ -79,15 +79,15 @@ public class VMClusterContext extends AbstractClusterContext {
return networkPartitionCtxts.containsKey(partitionId);
}
- public void addNetworkPartitionCtxt(NetworkPartitionContext ctxt) {
+ public void addNetworkPartitionCtxt(ClusterLevelNetworkPartitionContext ctxt) {
this.networkPartitionCtxts.put(ctxt.getId(), ctxt);
}
- public NetworkPartitionContext getPartitionCtxt(String id) {
+ public ClusterLevelNetworkPartitionContext getPartitionCtxt(String id) {
return this.networkPartitionCtxts.get(id);
}
- public NetworkPartitionContext getNetworkPartitionCtxt(Member member) {
+ public ClusterLevelNetworkPartitionContext getNetworkPartitionCtxt(Member member) {
log.info("***** getNetworkPartitionCtxt " + member.getNetworkPartitionId());
String networkPartitionId = member.getNetworkPartitionId();
if (networkPartitionCtxts.containsKey(networkPartitionId)) {
http://git-wip-us.apache.org/repos/asf/stratos/blob/746bdc10/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/VMServiceClusterContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/VMServiceClusterContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/VMServiceClusterContext.java
index 6b9fefd..6c9d359 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/VMServiceClusterContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/VMServiceClusterContext.java
@@ -22,7 +22,6 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy;
import org.apache.stratos.autoscaler.policy.model.DeploymentPolicy;
-import org.apache.stratos.messaging.domain.topology.Member;
import java.util.Map;
@@ -36,7 +35,7 @@ public class VMServiceClusterContext extends VMClusterContext {
protected AutoscalePolicy autoscalePolicy;
public VMServiceClusterContext(String clusterId, String serviceId, AutoscalePolicy autoscalePolicy, DeploymentPolicy deploymentPolicy,
- Map<String, NetworkPartitionContext> networkPartitionCtxts) {
+ Map<String, ClusterLevelNetworkPartitionContext> networkPartitionCtxts) {
super(clusterId, serviceId, autoscalePolicy, deploymentPolicy, networkPartitionCtxts);
this.autoscalePolicy = autoscalePolicy;
http://git-wip-us.apache.org/repos/asf/stratos/blob/746bdc10/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/AutoscaleAlgorithm.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/AutoscaleAlgorithm.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/AutoscaleAlgorithm.java
index 8ae0fb6..c27cc1e 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/AutoscaleAlgorithm.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/AutoscaleAlgorithm.java
@@ -46,18 +46,18 @@ public interface AutoscaleAlgorithm {
/**
* Returns a {@link Partition} to scale up from the given {@link PartitionGroup} according to algorithm
- * @param networkPartitionContext {@link org.apache.stratos.autoscaler.NetworkPartitionContext} which need the {@link Partition}
+ * @param clusterLevelNetworkPartitionContext {@link org.apache.stratos.autoscaler.ClusterLevelNetworkPartitionContext} which need the {@link Partition}
* @param clusterId Id of the cluster which need the {@link Partition}
* @return {@link Partition} to scale up
*/
- public Partition getNextScaleUpPartition(NetworkPartitionContext networkPartitionContext, String clusterId);
+ public Partition getNextScaleUpPartition(NetworkPartitionContext clusterLevelNetworkPartitionContext, String clusterId);
/**
* Returns a {@link Partition} to scale down from the given {@link PartitionGroup} according to algorithm
- * @param networkPartitionContext {@link org.apache.stratos.autoscaler.NetworkPartitionContext} which need the {@link Partition}
+ * @param clusterLevelNetworkPartitionContext {@link org.apache.stratos.autoscaler.ClusterLevelNetworkPartitionContext} which need the {@link Partition}
* @param clusterId Id of the cluster which need the {@link Partition}
* @return {@link Partition} to scale down
*/
- public Partition getNextScaleDownPartition(NetworkPartitionContext networkPartitionContext, String clusterId);
+ public Partition getNextScaleDownPartition(NetworkPartitionContext clusterLevelNetworkPartitionContext, String clusterId);
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/746bdc10/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/OneAfterAnother.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/OneAfterAnother.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/OneAfterAnother.java
index e234713..afae0e8 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/OneAfterAnother.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/OneAfterAnother.java
@@ -35,7 +35,7 @@ import java.util.List;
/**
* This class is used for selecting a {@link Partition} one after another and checking availability of
- * partitions of a {@link NetworkPartitionContext}
+ * partitions of a {@link org.apache.stratos.autoscaler.ClusterLevelNetworkPartitionContext}
* One after another means it completes partitions in the order defined in
* {@link org.apache.stratos.autoscaler.policy.model.DeploymentPolicy}, and go to next if current one
* reached the max limit
@@ -44,23 +44,23 @@ public class OneAfterAnother implements AutoscaleAlgorithm {
private static final Log log = LogFactory.getLog(OneAfterAnother.class);
- public Partition getNextScaleUpPartition(NetworkPartitionContext networkPartitionContext, String clusterId) {
+ public Partition getNextScaleUpPartition(NetworkPartitionContext clusterLevelNetworkPartitionContext, String clusterId) {
try {
if (log.isDebugEnabled())
log.debug(String.format("Searching for a partition to up [network partition] %s",
- networkPartitionContext.getId())) ;
- int currentPartitionIndex = networkPartitionContext.getCurrentPartitionIndex();
- List<?> partitions = Arrays.asList(networkPartitionContext.getPartitions());
+ clusterLevelNetworkPartitionContext.getId())) ;
+ int currentPartitionIndex = clusterLevelNetworkPartitionContext.getCurrentPartitionIndex();
+ List<?> partitions = Arrays.asList(clusterLevelNetworkPartitionContext.getPartitions());
int noOfPartitions = partitions.size();
for (int i = currentPartitionIndex; i < noOfPartitions; i++) {
if (partitions.get(currentPartitionIndex) instanceof Partition) {
- currentPartitionIndex = networkPartitionContext.getCurrentPartitionIndex();
+ currentPartitionIndex = clusterLevelNetworkPartitionContext.getCurrentPartitionIndex();
Partition currentPartition = (Partition) partitions.get(currentPartitionIndex);
String currentPartitionId = currentPartition.getId();
- int nonTerminatedMemberCountOfPartition = networkPartitionContext.getNonTerminatedMemberCountOfPartition(currentPartitionId);
+ int nonTerminatedMemberCountOfPartition = clusterLevelNetworkPartitionContext.getNonTerminatedMemberCountOfPartition(currentPartitionId);
if (nonTerminatedMemberCountOfPartition < currentPartition.getPartitionMax()) {
// current partition is free
if (log.isDebugEnabled())
@@ -75,37 +75,37 @@ public class OneAfterAnother implements AutoscaleAlgorithm {
return null;
}
- networkPartitionContext.setCurrentPartitionIndex(currentPartitionIndex + 1);
+ clusterLevelNetworkPartitionContext.setCurrentPartitionIndex(currentPartitionIndex + 1);
}
}
}
if (log.isDebugEnabled())
- log.debug(String.format("No free partition found at network partition %s" , networkPartitionContext));
+ log.debug(String.format("No free partition found at network partition %s" , clusterLevelNetworkPartitionContext));
} catch (Exception e) {
log.error("Error occurred while searching for next scale up partition", e);
}
return null;
}
- public Partition getNextScaleDownPartition(NetworkPartitionContext networkPartitionContext, String clusterId) {
+ public Partition getNextScaleDownPartition(NetworkPartitionContext clusterLevelNetworkPartitionContext, String clusterId) {
try {
if (log.isDebugEnabled())
log.debug(String.format("Searching for a partition to scale down [network partition] %s",
- networkPartitionContext.getId())) ;
- int currentPartitionIndex = networkPartitionContext.getCurrentPartitionIndex();
- List<?> partitions = Arrays.asList(networkPartitionContext.getPartitions());
+ clusterLevelNetworkPartitionContext.getId())) ;
+ int currentPartitionIndex = clusterLevelNetworkPartitionContext.getCurrentPartitionIndex();
+ List<?> partitions = Arrays.asList(clusterLevelNetworkPartitionContext.getPartitions());
for (int i = currentPartitionIndex; i >= 0; i--) {
if (partitions.get(currentPartitionIndex) instanceof Partition) {
- currentPartitionIndex = networkPartitionContext.getCurrentPartitionIndex();
+ currentPartitionIndex = clusterLevelNetworkPartitionContext.getCurrentPartitionIndex();
Partition currentPartition = (Partition) partitions.get(currentPartitionIndex);
String currentPartitionId = currentPartition.getId();
// has more than minimum instances.
- int currentlyActiveMemberCount = networkPartitionContext.getActiveMemberCount(currentPartitionId);
+ int currentlyActiveMemberCount = clusterLevelNetworkPartitionContext.getActiveMemberCount(currentPartitionId);
if ( currentlyActiveMemberCount > currentPartition.getPartitionMin()) {
// current partition is free
if (log.isDebugEnabled())
@@ -122,13 +122,13 @@ public class OneAfterAnother implements AutoscaleAlgorithm {
}
// Set next partition as current partition in Autoscaler Context
currentPartitionIndex = currentPartitionIndex - 1;
- networkPartitionContext.setCurrentPartitionIndex(currentPartitionIndex);
+ clusterLevelNetworkPartitionContext.setCurrentPartitionIndex(currentPartitionIndex);
}
}
}
if (log.isDebugEnabled())
- log.debug("No space found in this network partition " + networkPartitionContext.getId());
+ log.debug("No space found in this network partition " + clusterLevelNetworkPartitionContext.getId());
} catch (Exception e) {
log.error("Error occurred while searching for scale down partition", e);
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/746bdc10/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/RoundRobin.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/RoundRobin.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/RoundRobin.java
index 9f54039..db24696 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/RoundRobin.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/RoundRobin.java
@@ -29,38 +29,38 @@ import java.util.List;
/**
* This class is used for selecting a {@link Partition} in round robin manner and checking availability of
- * {@link Partition}s of a {@link org.apache.stratos.autoscaler.NetworkPartitionContext}
+ * {@link Partition}s of a {@link org.apache.stratos.autoscaler.ClusterLevelNetworkPartitionContext}
*
*/
public class RoundRobin implements AutoscaleAlgorithm{
private static final Log log = LogFactory.getLog(RoundRobin.class);
- public Partition getNextScaleUpPartition(NetworkPartitionContext networkPartitionContext, String clusterId){
+ public Partition getNextScaleUpPartition(NetworkPartitionContext clusterLevelNetworkPartitionContext, String clusterId){
try{
if (log.isDebugEnabled())
log.debug(String.format("Searching for a partition to scale up [network partition] %s",
- networkPartitionContext.getId())) ;
- List<?> partitions = Arrays.asList(networkPartitionContext.getPartitions());
+ clusterLevelNetworkPartitionContext.getId())) ;
+ List<?> partitions = Arrays.asList(clusterLevelNetworkPartitionContext.getPartitions());
int noOfPartitions = partitions.size();
for(int i=0; i < noOfPartitions; i++)
{
- int currentPartitionIndex = networkPartitionContext.getCurrentPartitionIndex();
+ int currentPartitionIndex = clusterLevelNetworkPartitionContext.getCurrentPartitionIndex();
if (partitions.get(currentPartitionIndex) instanceof Partition) {
Partition currentPartition = (Partition) partitions.get(currentPartitionIndex);
String currentPartitionId = currentPartition.getId();
// point to next partition
int nextPartitionIndex = currentPartitionIndex == noOfPartitions - 1 ? 0 : currentPartitionIndex+1;
- networkPartitionContext.setCurrentPartitionIndex(nextPartitionIndex);
- int nonTerminatedMemberCountOfPartition = networkPartitionContext.getNonTerminatedMemberCountOfPartition(currentPartitionId);
+ clusterLevelNetworkPartitionContext.setCurrentPartitionIndex(nextPartitionIndex);
+ int nonTerminatedMemberCountOfPartition = clusterLevelNetworkPartitionContext.getNonTerminatedMemberCountOfPartition(currentPartitionId);
if(nonTerminatedMemberCountOfPartition < currentPartition.getPartitionMax()){
// current partition is free
if (log.isDebugEnabled())
log.debug(String.format("A free space found for scale up in partition %s [current] %s [max] %s",
- currentPartitionId, networkPartitionContext.getNonTerminatedMemberCountOfPartition(currentPartitionId),
+ currentPartitionId, clusterLevelNetworkPartitionContext.getNonTerminatedMemberCountOfPartition(currentPartitionId),
currentPartition.getPartitionMax())) ;
return currentPartition;
}
@@ -73,7 +73,7 @@ public class RoundRobin implements AutoscaleAlgorithm{
// none of the partitions were free.
if(log.isDebugEnabled()) {
- log.debug("No free partition found at network partition " + networkPartitionContext);
+ log.debug("No free partition found at network partition " + clusterLevelNetworkPartitionContext);
}
} catch (Exception e) {
log.error("Error occurred while searching for next scale up partition", e);
@@ -83,16 +83,16 @@ public class RoundRobin implements AutoscaleAlgorithm{
@Override
- public Partition getNextScaleDownPartition(NetworkPartitionContext networkPartitionContext, String clusterId) {
+ public Partition getNextScaleDownPartition(NetworkPartitionContext clusterLevelNetworkPartitionContext, String clusterId) {
try{
if (log.isDebugEnabled())
log.debug(String.format("Searching for a partition to scale up [network partition] %s",
- networkPartitionContext.getId())) ;
- List<?> partitions = Arrays.asList(networkPartitionContext.getPartitions());
+ clusterLevelNetworkPartitionContext.getId())) ;
+ List<?> partitions = Arrays.asList(clusterLevelNetworkPartitionContext.getPartitions());
int noOfPartitions = partitions.size();
for (int i = 0; i < noOfPartitions; i++) {
- int currentPartitionIndex = networkPartitionContext.getCurrentPartitionIndex();
+ int currentPartitionIndex = clusterLevelNetworkPartitionContext.getCurrentPartitionIndex();
// point to next partition
if (currentPartitionIndex == 0) {
@@ -103,7 +103,7 @@ public class RoundRobin implements AutoscaleAlgorithm{
}
// Set next partition as current partition in Autoscaler Context
- networkPartitionContext.setCurrentPartitionIndex(currentPartitionIndex);
+ clusterLevelNetworkPartitionContext.setCurrentPartitionIndex(currentPartitionIndex);
if (partitions.get(currentPartitionIndex) instanceof Partition) {
@@ -111,7 +111,7 @@ public class RoundRobin implements AutoscaleAlgorithm{
String currentPartitionId = currentPartition.getId();
// has more than minimum instances.
- int currentlyActiveMemberCount = networkPartitionContext.getActiveMemberCount(currentPartitionId);
+ int currentlyActiveMemberCount = clusterLevelNetworkPartitionContext.getActiveMemberCount(currentPartitionId);
if (currentlyActiveMemberCount > currentPartition.getPartitionMin()) {
// current partition is free
if (log.isDebugEnabled())
@@ -133,7 +133,7 @@ public class RoundRobin implements AutoscaleAlgorithm{
if (log.isDebugEnabled())
log.debug("No partition found for scale down at network partition " +
- networkPartitionContext.getId());
+ clusterLevelNetworkPartitionContext.getId());
// none of the partitions were free.
} catch (Exception e) {
http://git-wip-us.apache.org/repos/asf/stratos/blob/746bdc10/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 4dcff2a..31f5763 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
@@ -78,7 +78,8 @@ public class ApplicationBuilder {
ApplicationsEventPublisher.sendApplicationCreatedEvent(application);
}
- public static void handleApplicationInstanceCreatedEvent(String appId, String instanceId) {
+ public static void handleApplicationInstanceCreatedEvent(String appId, String instanceId,
+ String networkPartitionId) {
if (log.isDebugEnabled()) {
log.debug("Handling application activation event: [application-id] " + appId);
}
@@ -99,6 +100,7 @@ public class ApplicationBuilder {
//setting the status, persist and publish
ApplicationInstanceContext context = new ApplicationInstanceContext(appId, instanceId);
context.setStatus(status);
+ context.setNetworkPartitionId(networkPartitionId);
application.addInstanceContext(instanceId, context);
//updateApplicationMonitor(appId, status);
ApplicationHolder.persistApplication(application);
http://git-wip-us.apache.org/repos/asf/stratos/blob/746bdc10/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 63e7055..6d91db3 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
@@ -546,7 +546,13 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
log.debug("application monitor is going to be started for [application] " +
appId);
}
- applicationMonitor = ApplicationMonitorFactory.getApplicationMonitor(appId);
+ try {
+ applicationMonitor = ApplicationMonitorFactory.getApplicationMonitor(appId);
+ } catch (PolicyValidationException e) {
+ String msg = "Application monitor creation failed for Application: ";
+ log.warn(msg, e);
+ retries--;
+ }
long end = System.currentTimeMillis();
log.info("Time taken to start app monitor: " + (end - start) / 1000);
success = true;
http://git-wip-us.apache.org/repos/asf/stratos/blob/746bdc10/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/ParentComponentMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/ParentComponentMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/ParentComponentMonitor.java
index 77832b0..1c563ee 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/ParentComponentMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/ParentComponentMonitor.java
@@ -20,6 +20,12 @@ package org.apache.stratos.autoscaler.monitor;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.autoscaler.Constants;
+import org.apache.stratos.autoscaler.ClusterLevelNetworkPartitionContext;
+import org.apache.stratos.autoscaler.ParentComponentLevelNetworkPartitionContext;
+import org.apache.stratos.autoscaler.algorithm.AutoscaleAlgorithm;
+import org.apache.stratos.autoscaler.algorithm.OneAfterAnother;
+import org.apache.stratos.autoscaler.algorithm.RoundRobin;
import org.apache.stratos.autoscaler.applications.ApplicationHolder;
import org.apache.stratos.autoscaler.applications.dependency.DependencyBuilder;
import org.apache.stratos.autoscaler.applications.dependency.DependencyTree;
@@ -27,7 +33,6 @@ import org.apache.stratos.autoscaler.applications.dependency.context.Application
import org.apache.stratos.autoscaler.applications.dependency.context.ClusterChildContext;
import org.apache.stratos.autoscaler.applications.dependency.context.GroupChildContext;
import org.apache.stratos.autoscaler.applications.topic.ApplicationBuilder;
-import org.apache.stratos.autoscaler.client.CloudControllerClient;
import org.apache.stratos.autoscaler.event.publisher.ClusterStatusEventPublisher;
import org.apache.stratos.autoscaler.exception.DependencyBuilderException;
import org.apache.stratos.autoscaler.exception.PartitionValidationException;
@@ -62,11 +67,15 @@ public abstract class ParentComponentMonitor extends Monitor {
protected List<String> inactiveMonitorsList;
//terminating monitors list
protected List<String> terminatingMonitorsList;
+ //network partition contexts
+ protected Map<String, ParentComponentLevelNetworkPartitionContext> networkPartitionCtxts;
+
public ParentComponentMonitor(ParentComponent component) throws DependencyBuilderException {
aliasToActiveMonitorsMap = new HashMap<String, Monitor>();
inactiveMonitorsList = new ArrayList<String>();
terminatingMonitorsList = new ArrayList<String>();
+ networkPartitionCtxts = new HashMap<String, ParentComponentLevelNetworkPartitionContext>();
//clusterIdToClusterMonitorsMap = new HashMap<String, AbstractClusterMonitor>();
this.id = component.getUniqueIdentifier();
//Building the startup dependencies for this monitor within the immediate children
@@ -496,6 +505,27 @@ public abstract class ParentComponentMonitor extends Monitor {
this.terminatingMonitorsList = terminatingMonitorsList;
}
+ public Map<String, ParentComponentLevelNetworkPartitionContext> getNetworkPartitionCtxts() {
+ return networkPartitionCtxts;
+ }
+
+ public void setNetworkPartitionCtxts(Map<String, ParentComponentLevelNetworkPartitionContext> networkPartitionCtxts) {
+ this.networkPartitionCtxts = networkPartitionCtxts;
+ }
+
+ public void addNetworkPartitionContext(ParentComponentLevelNetworkPartitionContext clusterLevelNetworkPartitionContext) {
+ this.networkPartitionCtxts.put(clusterLevelNetworkPartitionContext.getId(), clusterLevelNetworkPartitionContext);
+ }
+
+ public InstanceContext getInstanceContext(String instanceId) {
+ for(ParentComponentLevelNetworkPartitionContext context : this.networkPartitionCtxts.values()) {
+ if(context.getInstanceIdToInstanceContextMap().containsKey(instanceId)) {
+ return context.getInstanceIdToInstanceContextMap().get(instanceId);
+ }
+ }
+ return null;
+ }
+
private class MonitorAdder implements Runnable {
private ApplicationChildContext context;
private ParentComponentMonitor parent;
@@ -566,4 +596,24 @@ public abstract class ParentComponentMonitor extends Monitor {
}
}
+ public AutoscaleAlgorithm getAutoscaleAlgorithm(String partitionAlgorithm) {
+ AutoscaleAlgorithm autoscaleAlgorithm = null;
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Partition algorithm is ", partitionAlgorithm));
+ }
+ if (Constants.ROUND_ROBIN_ALGORITHM_ID.equals(partitionAlgorithm)) {
+
+ autoscaleAlgorithm = new RoundRobin();
+ } else if (Constants.ONE_AFTER_ANOTHER_ALGORITHM_ID.equals(partitionAlgorithm)) {
+
+ autoscaleAlgorithm = new OneAfterAnother();
+ } else {
+ if (log.isErrorEnabled()) {
+ log.error(String.format("Partition algorithm %s could not be identified !", partitionAlgorithm));
+ }
+ }
+ return autoscaleAlgorithm;
+ }
+
+
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/stratos/blob/746bdc10/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitor.java
index 6d9ffdc..096cf06 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitor.java
@@ -20,8 +20,10 @@ package org.apache.stratos.autoscaler.monitor.application;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.autoscaler.ParentComponentLevelNetworkPartitionContext;
import org.apache.stratos.autoscaler.applications.topic.ApplicationBuilder;
import org.apache.stratos.autoscaler.exception.DependencyBuilderException;
+import org.apache.stratos.autoscaler.exception.PolicyValidationException;
import org.apache.stratos.autoscaler.exception.TopologyInConsistentException;
import org.apache.stratos.autoscaler.monitor.Monitor;
import org.apache.stratos.autoscaler.monitor.MonitorStatusEventBuilder;
@@ -29,6 +31,9 @@ import org.apache.stratos.autoscaler.monitor.ParentComponentMonitor;
import org.apache.stratos.autoscaler.monitor.events.ApplicationStatusEvent;
import org.apache.stratos.autoscaler.monitor.events.MonitorScalingEvent;
import org.apache.stratos.autoscaler.monitor.events.MonitorStatusEvent;
+import org.apache.stratos.autoscaler.partition.PartitionGroup;
+import org.apache.stratos.autoscaler.policy.PolicyManager;
+import org.apache.stratos.autoscaler.policy.model.DeploymentPolicy;
import org.apache.stratos.messaging.domain.applications.Application;
import org.apache.stratos.messaging.domain.applications.ApplicationStatus;
import org.apache.stratos.messaging.domain.applications.GroupStatus;
@@ -51,7 +56,7 @@ public class ApplicationMonitor extends ParentComponentMonitor {
//setting the appId for the application
this.appId = application.getUniqueIdentifier();
//starting the first set of dependencies from its children
- startMinimumDependencies(application);
+ //TODO startMinimumDependencies(application);
}
@@ -166,8 +171,8 @@ public class ApplicationMonitor extends ParentComponentMonitor {
}
- private void startMinimumDependencies(Application application)
- throws TopologyInConsistentException {
+ public void startMinimumDependencies(Application application)
+ throws TopologyInConsistentException, PolicyValidationException {
//There will be one application instance
if (application.getInstanceContextCount() > 0) {
startDependency(application);
@@ -178,16 +183,44 @@ public class ApplicationMonitor extends ParentComponentMonitor {
}
private void createInstanceAndStartDependency(Application application)
- throws TopologyInConsistentException {
- String instanceId = createApplicationInstance(application);
+ throws TopologyInConsistentException, PolicyValidationException {
List<String> instanceIds = new ArrayList<String>();
- instanceIds.add(instanceId);
+ String deploymentPolicyName = application.getDeploymentPolicy();
+ if (deploymentPolicyName == null) {
+ String msg = "Deployment Policy is not specified to the [Application]:" + appId;
+ log.error(msg);
+ throw new PolicyValidationException(msg);
+ }
+
+ DeploymentPolicy deploymentPolicy =
+ PolicyManager.getInstance()
+ .getDeploymentPolicy(deploymentPolicyName);
+ if (deploymentPolicy == null) {
+ if (deploymentPolicy == null) {
+ String msg = "Deployment policy is null: [policy-name] " + deploymentPolicyName;
+ log.error(msg);
+ throw new PolicyValidationException(msg);
+ }
+ }
+ String instanceId;
+ for (PartitionGroup partitionGroup : deploymentPolicy.getPartitionGroups()) {
+ instanceId = createApplicationInstance(application, partitionGroup.getId());
+ ParentComponentLevelNetworkPartitionContext context = new ParentComponentLevelNetworkPartitionContext(partitionGroup.getId(),
+ partitionGroup.getPartitionAlgo(),
+ partitionGroup.getPartitions());
+ context.addInstanceContext(application.getInstanceContexts(instanceId));
+ this.addNetworkPartitionContext(context);
+
+ instanceIds.add(instanceId);
+ }
startDependency(application, instanceIds);
+
+
}
- private String createApplicationInstance(Application application) {
+ private String createApplicationInstance(Application application, String networkPartitionId) {
String instanceId = this.generateInstanceId(application);
- ApplicationBuilder.handleApplicationInstanceCreatedEvent(appId, instanceId);
+ ApplicationBuilder.handleApplicationInstanceCreatedEvent(appId, instanceId, networkPartitionId);
return instanceId;
}
[3/3] stratos git commit: fixing test failure
Posted by re...@apache.org.
fixing test failure
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/dd68738a
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/dd68738a
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/dd68738a
Branch: refs/heads/master
Commit: dd68738a4a805d70a134aa86acf08665de6c29e1
Parents: 746bdc1
Author: reka <rt...@gmail.com>
Authored: Thu Nov 27 16:12:03 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Thu Nov 27 16:30:14 2014 +0530
----------------------------------------------------------------------
.../modules/distribution/src/main/conf/drools/scaling.drl | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/dd68738a/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 4a8927f..5b081bf 100644
--- a/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl
+++ b/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl
@@ -24,7 +24,7 @@ import org.apache.stratos.messaging.domain.topology.Cluster;
import org.apache.stratos.autoscaler.AutoscalerContext;
import org.apache.stratos.autoscaler.MemberStatsContext;
import org.apache.stratos.autoscaler.Constants;
-import org.apache.stratos.autoscaler.NetworkPartitionContext;
+import org.apache.stratos.autoscaler.ClusterLevelNetworkPartitionContext;
import org.apache.stratos.autoscaler.policy.PolicyManager;
import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy;
import org.apache.stratos.autoscaler.policy.model.DeploymentPolicy;
@@ -61,7 +61,7 @@ global java.lang.Boolean arspiReset;
rule "Scaling Rule"
dialect "mvel"
when
- networkPartitionContext : NetworkPartitionContext ()
+ $networkPartitionContext : ClusterLevelNetworkPartitionContext ()
loadThresholds : LoadThresholds() from autoscalePolicy.getLoadThresholds()
algorithmName : String() from networkPartitionContext.getPartitionAlgorithm();