Updated Branches: refs/heads/master e9b884be3 -> 707788c89
Make sure scale check doesn't run if Lb stats did not receive Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/707788c8 Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/707788c8 Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/707788c8 Branch: refs/heads/master Commit: 707788c8982142b8231e55723d24ee3bfc4f79ac Parents: e9b884b Author: Lahiru Sandaruwan <[email protected]> Authored: Fri Dec 13 12:35:19 2013 +0530 Committer: Lahiru Sandaruwan <[email protected]> Committed: Fri Dec 13 12:35:19 2013 +0530 ---------------------------------------------------------------------- .../stratos/autoscaler/ClusterMonitor.java | 22 +++++++----- .../autoscaler/NetworkPartitionContext.java | 38 ++++++++++++++++++++ .../stratos/autoscaler/PartitionContext.java | 4 +-- 3 files changed, 53 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/707788c8/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterMonitor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterMonitor.java index be29a48..7ab70b7 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterMonitor.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterMonitor.java @@ -162,17 +162,21 @@ public class ClusterMonitor implements Runnable{ } - scaleCheckKnowledgeSession.setGlobal("clusterId", clusterId); - scaleCheckKnowledgeSession.setGlobal("deploymentPolicy", deploymentPolicy); - scaleCheckKnowledgeSession.setGlobal("autoscalePolicy", autoscalePolicy); + if(networkPartitionContext.isRifReset()){ + scaleCheckKnowledgeSession.setGlobal("clusterId", clusterId); + scaleCheckKnowledgeSession.setGlobal("deploymentPolicy", deploymentPolicy); + scaleCheckKnowledgeSession.setGlobal("autoscalePolicy", autoscalePolicy); - if (log.isDebugEnabled()) { - log.debug(String.format("Running scale check for network partition %s ", networkPartitionContext.getId())); - } - - scaleCheckFactHandle = AutoscalerRuleEvaluator.evaluateScaleCheck(scaleCheckKnowledgeSession - , scaleCheckFactHandle, networkPartitionContext); + if (log.isDebugEnabled()) { + log.debug(String.format("Running scale check for network partition %s ", networkPartitionContext.getId())); + } + scaleCheckFactHandle = AutoscalerRuleEvaluator.evaluateScaleCheck(scaleCheckKnowledgeSession + , scaleCheckFactHandle, networkPartitionContext); + } else if(log.isDebugEnabled()){ + log.debug(String.format("Scale will not run since the LB statistics have not received before this " + + "cycle for network partition %s", networkPartitionContext.getId()) ); + } } } http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/707788c8/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 63e8338..63a8343 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 @@ -18,6 +18,8 @@ */ package org.apache.stratos.autoscaler; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.apache.stratos.cloud.controller.deployment.partition.Partition; import java.util.HashMap; @@ -29,6 +31,7 @@ import java.util.Map; */ public class NetworkPartitionContext { + private static final Log log = LogFactory.getLog(NetworkPartitionContext.class); private String id; private String defaultLbClusterId; @@ -38,6 +41,9 @@ public class NetworkPartitionContext { private Map<String, String> clusterIdToLBClusterIdMap; private 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; //FIXME this should be populated via PartitionGroups a.k.a. NetworkPartitions private int minInstanceCount = 1, maxInstanceCount = 1; @@ -211,6 +217,14 @@ public class NetworkPartitionContext { public void setAverageRequestsInFlight(float averageRequestsInFlight) { this.averageRequestsInFlight = 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] " + , this.id)); + } + } } public float getRequestsInFlightSecondDerivative() { @@ -219,6 +233,14 @@ public class NetworkPartitionContext { public void setRequestsInFlightSecondDerivative(float requestsInFlightSecondDerivative) { this.requestsInFlightSecondDerivative = 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] " + , this.id)); + } + } } public float getRequestsInFlightGradient() { @@ -227,8 +249,23 @@ public class NetworkPartitionContext { public void setRequestsInFlightGradient(float requestsInFlightGradient) { this.requestsInFlightGradient = 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] " + , this.id)); + } + } } + public boolean isRifReset() { + return rifReset; + } + + public void setRifReset(boolean rifReset) { + this.rifReset = rifReset; + } public String getId() { return id; @@ -306,4 +343,5 @@ public class NetworkPartitionContext { public void setPartitionToMemberCountMap(Map<String, Integer> partitionToMemberCountMap) { this.partitionToMemberCountMap = partitionToMemberCountMap; } + } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/707788c8/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/PartitionContext.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/PartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/PartitionContext.java index 441924d..0f46893 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/PartitionContext.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/PartitionContext.java @@ -52,8 +52,8 @@ public class PartitionContext { // properties private Properties properties; - // 5 mints as the default - private long expiryTime = 300000; + // 10 mints as the default + private long expiryTime = 600000; // pending members private List<MemberContext> pendingMembers;
