Update references of Network partition contexs
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/080614ca Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/080614ca Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/080614ca Branch: refs/heads/master Commit: 080614ca0c20f78285f47702a6b8c9d98f0a9fea Parents: dcbc80c Author: Lahiru Sandaruwan <[email protected]> Authored: Tue May 19 13:17:41 2015 +0530 Committer: Lahiru Sandaruwan <[email protected]> Committed: Tue May 19 15:30:57 2015 +0530 ---------------------------------------------------------------------- .../applications/topic/ApplicationBuilder.java | 5 +- .../monitor/component/ApplicationMonitor.java | 2 +- .../monitor/component/GroupMonitor.java | 61 +++++++++++--------- 3 files changed, 37 insertions(+), 31 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/080614ca/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 b0315b1..7a4df82 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 @@ -652,7 +652,7 @@ public class ApplicationBuilder { ApplicationMonitor applicationMonitor = AutoscalerContext.getInstance().getAppMonitor(appId); if (applicationMonitor != null) { - NetworkPartitionContext context = applicationMonitor. + GroupLevelNetworkPartitionContext context = (GroupLevelNetworkPartitionContext) applicationMonitor. getNetworkPartitionContext(networkPartitionId); if (status == ApplicationStatus.Active) { if (log.isDebugEnabled()) { @@ -693,7 +693,8 @@ public class ApplicationBuilder { String instanceId, String parentInstanceId) { GroupMonitor monitor = getGroupMonitor(appId, groupId); if (monitor != null) { - NetworkPartitionContext context = monitor.getNetworkPartitionContext(networkPartitionId); + GroupLevelNetworkPartitionContext context + = (GroupLevelNetworkPartitionContext) monitor.getNetworkPartitionContext(networkPartitionId); if (status == GroupStatus.Active) { if (log.isDebugEnabled()) { log.debug("Moving pending group instance to active list in [group] " + groupId http://git-wip-us.apache.org/repos/asf/stratos/blob/080614ca/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 f0dfd50..2d5ef12 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 @@ -144,7 +144,7 @@ public class ApplicationMonitor extends ParentComponentMonitor { private void handleScalingMaxOut(InstanceContext instanceContext, NetworkPartitionContext networkPartitionContext) { - if (networkPartitionContext.getPendingInstancesCount() == 0) { + if (((ApplicationLevelNetworkPartitionContext) networkPartitionContext).getPendingInstancesCount() == 0) { //handling the application bursting only when there are no pending instances found try { if (log.isInfoEnabled()) { http://git-wip-us.apache.org/repos/asf/stratos/blob/080614ca/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 a890824..b9f90b4 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 @@ -155,24 +155,26 @@ public class GroupMonitor extends ParentComponentMonitor { } } - int nonTerminatedInstancesCount = networkPartitionContext. + GroupLevelNetworkPartitionContext groupLevelNetworkPartitionContext + = (GroupLevelNetworkPartitionContext) networkPartitionContext; + int nonTerminatedInstancesCount = groupLevelNetworkPartitionContext. getNonTerminatedInstancesCount(); - int minInstances = ((GroupLevelNetworkPartitionContext) networkPartitionContext). + int minInstances = groupLevelNetworkPartitionContext. getMinInstanceCount(); - int maxInstances = ((GroupLevelNetworkPartitionContext) networkPartitionContext). + int maxInstances = groupLevelNetworkPartitionContext. getMaxInstanceCount(); - int activeInstances = networkPartitionContext.getActiveInstancesCount(); + int activeInstances = groupLevelNetworkPartitionContext.getActiveInstancesCount(); if (nonTerminatedInstancesCount < minInstances) { int instancesToBeCreated = minInstances - nonTerminatedInstancesCount; for (int i = 0; i < instancesToBeCreated; i++) { for (InstanceContext parentInstanceContext : parent. - getNetworkPartitionContext(networkPartitionContext.getId()). + getNetworkPartitionContext(groupLevelNetworkPartitionContext.getId()). getInstanceIdToInstanceContextMap().values()) { //keep on scale-up/scale-down only if the application is active ApplicationMonitor appMonitor = AutoscalerContext.getInstance(). getAppMonitor(appId); - int activeAppInstances = appMonitor. - getNetworkPartitionContext(networkPartitionContext.getId()). + int activeAppInstances = ((GroupLevelNetworkPartitionContext) appMonitor. + getNetworkPartitionContext(groupLevelNetworkPartitionContext.getId())). getActiveInstancesCount(); if (activeAppInstances > 0) { //Creating new group instance based on the existing parent instances @@ -245,30 +247,31 @@ public class GroupMonitor extends ParentComponentMonitor { // if it is a force scale-down if (allChildrenScaleDown || forceScaleDown) { if (hasScalingDependents) { - if (nwPartitionContext.getNonTerminatedInstancesCount() > - ((GroupLevelNetworkPartitionContext) - nwPartitionContext).getMinInstanceCount()) { + GroupLevelNetworkPartitionContext groupLevelNetworkPartitionContext + = (GroupLevelNetworkPartitionContext) nwPartitionContext; + if (groupLevelNetworkPartitionContext.getNonTerminatedInstancesCount() > + groupLevelNetworkPartitionContext.getMinInstanceCount()) { //Will scale down based on dependent manner - float minInstances = ((GroupLevelNetworkPartitionContext) - nwPartitionContext).getMinInstanceCount(); + float minInstances = groupLevelNetworkPartitionContext.getMinInstanceCount(); float factor = - (nwPartitionContext.getNonTerminatedInstancesCount() - 1) / minInstances; - ScalingEvent scalingEvent = new ScalingEvent(this.id, nwPartitionContext.getId(), + (groupLevelNetworkPartitionContext.getNonTerminatedInstancesCount() - 1) / minInstances; + ScalingEvent scalingEvent = new ScalingEvent(this.id, groupLevelNetworkPartitionContext.getId(), instanceContext.getId(), factor); this.parent.onChildScalingEvent(scalingEvent); } else { //Parent has to handle this scale down as by dependent scale down ScalingDownBeyondMinEvent newScalingDownBeyondMinEvent = new ScalingDownBeyondMinEvent(this.id, - nwPartitionContext.getId(), instanceContext.getParentInstanceId()); + groupLevelNetworkPartitionContext.getId(), instanceContext.getParentInstanceId()); this.parent.onChildScalingDownBeyondMinEvent(newScalingDownBeyondMinEvent); } } else { if (groupScalingEnabled) { - if (nwPartitionContext.getNonTerminatedInstancesCount() > - ((GroupLevelNetworkPartitionContext) - nwPartitionContext).getMinInstanceCount()) { + GroupLevelNetworkPartitionContext groupLevelNetworkPartitionContext + = (GroupLevelNetworkPartitionContext) nwPartitionContext; + if (groupLevelNetworkPartitionContext.getNonTerminatedInstancesCount() > + groupLevelNetworkPartitionContext.getMinInstanceCount()) { //send terminating to the specific group instance in the scale down ApplicationBuilder.handleGroupTerminatingEvent(this.appId, this.id, instanceContext.getId()); @@ -295,7 +298,7 @@ public class GroupMonitor extends ParentComponentMonitor { private void createGroupInstanceOnScaling(final NetworkPartitionContext networkPartitionContext, final String parentInstanceId) { if (groupScalingEnabled) { - if (networkPartitionContext.getPendingInstancesCount() == 0) { + if (((GroupLevelNetworkPartitionContext)networkPartitionContext).getPendingInstancesCount() == 0) { //one of the child is loaded and max out. // Hence creating new group instance if (log.isDebugEnabled()) { @@ -352,10 +355,11 @@ public class GroupMonitor extends ParentComponentMonitor { log.debug("This [Group] " + id + " [scale-up] dependencies. " + "Hence notifying the [parent] " + parent.getId()); } + GroupLevelNetworkPartitionContext groupLevelNetworkPartitionContext + = (GroupLevelNetworkPartitionContext) networkPartitionContext; //notifying the parent when scale dependents found - int maxInstances = ((GroupLevelNetworkPartitionContext) - networkPartitionContext).getMaxInstanceCount(); - if (groupScalingEnabled && maxInstances > networkPartitionContext. + int maxInstances = groupLevelNetworkPartitionContext.getMaxInstanceCount(); + if (groupScalingEnabled && maxInstances > groupLevelNetworkPartitionContext. getNonTerminatedInstancesCount()) { //increase group by one more instance and calculate the factor for the group scaling // and notify parent to scale all the dependent in parallel with this factor @@ -563,9 +567,10 @@ public class GroupMonitor extends ParentComponentMonitor { get(networkPartitionId); float factor = scalingEvent.getFactor(); - int currentInstances = networkPartitionContext.getNonTerminatedInstancesCount(); - float requiredInstances = factor * ((GroupLevelNetworkPartitionContext) - networkPartitionContext).getMinInstanceCount(); + GroupLevelNetworkPartitionContext groupLevelNetworkPartitionContext + = (GroupLevelNetworkPartitionContext) networkPartitionContext; + int currentInstances = groupLevelNetworkPartitionContext.getNonTerminatedInstancesCount(); + float requiredInstances = factor * groupLevelNetworkPartitionContext.getMinInstanceCount(); int ceilingRequiredInstances = (int) Math.ceil(requiredInstances); if (ceilingRequiredInstances > currentInstances) { @@ -580,13 +585,13 @@ public class GroupMonitor extends ParentComponentMonitor { for (int count = 0; count < instancesToBeTerminated; count++) { //have to scale down - if (networkPartitionContext.getPendingInstancesCount() != 0) { + if (groupLevelNetworkPartitionContext.getPendingInstancesCount() != 0) { ApplicationBuilder.handleGroupTerminatingEvent(appId, this.id, - networkPartitionContext.getPendingInstances().get(0).getId()); + groupLevelNetworkPartitionContext.getPendingInstances().get(0).getId()); } else { List<InstanceContext> activeInstances = - networkPartitionContext.getActiveInstances(); + groupLevelNetworkPartitionContext.getActiveInstances(); ApplicationBuilder.handleGroupTerminatingEvent(appId, this.id, activeInstances.get(activeInstances.size() - 1).toString()); }
