You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by re...@apache.org on 2014/12/21 11:15:04 UTC
[1/8] stratos git commit: fixing instanceId issue due to the recent
refactoring
Repository: stratos
Updated Branches:
refs/heads/master 23d2a44a6 -> 0426bb8ac
fixing instanceId issue due to the recent refactoring
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/eec3a72d
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/eec3a72d
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/eec3a72d
Branch: refs/heads/master
Commit: eec3a72da9df4580cc6408853966249a528f434b
Parents: 23d2a44
Author: reka <rt...@gmail.com>
Authored: Sun Dec 21 12:26:29 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Sun Dec 21 12:26:29 2014 +0530
----------------------------------------------------------------------
.../stratos/rest/endpoint/util/converter/ObjectConverter.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/eec3a72d/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/util/converter/ObjectConverter.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/util/converter/ObjectConverter.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/util/converter/ObjectConverter.java
index 7153232..7f20d14 100644
--- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/util/converter/ObjectConverter.java
+++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/util/converter/ObjectConverter.java
@@ -665,7 +665,7 @@ public class ObjectConverter {
clusterInstanceBean.setHostNames(new ArrayList<String>());
for (org.apache.stratos.messaging.domain.topology.Member member : cluster.getMembers()) {
- if (member.getInstanceId().equals(instanceId)) {
+ if (member.getClusterInstanceId().equals(instanceId)) {
Member memberBean = new Member();
memberBean.setClusterId(member.getClusterId());
memberBean.setLbClusterId(member.getLbClusterId());
[3/8] stratos git commit: adding support for handing life cyle of
instances in monitor and support group scaling based on that
Posted by re...@apache.org.
adding support for handing life cyle of instances in monitor and support group scaling based on that
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/b0d24c71
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/b0d24c71
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/b0d24c71
Branch: refs/heads/master
Commit: b0d24c71d3f5ba6755834a6f028e7b96d0ddb36f
Parents: 84015c2
Author: reka <rt...@gmail.com>
Authored: Sun Dec 21 14:11:47 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Sun Dec 21 14:11:47 2014 +0530
----------------------------------------------------------------------
.../applications/topic/ApplicationBuilder.java | 27 +++-
.../context/cluster/ClusterContext.java | 9 +-
.../network/NetworkPartitionContext.java | 154 ++++++++++++++++++-
.../monitor/component/ApplicationMonitor.java | 5 +-
.../monitor/component/GroupMonitor.java | 7 +-
.../autoscaler/rule/RuleTasksDelegator.java | 14 +-
6 files changed, 201 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/b0d24c71/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 7968acb..e0a8a31 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
@@ -25,6 +25,7 @@ import org.apache.stratos.autoscaler.applications.pojo.ApplicationClusterContext
import org.apache.stratos.autoscaler.client.CloudControllerClient;
import org.apache.stratos.autoscaler.context.AutoscalerContext;
import org.apache.stratos.autoscaler.context.partition.network.GroupLevelNetworkPartitionContext;
+import org.apache.stratos.autoscaler.context.partition.network.NetworkPartitionContext;
import org.apache.stratos.autoscaler.event.publisher.ClusterStatusEventPublisher;
import org.apache.stratos.autoscaler.exception.policy.InvalidPolicyException;
import org.apache.stratos.autoscaler.monitor.Monitor;
@@ -458,7 +459,8 @@ public class ApplicationBuilder {
if (groupInstance.isStateTransitionValid(status)) {
//setting the status, persist and publish
groupInstance.setStatus(status);
- updateGroupMonitor(appId, groupId, status, instanceId, groupInstance.getParentId());
+ updateGroupMonitor(appId, groupId, status, groupInstance.getNetworkPartitionId(),
+ instanceId, groupInstance.getParentId());
ApplicationHolder.persistApplication(application);
ApplicationsEventPublisher.sendGroupInstanceActivatedEvent(appId, groupId, instanceId);
} else {
@@ -563,7 +565,8 @@ public class ApplicationBuilder {
if (groupInstance.isStateTransitionValid(status)) {
//setting the status, persist and publish
groupInstance.setStatus(status);
- updateGroupMonitor(appId, groupId, status, instanceId, groupInstance.getParentId());
+ updateGroupMonitor(appId, groupId, status, groupInstance.getNetworkPartitionId(),
+ instanceId, groupInstance.getParentId());
ApplicationHolder.persistApplication(application);
ApplicationsEventPublisher.sendGroupInstanceInactivateEvent(appId, groupId, instanceId);
} else {
@@ -608,7 +611,8 @@ public class ApplicationBuilder {
if (groupInstance.isStateTransitionValid(status)) {
//setting the status, persist and publish
groupInstance.setStatus(status);
- updateGroupMonitor(appId, groupId, status, instanceId, groupInstance.getParentId());
+ updateGroupMonitor(appId, groupId, status, groupInstance.getNetworkPartitionId(),
+ instanceId, groupInstance.getParentId());
ApplicationHolder.persistApplication(application);
ApplicationsEventPublisher.sendGroupInstanceTerminatingEvent(appId, groupId, instanceId);
} else {
@@ -641,9 +645,24 @@ public class ApplicationBuilder {
}
private static void updateGroupMonitor(String appId, String groupId,
- GroupStatus status, String instanceId, String parentInstanceId) {
+ GroupStatus status, String networkPartitionId,
+ String instanceId, String parentInstanceId) {
GroupMonitor monitor = getGroupMonitor(appId, groupId);
if (monitor != null) {
+ if(status == GroupStatus.Active) {
+ monitor.getNetworkPartitionContext(networkPartitionId).
+ movePendingInstanceToActiveInstances(instanceId);
+ } else if(status == GroupStatus.Terminating) {
+ NetworkPartitionContext context = monitor.
+ getNetworkPartitionContext(networkPartitionId);
+ if(context.getActiveInstance(instanceId) != null) {
+ context.moveActiveInstanceToTerminationPendingInstances(instanceId);
+ } else if(context.getPendingInstance(instanceId) != null) {
+ context.movePendingInstanceToTerminationPendingInstances(instanceId);
+ }
+
+
+ }
monitor.setStatus(status, instanceId, parentInstanceId);
} else {
log.warn("Group monitor cannot be found: [group-id] " + groupId +
http://git-wip-us.apache.org/repos/asf/stratos/blob/b0d24c71/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterContext.java
index ef7068a..9b9df39 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterContext.java
@@ -283,7 +283,8 @@ public class ClusterContext extends AbstractClusterContext {
clusterLevelPartitionContext.setProperties(cluster.getProperties());
//add members to partition Context
- addMembersFromTopology(cluster, partition, clusterLevelPartitionContext);
+ addMembersFromTopology(cluster, partition, clusterLevelPartitionContext,
+ clusterInstanceContext.getId());
//adding it to the monitors context
clusterInstanceContext.addPartitionCtxt(clusterLevelPartitionContext);
@@ -305,10 +306,12 @@ public class ClusterContext extends AbstractClusterContext {
private void addMembersFromTopology(Cluster cluster,
org.apache.stratos.cloud.controller.stub.domain.Partition partition,
- ClusterLevelPartitionContext clusterLevelPartitionContext) {
+ ClusterLevelPartitionContext clusterLevelPartitionContext,
+ String ClusterInstanceId) {
for (Member member : cluster.getMembers()) {
String memberId = member.getMemberId();
- if (member.getPartitionId().equalsIgnoreCase(partition.getId())) {
+ if (member.getPartitionId().equalsIgnoreCase(partition.getId()) &&
+ member.getClusterInstanceId().equals(ClusterInstanceId)) {
MemberContext memberContext = new MemberContext();
memberContext.setClusterId(member.getClusterId());
memberContext.setMemberId(memberId);
http://git-wip-us.apache.org/repos/asf/stratos/blob/b0d24c71/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/NetworkPartitionContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/NetworkPartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/NetworkPartitionContext.java
index 0183220..5e3bd6a 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/NetworkPartitionContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/NetworkPartitionContext.java
@@ -21,9 +21,10 @@ package org.apache.stratos.autoscaler.context.partition.network;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.stratos.autoscaler.context.InstanceContext;
-import org.apache.stratos.autoscaler.context.group.GroupInstanceContext;
import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
import java.util.Map;
/**
@@ -35,6 +36,13 @@ public abstract class NetworkPartitionContext {
private final String id;
//group instances kept inside a partition
private Map<String, InstanceContext> instanceIdToInstanceContextMap;
+ //active instances
+ private List<InstanceContext> activeInstances;
+ //pending instances
+ private List<InstanceContext> pendingInstances;
+ //terminating pending instances
+ private List<InstanceContext> terminatingPending;
+ private int pendingMembersFailureCount = 0;
protected NetworkPartitionContext(String id) {
this.id = id;
@@ -70,4 +78,148 @@ public abstract class NetworkPartitionContext {
public boolean containsInstanceContext(String instanceId) {
return this.instanceIdToInstanceContextMap.containsKey(instanceId);
}
+
+ public List<InstanceContext> getActiveInstances() {
+ return activeInstances;
+ }
+
+ public void setActiveInstances(List<InstanceContext> activeInstances) {
+ this.activeInstances = activeInstances;
+ }
+
+ public List<InstanceContext> getPendingInstances() {
+ return pendingInstances;
+ }
+
+ public void setPendingInstances(List<InstanceContext> pendingInstances) {
+ this.pendingInstances = pendingInstances;
+ }
+
+ public void addPendingInstance(InstanceContext context) {
+ this.pendingInstances.add(context);
+ }
+
+ public int getPendingInstancesCount() {
+ return this.pendingInstances.size();
+ }
+
+ public int getActiveInstancesCount() {
+ return this.activeInstances.size();
+ }
+
+ public InstanceContext getActiveInstance(String instanceId) {
+ for (InstanceContext instanceContext : activeInstances) {
+ if (instanceId.equals(instanceContext.getId())) {
+ return instanceContext;
+ }
+ }
+ return null;
+ }
+
+ public InstanceContext getPendingInstance(String instanceId) {
+ for (InstanceContext instanceContext : pendingInstances) {
+ if (instanceId.equals(instanceContext.getId())) {
+ return instanceContext;
+ }
+ }
+ return null;
+ }
+
+
+ public void movePendingInstanceToActiveInstances(String instanceId) {
+ if (instanceId == null) {
+ return;
+ }
+ synchronized (pendingInstances) {
+ Iterator<InstanceContext> iterator = pendingInstances.listIterator();
+ while (iterator.hasNext()) {
+ InstanceContext pendingInstance = iterator.next();
+ if (pendingInstance == null) {
+ iterator.remove();
+ continue;
+ }
+ if (instanceId.equals(pendingInstance.getId())) {
+ // member is activated
+ // remove from pending list
+ iterator.remove();
+ // add to the activated list
+ this.activeInstances.add(pendingInstance);
+ pendingMembersFailureCount = 0;
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Pending instance is removed and added to the " +
+ "activated instance list. [Instance Id] %s", instanceId));
+ }
+ break;
+ }
+ }
+ }
+ }
+
+ public void moveActiveInstanceToTerminationPendingInstances(String instanceId) {
+ if (instanceId == null) {
+ return;
+ }
+ synchronized (activeInstances) {
+ Iterator<InstanceContext> iterator = activeInstances.listIterator();
+ while (iterator.hasNext()) {
+ InstanceContext activeInstance = iterator.next();
+ if (activeInstance == null) {
+ iterator.remove();
+ continue;
+ }
+ if (instanceId.equals(activeInstance.getId())) {
+ // member is activated
+ // remove from pending list
+ iterator.remove();
+ // add to the activated list
+ this.terminatingPending.add(activeInstance);
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Active instance is removed and added to the " +
+ "termination pending instance list. [Instance Id] %s", instanceId));
+ }
+ break;
+ }
+ }
+ }
+ }
+
+ public void movePendingInstanceToTerminationPendingInstances(String instanceId) {
+ if (instanceId == null) {
+ return;
+ }
+ synchronized (pendingInstances) {
+ Iterator<InstanceContext> iterator = pendingInstances.listIterator();
+ while (iterator.hasNext()) {
+ InstanceContext pendingInstance = iterator.next();
+ if (pendingInstance == null) {
+ iterator.remove();
+ continue;
+ }
+ if (instanceId.equals(pendingInstance.getId())) {
+ // member is activated
+ // remove from pending list
+ iterator.remove();
+ // add to the activated list
+ this.terminatingPending.add(pendingInstance);
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Pending instance is removed and added to the " +
+ "termination pending instance list. [Instance Id] %s", instanceId));
+ }
+ break;
+ }
+ }
+ }
+ }
+
+ public int getNonTerminatedInstancesCount() {
+ return this.activeInstances.size() + this.pendingInstances.size();
+ }
+
+ public List<InstanceContext> getTerminatingPending() {
+ return terminatingPending;
+ }
+
+ public void setTerminatingPending(List<InstanceContext> terminatingPending) {
+ this.terminatingPending = terminatingPending;
+ }
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/b0d24c71/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java
index 07c13fd..66a52cd 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java
@@ -96,8 +96,9 @@ public class ApplicationMonitor extends ParentComponentMonitor {
//stopping the monitoring when the group is inactive/Terminating/Terminated
if (instance.getStatus().getCode() <= GroupStatus.Active.getCode()) {
//Gives priority to scaling max out rather than dependency scaling
- if (!instanceContext.getIdToScalingOverMaxEvent().isEmpty()) {
- //handling the application bursting
+ if (!instanceContext.getIdToScalingOverMaxEvent().isEmpty() &&
+ networkPartitionContext.getPendingInstancesCount() > 0) {
+ //handling the application bursting only when there are no pending instances found
try {
if (log.isInfoEnabled()) {
log.info("Handling application busting, " +
http://git-wip-us.apache.org/repos/asf/stratos/blob/b0d24c71/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
index fd7717d..5eafaf9 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
@@ -116,8 +116,10 @@ public class GroupMonitor extends ParentComponentMonitor {
//Gives priority to scaling max out rather than dependency scaling
if (!instanceContext.getIdToScalingOverMaxEvent().isEmpty()) {
if(!hasScalingDependents) {
- //handling the group scaling
- if (groupScalingEnabled) {
+ //handling the group scaling and if pending instances found,
+ // reject the max
+ if (groupScalingEnabled &&
+ networkPartitionContext.getPendingInstancesCount() > 0) {
//one of the child is loaded and max out.
// Hence creating new group instance
if(log.isDebugEnabled()) {
@@ -511,6 +513,7 @@ public class GroupMonitor extends ParentComponentMonitor {
groupInstanceContext.addPartitionContext((GroupLevelPartitionContext) partitionContext);
groupLevelNetworkPartitionContext.addInstanceContext(groupInstanceContext);
+ groupLevelNetworkPartitionContext.addPendingInstance(groupInstanceContext);
if (log.isInfoEnabled()) {
log.info("Group [Instance context] " + instanceId +
http://git-wip-us.apache.org/repos/asf/stratos/blob/b0d24c71/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 9ef332c..4318e51 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
@@ -85,19 +85,27 @@ public class RuleTasksDelegator {
public int getNumberOfInstancesRequiredBasedOnMemoryConsumption(float threshold, double predictedValue,
int max, int min) {
- double numberOfAdditionalInstancesRequired = 0;
+ /*double numberOfAdditionalInstancesRequired = 0;
if(predictedValue != threshold) {
float scalingRange = 100 - threshold;
int instanceRange = max - min;
- if(instanceRange != 0){
+ if(instanceRange >= 0){
float gradient = scalingRange / instanceRange;
numberOfAdditionalInstancesRequired = (predictedValue - threshold) / gradient;
}
}
- return (int) Math.ceil(min + numberOfAdditionalInstancesRequired);
+ return (int) Math.ceil(min + numberOfAdditionalInstancesRequired);*/
+
+ double numberOfInstances;
+ if(threshold != 0) {
+
+ numberOfInstances = (min * predictedValue) / threshold;
+ return (int) Math.ceil(numberOfInstances);
+ }
+ return min;
}
public int getNumberOfInstancesRequiredBasedOnLoadAverage(float threshold, double predictedValue, int min) {
[7/8] stratos git commit: adding parent instance id to scale event
when communicating to parent
Posted by re...@apache.org.
adding parent instance id to scale event when communicating to parent
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/ea02c46d
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/ea02c46d
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/ea02c46d
Branch: refs/heads/master
Commit: ea02c46d8e7e7564fb0f2cb73eae255b7244a697
Parents: db87256
Author: reka <rt...@gmail.com>
Authored: Sun Dec 21 15:33:16 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Sun Dec 21 15:33:16 2014 +0530
----------------------------------------------------------------------
.../stratos/autoscaler/monitor/component/GroupMonitor.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/ea02c46d/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
index 7b0fd86..5780fbc 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
@@ -147,7 +147,7 @@ public class GroupMonitor extends ParentComponentMonitor {
//notifying the parent if no group scaling enabled here
MonitorStatusEventBuilder.handleScalingOverMaxEvent(parent,
networkPartitionContext.getId(),
- instanceContext.getId(),
+ instanceContext.getParentInstanceId(),
appId);
}
} else {
@@ -159,7 +159,7 @@ public class GroupMonitor extends ParentComponentMonitor {
//notifying the parent when scale dependents found
MonitorStatusEventBuilder.handleScalingOverMaxEvent(parent,
networkPartitionContext.getId(),
- instanceContext.getId(),
+ instanceContext.getParentInstanceId(),
appId);
}
//Resetting the max events
[5/8] stratos git commit: fixing issue when retriving existing
network partition
Posted by re...@apache.org.
fixing issue when retriving existing network partition
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/2c05816d
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/2c05816d
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/2c05816d
Branch: refs/heads/master
Commit: 2c05816daa678b1ff8defba034caa9d593614ade
Parents: 0aa4011
Author: reka <rt...@gmail.com>
Authored: Sun Dec 21 15:20:37 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Sun Dec 21 15:20:37 2014 +0530
----------------------------------------------------------------------
.../apache/stratos/autoscaler/monitor/component/GroupMonitor.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/2c05816d/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
index 6187e06..8a00541 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
@@ -403,7 +403,7 @@ public class GroupMonitor extends ParentComponentMonitor {
getChildPolicy(groupId);
String networkPartitionId = parentInstanceContext.getNetworkPartitionId();
- if (this.networkPartitionCtxts.containsKey(parentInstanceContext)) {
+ if (this.networkPartitionCtxts.containsKey(networkPartitionId)) {
groupLevelNetworkPartitionContext = (GroupLevelNetworkPartitionContext) this.networkPartitionCtxts.
get(networkPartitionId);
} else {
[8/8] stratos git commit: handling max out in the dependent scaling
as well
Posted by re...@apache.org.
handling max out in the dependent scaling as well
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/0426bb8a
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/0426bb8a
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/0426bb8a
Branch: refs/heads/master
Commit: 0426bb8acc3d2d765ea26e47fb43b633d069b990
Parents: ea02c46
Author: reka <rt...@gmail.com>
Authored: Sun Dec 21 15:44:37 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Sun Dec 21 15:44:37 2014 +0530
----------------------------------------------------------------------
.../src/main/conf/drools/dependent-scaling.drl | 38 +++++++++++++-------
1 file changed, 26 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/0426bb8a/products/stratos/modules/distribution/src/main/conf/drools/dependent-scaling.drl
----------------------------------------------------------------------
diff --git a/products/stratos/modules/distribution/src/main/conf/drools/dependent-scaling.drl b/products/stratos/modules/distribution/src/main/conf/drools/dependent-scaling.drl
index daafb52..92f80b1 100644
--- a/products/stratos/modules/distribution/src/main/conf/drools/dependent-scaling.drl
+++ b/products/stratos/modules/distribution/src/main/conf/drools/dependent-scaling.drl
@@ -58,10 +58,10 @@ dialect "mvel"
while(count != additionalInstances && partitionsAvailable){
ClusterLevelPartitionContext partitionContext = (ClusterLevelPartitionContext)autoscaleAlgorithm.getNextScaleUpPartitionContext(clusterInstanceContext.getPartitionCtxtsAsAnArray());
- if(partitionContext != null){
+ if(partitionContext != null) {
- log.info("[scale-up] Partition available, hence trying to spawn an instance to scale up!" );
- log.debug("[scale-up] " + " [partition] " + partitionContext.getPartitionId() + " [cluster] " + clusterId );
+ log.info("[dependency-scale][scale-up] Partition available, hence trying to spawn an instance to scale up!" );
+ log.debug("[dependency-scale][scale-up] " + " [partition] " + partitionContext.getPartitionId() + " [cluster] " + clusterId );
delegator.delegateSpawn(partitionContext, clusterId, clusterInstanceContext.getId(), isPrimary);
count++;
} else {
@@ -69,6 +69,20 @@ dialect "mvel"
partitionsAvailable = false;
}
}
+ if(!partitionsAvailable) {
+ if(clusterInstanceContext.isInGroupScalingEnabledSubtree()){
+ delegator.delegateScalingOverMaxNotification(clusterId,
+ clusterInstanceContext.getNetworkPartitionId(),
+ clusterInstanceContext.getId());
+ log.info("[dependency-scale][dependent-max-notification] partition is not
+ available for [scale-up]. Hence notifying the parent for group scaling" );
+ } else {
+ log.warn("[dependency-scale][dependent-max-notification] partition is not
+ available for [scale-up]. All resources are exhausted.
+ Please enable group-scaling for further scaleup" );
+ }
+
+ }
} else if (scaleDown) {
int redundantInstances = clusterInstanceContext.getNonTerminatedMemberCount() - roundedRequiredInstanceCount;
@@ -81,31 +95,31 @@ dialect "mvel"
boolean foundAValue = false;
ClusterLevelPartitionContext partitionContext = (ClusterLevelPartitionContext)autoscaleAlgorithm.getNextScaleDownPartitionContext(clusterInstanceContext.getPartitionCtxtsAsAnArray());
if(partitionContext != null){
- log.info("[scale-down] Partition available to scale down, hence trying to terminate an instance to scale down!" );
- log.debug("[scale-down] " + " [partition] " + partitionContext.getPartitionId() + " [cluster] " + clusterId );
+ log.info("[dependency-scale][scale-down] Partition available to scale down, hence trying to terminate an instance to scale down!" );
+ log.debug("[dependency-scale][scale-down] " + " [partition] " + partitionContext.getPartitionId() + " [cluster] " + clusterId );
for(MemberStatsContext memberStatsContext: partitionContext.getMemberStatsContexts().values()){
if( !primaryMembers.contains(memberStatsContext.getMemberId()) ) {
LoadAverage loadAverage = memberStatsContext.getLoadAverage();
- log.debug("[scale-down] " + " [cluster] "
+ log.debug("[dependency-scale][scale-down] " + " [cluster] "
+ clusterId + " [member] " + memberStatsContext.getMemberId() + " Load average: " + loadAverage);
MemoryConsumption memoryConsumption = memberStatsContext.getMemoryConsumption();
- log.debug("[scale-down] " + " [partition] " + partitionContext.getPartitionId() + " [cluster] "
+ log.debug("[dependency-scale][scale-down] " + " [partition] " + partitionContext.getPartitionId() + " [cluster] "
+ clusterId + " [member] " + memberStatsContext.getMemberId() + " Memory consumption: " + memoryConsumption);
double predictedCpu = delegator.getPredictedValueForNextMinute(loadAverage.getAverage(),loadAverage.getGradient(),loadAverage.getSecondDerivative(), 1);
- log.debug("[scale-down] " + " [partition] " + partitionContext.getPartitionId() + " [cluster] "
+ log.debug("[dependency-scale][scale-down] " + " [partition] " + partitionContext.getPartitionId() + " [cluster] "
+ clusterId + " [member] " + memberStatsContext.getMemberId() + " Predicted CPU: " + predictedCpu);
double predictedMemoryConsumption = delegator.getPredictedValueForNextMinute(memoryConsumption.getAverage(),memoryConsumption.getGradient(),memoryConsumption.getSecondDerivative(), 1);
- log.debug("[scale-down] " + " [partition] " + partitionContext.getPartitionId() + " [cluster] "
+ log.debug("[dependency-scale][scale-down] " + " [partition] " + partitionContext.getPartitionId() + " [cluster] "
+ clusterId + " [member] " + memberStatsContext.getMemberId() + " Predicted memory consumption: " + predictedMemoryConsumption);
double overallLoad = (predictedCpu + predictedMemoryConsumption) / 2;
- log.debug("[scale-down] " + " [partition] " + partitionContext.getPartitionId() + " [cluster] "
+ log.debug("[dependency-scale][scale-down] " + " [partition] " + partitionContext.getPartitionId() + " [cluster] "
+ clusterId + " [member] " + memberStatsContext.getMemberId() + " Overall load: " + overallLoad);
if(!foundAValue){
@@ -122,8 +136,8 @@ dialect "mvel"
}
if(selectedMemberStatsContext != null) {
- log.info("[scale-down] Trying to terminating an instace to scale down!" );
- log.debug("[scale-down] " + " [partition] " + partitionContext.getPartitionId() + " [cluster] "
+ log.info("[dependency-scale][scale-down] Trying to terminating an instace to scale down!" );
+ log.debug("[dependency-scale][scale-down] " + " [partition] " + partitionContext.getPartitionId() + " [cluster] "
+ clusterId + " Member with lowest overall load: " + selectedMemberStatsContext.getMemberId());
delegator.delegateTerminate(partitionContext, selectedMemberStatsContext.getMemberId());
[6/8] stratos git commit: adding parent instance id when
communicating to parent
Posted by re...@apache.org.
adding parent instance id when communicating to parent
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/db87256a
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/db87256a
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/db87256a
Branch: refs/heads/master
Commit: db87256ad5259a20a8c2de903379aac71984b111
Parents: 2c05816
Author: reka <rt...@gmail.com>
Authored: Sun Dec 21 15:31:35 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Sun Dec 21 15:31:35 2014 +0530
----------------------------------------------------------------------
.../apache/stratos/autoscaler/monitor/component/GroupMonitor.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/db87256a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
index 8a00541..7b0fd86 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
@@ -133,7 +133,7 @@ public class GroupMonitor extends ParentComponentMonitor {
//couldn't create new instance. Hence notifying the parent
MonitorStatusEventBuilder.handleScalingOverMaxEvent(parent,
networkPartitionContext.getId(),
- instanceContext.getId(),
+ instanceContext.getParentInstanceId(),
appId);
}
} else {
[4/8] stratos git commit: fixing issues in the group scaling
Posted by re...@apache.org.
fixing issues in the group scaling
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/0aa40111
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/0aa40111
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/0aa40111
Branch: refs/heads/master
Commit: 0aa401118af9465553ad7bdfb39eb75b374e128f
Parents: b0d24c7
Author: reka <rt...@gmail.com>
Authored: Sun Dec 21 14:32:30 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Sun Dec 21 14:32:30 2014 +0530
----------------------------------------------------------------------
.../applications/topic/ApplicationBuilder.java | 29 ++++++++----
.../network/NetworkPartitionContext.java | 8 ++--
.../monitor/component/ApplicationMonitor.java | 41 ++++++++++-------
.../monitor/component/GroupMonitor.java | 47 +++++++++++---------
4 files changed, 75 insertions(+), 50 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/0aa40111/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 e0a8a31..a2cc84b 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
@@ -146,7 +146,8 @@ public class ApplicationBuilder {
if (applicationInstance.isStateTransitionValid(status)) {
//setting the status, persist and publish
application.setStatus(status, instanceId);
- updateApplicationMonitor(appId, status, instanceId);
+ updateApplicationMonitor(appId, status, applicationInstance.getNetworkPartitionId(),
+ instanceId);
ApplicationHolder.persistApplication(application);
ApplicationsEventPublisher.sendApplicationInstanceActivatedEvent(appId, instanceId);
} else {
@@ -176,7 +177,8 @@ public class ApplicationBuilder {
if (applicationInstance.isStateTransitionValid(status)) {
//setting the status, persist and publish
application.setStatus(status, instanceId);
- updateApplicationMonitor(appId, status, instanceId);
+ updateApplicationMonitor(appId, status, applicationInstance.getNetworkPartitionId(),
+ instanceId);
ApplicationHolder.persistApplication(application);
ApplicationsEventPublisher.sendApplicationInstanceInactivatedEvent(appId, instanceId);
} else {
@@ -248,7 +250,8 @@ public class ApplicationBuilder {
if (applicationInstance.isStateTransitionValid(status)) {
//setting the status, persist and publish
applicationInstance.setStatus(status);
- updateApplicationMonitor(appId, status, instanceId);
+ updateApplicationMonitor(appId, status, applicationInstance.getNetworkPartitionId(),
+ instanceId);
ApplicationMonitor applicationMonitor = AutoscalerContext.getInstance().
getAppMonitor(appId);
applicationMonitor.getNetworkPartitionContext(applicationInstance.
@@ -319,7 +322,8 @@ public class ApplicationBuilder {
if (context1.isStateTransitionValid(status)) {
//setting the status, persist and publish
application.setStatus(status, context1.getInstanceId());
- updateApplicationMonitor(appId, status, context1.getInstanceId());
+ updateApplicationMonitor(appId, status, context1.getNetworkPartitionId(),
+ context1.getInstanceId());
ApplicationHolder.persistApplication(application);
ApplicationsEventPublisher.sendApplicationInstanceTerminatingEvent(appId, context1.getInstanceId());
} else {
@@ -630,12 +634,23 @@ public class ApplicationBuilder {
}
}
- private static void updateApplicationMonitor(String appId, ApplicationStatus status, String instanceId) {
+ private static void updateApplicationMonitor(String appId, ApplicationStatus status,
+ String networkPartitionId, String instanceId) {
//Updating the Application Monitor
ApplicationMonitor applicationMonitor = AutoscalerContext.getInstance().getAppMonitor(appId);
if (applicationMonitor != null) {
- if (status == ApplicationStatus.Terminating) {
+ if(status == ApplicationStatus.Active) {
+ applicationMonitor.getNetworkPartitionContext(networkPartitionId).
+ movePendingInstanceToActiveInstances(instanceId);
+ } else if(status == ApplicationStatus.Terminating) {
applicationMonitor.setTerminating(true);
+ NetworkPartitionContext context = applicationMonitor.
+ getNetworkPartitionContext(networkPartitionId);
+ if(context.getActiveInstance(instanceId) != null) {
+ context.moveActiveInstanceToTerminationPendingInstances(instanceId);
+ } else if(context.getPendingInstance(instanceId) != null) {
+ context.movePendingInstanceToTerminationPendingInstances(instanceId);
+ }
}
applicationMonitor.setStatus(status, instanceId);
} else {
@@ -660,8 +675,6 @@ public class ApplicationBuilder {
} else if(context.getPendingInstance(instanceId) != null) {
context.movePendingInstanceToTerminationPendingInstances(instanceId);
}
-
-
}
monitor.setStatus(status, instanceId, parentInstanceId);
} else {
http://git-wip-us.apache.org/repos/asf/stratos/blob/0aa40111/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/NetworkPartitionContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/NetworkPartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/NetworkPartitionContext.java
index 5e3bd6a..4afa075 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/NetworkPartitionContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/NetworkPartitionContext.java
@@ -22,10 +22,7 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.stratos.autoscaler.context.InstanceContext;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
/**
* This will keep track of network partition level information.
@@ -47,6 +44,9 @@ public abstract class NetworkPartitionContext {
protected NetworkPartitionContext(String id) {
this.id = id;
instanceIdToInstanceContextMap = new HashMap<String, InstanceContext>();
+ pendingInstances = new ArrayList<InstanceContext>();
+ activeInstances = new ArrayList<InstanceContext>();
+ terminatingPending = new ArrayList<InstanceContext>();
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/0aa40111/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java
index 66a52cd..856b650 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java
@@ -96,23 +96,29 @@ public class ApplicationMonitor extends ParentComponentMonitor {
//stopping the monitoring when the group is inactive/Terminating/Terminated
if (instance.getStatus().getCode() <= GroupStatus.Active.getCode()) {
//Gives priority to scaling max out rather than dependency scaling
- if (!instanceContext.getIdToScalingOverMaxEvent().isEmpty() &&
- networkPartitionContext.getPendingInstancesCount() > 0) {
- //handling the application bursting only when there are no pending instances found
- try {
- if (log.isInfoEnabled()) {
- log.info("Handling application busting, " +
- "since resources are exhausted in " +
- "this application instance ");
- }
- createInstanceOnBurstingForApplication();
- } catch (TopologyInConsistentException e) {
- log.error("Error while bursting the application", e);
- } catch (PolicyValidationException e) {
- log.error("Error while bursting the application", e);
- } catch (MonitorNotFoundException e) {
- log.error("Error while bursting the application", e);
- }
+ if (!instanceContext.getIdToScalingOverMaxEvent().isEmpty()) {
+ if(networkPartitionContext.getPendingInstancesCount() == 0) {
+ //handling the application bursting only when there are no pending instances found
+ try {
+ if (log.isInfoEnabled()) {
+ log.info("Handling application busting, " +
+ "since resources are exhausted in " +
+ "this application instance ");
+ }
+ createInstanceOnBurstingForApplication();
+ } catch (TopologyInConsistentException e) {
+ log.error("Error while bursting the application", e);
+ } catch (PolicyValidationException e) {
+ log.error("Error while bursting the application", e);
+ } catch (MonitorNotFoundException e) {
+ log.error("Error while bursting the application", e);
+ }
+ } else {
+ if(log.isDebugEnabled()) {
+ log.debug("Pending Application instance found. " +
+ "Hence waiting for it to become active");
+ }
+ }
} else {
handleDependentScaling(instanceContext, networkPartitionContext);
@@ -303,6 +309,7 @@ public class ApplicationMonitor extends ParentComponentMonitor {
instanceContext = new ApplicationInstanceContext(instanceId);
//adding the created App InstanceContext to ApplicationLevelNetworkPartitionContext
context.addInstanceContext(instanceContext);
+ context.addPendingInstance(instanceContext);
//adding to instance map
this.instanceIdToInstanceMap.put(instanceId, instance);
http://git-wip-us.apache.org/repos/asf/stratos/blob/0aa40111/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
index 5eafaf9..6187e06 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
@@ -118,28 +118,31 @@ public class GroupMonitor extends ParentComponentMonitor {
if(!hasScalingDependents) {
//handling the group scaling and if pending instances found,
// reject the max
- if (groupScalingEnabled &&
- networkPartitionContext.getPendingInstancesCount() > 0) {
- //one of the child is loaded and max out.
- // Hence creating new group instance
- if(log.isDebugEnabled()) {
- log.debug("Handling group scaling for the [group] " + id +
- "upon a max out event from " +
- "the children");
- }
- boolean createOnDemand = createInstanceOnDemand(instanceContext.
- getParentInstanceId());
- if (!createOnDemand) {
- //couldn't create new instance. Hence notifying the parent
- MonitorStatusEventBuilder.handleScalingOverMaxEvent(parent,
- networkPartitionContext.getId(),
- instanceContext.getId(),
- appId);
+ if (groupScalingEnabled) {
+ if(networkPartitionContext.getPendingInstancesCount() == 0) {
+ //one of the child is loaded and max out.
+ // Hence creating new group instance
+ if(log.isDebugEnabled()) {
+ log.debug("Handling group scaling for the [group] " + id +
+ "upon a max out event from " +
+ "the children");
+ }
+ boolean createOnDemand = createInstanceOnDemand(instanceContext.
+ getParentInstanceId());
+ if (!createOnDemand) {
+ //couldn't create new instance. Hence notifying the parent
+ MonitorStatusEventBuilder.handleScalingOverMaxEvent(parent,
+ networkPartitionContext.getId(),
+ instanceContext.getId(),
+ appId);
+ }
} else {
- //Resetting the max events
- instanceContext.setIdToScalingOverMaxEvent(
- new HashMap<String, ScalingOverMaxEvent>());
+ if(log.isDebugEnabled()) {
+ log.debug("Pending Group instance found. " +
+ "Hence waiting for it to become active");
+ }
}
+
} else {
//notifying the parent if no group scaling enabled here
MonitorStatusEventBuilder.handleScalingOverMaxEvent(parent,
@@ -159,7 +162,9 @@ public class GroupMonitor extends ParentComponentMonitor {
instanceContext.getId(),
appId);
}
-
+ //Resetting the max events
+ instanceContext.setIdToScalingOverMaxEvent(
+ new HashMap<String, ScalingOverMaxEvent>());
} else {
handleDependentScaling(instanceContext, networkPartitionContext);
}
[2/8] stratos git commit: handling scaling dependents when max out
one of the children in group
Posted by re...@apache.org.
handling scaling dependents when max out one of the children in group
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/84015c29
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/84015c29
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/84015c29
Branch: refs/heads/master
Commit: 84015c29a0eff56eb52782c0c9cc5ac4277e907f
Parents: eec3a72
Author: reka <rt...@gmail.com>
Authored: Sun Dec 21 12:59:37 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Sun Dec 21 12:59:37 2014 +0530
----------------------------------------------------------------------
.../monitor/component/GroupMonitor.java | 50 +++++++++++++-------
1 file changed, 32 insertions(+), 18 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/84015c29/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
index 957e0d3..fd7717d 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
@@ -115,35 +115,49 @@ public class GroupMonitor extends ParentComponentMonitor {
if (instance.getStatus().getCode() <= GroupStatus.Active.getCode()) {
//Gives priority to scaling max out rather than dependency scaling
if (!instanceContext.getIdToScalingOverMaxEvent().isEmpty()) {
- //handling the group scaling
- if (groupScalingEnabled) {
- //one of the child is loaded and max out.
- // Hence creating new group instance
- if(log.isDebugEnabled()) {
- log.debug("Handling group scaling for the [group] " + id +
- "upon a max out event from " +
- "the children");
- }
- boolean createOnDemand = createInstanceOnDemand(instanceContext.
- getParentInstanceId());
- if (!createOnDemand) {
- //couldn't create new instance. Hence notifying the parent
+ if(!hasScalingDependents) {
+ //handling the group scaling
+ if (groupScalingEnabled) {
+ //one of the child is loaded and max out.
+ // Hence creating new group instance
+ if(log.isDebugEnabled()) {
+ log.debug("Handling group scaling for the [group] " + id +
+ "upon a max out event from " +
+ "the children");
+ }
+ boolean createOnDemand = createInstanceOnDemand(instanceContext.
+ getParentInstanceId());
+ if (!createOnDemand) {
+ //couldn't create new instance. Hence notifying the parent
+ MonitorStatusEventBuilder.handleScalingOverMaxEvent(parent,
+ networkPartitionContext.getId(),
+ instanceContext.getId(),
+ appId);
+ } else {
+ //Resetting the max events
+ instanceContext.setIdToScalingOverMaxEvent(
+ new HashMap<String, ScalingOverMaxEvent>());
+ }
+ } else {
+ //notifying the parent if no group scaling enabled here
MonitorStatusEventBuilder.handleScalingOverMaxEvent(parent,
networkPartitionContext.getId(),
instanceContext.getId(),
appId);
- } else {
- //Resetting the max events
- instanceContext.setIdToScalingOverMaxEvent(
- new HashMap<String, ScalingOverMaxEvent>());
}
} else {
- //notifying the parent if no group scaling enabled here
+ //has scaling dependents. Should notify the parent
+ if(log.isDebugEnabled()) {
+ log.debug("This [Group] " + id + " [scale-up] dependencies. " +
+ "Hence notifying the [parent] " + parent.getId() );
+ }
+ //notifying the parent when scale dependents found
MonitorStatusEventBuilder.handleScalingOverMaxEvent(parent,
networkPartitionContext.getId(),
instanceContext.getId(),
appId);
}
+
} else {
handleDependentScaling(instanceContext, networkPartitionContext);
}