making drool files as arguments to AutoscalerRuleEvaluator
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/7d8acf3e Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/7d8acf3e Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/7d8acf3e Branch: refs/heads/container-autoscaling Commit: 7d8acf3e8c44f71704152a1634285f099f4da552 Parents: 5db40af Author: R-Rajkumar <[email protected]> Authored: Thu Oct 9 10:55:15 2014 +0530 Committer: R-Rajkumar <[email protected]> Committed: Thu Oct 9 10:55:15 2014 +0530 ---------------------------------------------------------------------- .../KubernetesServiceClusterMonitor.java | 54 +++++++++++++++++++- .../autoscaler/monitor/VMLbClusterMonitor.java | 6 ++- .../monitor/VMServiceClusterMonitor.java | 5 +- .../rule/AutoscalerRuleEvaluator.java | 24 +++++---- 4 files changed, 75 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/7d8acf3e/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/KubernetesServiceClusterMonitor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/KubernetesServiceClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/KubernetesServiceClusterMonitor.java index 6e14ce0..1688df1 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/KubernetesServiceClusterMonitor.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/KubernetesServiceClusterMonitor.java @@ -52,7 +52,10 @@ public final class KubernetesServiceClusterMonitor extends KubernetesClusterMoni String serviceClusterID, String serviceId, AutoscalePolicy autoscalePolicy) { super(serviceClusterID, serviceId, kubernetesClusterCtxt, - new AutoscalerRuleEvaluator(), autoscalePolicy); + new AutoscalerRuleEvaluator( + StratosConstants.CONTAINER_MIN_CHECK_DROOL_FILE, + StratosConstants.CONTAINER_SCALE_CHECK_DROOL_FILE), + autoscalePolicy); readConfigurations(); } @@ -135,9 +138,56 @@ public final class KubernetesServiceClusterMonitor extends KubernetesClusterMoni } } } + + minCheck(); + scaleCheck(); } - @Override + private void scaleCheck() { + boolean rifReset = getKubernetesClusterCtxt().isRifReset(); + boolean memoryConsumptionReset = getKubernetesClusterCtxt().isMemoryConsumptionReset(); + boolean loadAverageReset = getKubernetesClusterCtxt().isLoadAverageReset(); + if (log.isDebugEnabled()) { + log.debug("flag of rifReset : " + rifReset + + " flag of memoryConsumptionReset : " + + memoryConsumptionReset + " flag of loadAverageReset : " + + loadAverageReset); + } + String kubernetesClusterID = getKubernetesClusterCtxt().getKubernetesClusterID(); + String clusterId = getClusterId(); + if (rifReset || memoryConsumptionReset || loadAverageReset) { + getScaleCheckKnowledgeSession().setGlobal("clusterId", clusterId); + getScaleCheckKnowledgeSession().setGlobal("autoscalePolicy", autoscalePolicy); + getScaleCheckKnowledgeSession().setGlobal("rifReset", rifReset); + getScaleCheckKnowledgeSession().setGlobal("mcReset", memoryConsumptionReset); + getScaleCheckKnowledgeSession().setGlobal("laReset", loadAverageReset); + if (log.isDebugEnabled()) { + log.debug(String.format( + "Running scale check for kub-cluster %s ", kubernetesClusterID)); + } + scaleCheckFactHandle = AutoscalerRuleEvaluator.evaluateScaleCheck( + getScaleCheckKnowledgeSession(), scaleCheckFactHandle, getKubernetesClusterCtxt()); + getKubernetesClusterCtxt().setRifReset(false); + getKubernetesClusterCtxt().setMemoryConsumptionReset(false); + getKubernetesClusterCtxt().setLoadAverageReset(false); + } else if (log.isDebugEnabled()) { + log.debug(String.format("Scale check will not run since none of the statistics have not received yet for " + + "[kub-cluster] %s [cluster] %s", kubernetesClusterID, clusterId)); + } + } + + private void minCheck() { + getMinCheckKnowledgeSession().setGlobal("clusterId", getClusterId()); + if (log.isDebugEnabled()) { + log.debug(String.format("Running minimum check for cluster %s ", + getClusterId())); + } + minCheckFactHandle = AutoscalerRuleEvaluator.evaluateMinCheck( + getMinCheckKnowledgeSession(), minCheckFactHandle, + getKubernetesClusterCtxt()); + } + + @Override public void destroy() { getMinCheckKnowledgeSession().dispose(); getScaleCheckKnowledgeSession().dispose(); http://git-wip-us.apache.org/repos/asf/stratos/blob/7d8acf3e/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/VMLbClusterMonitor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/VMLbClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/VMLbClusterMonitor.java index 1c27380..8e7d0e1 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/VMLbClusterMonitor.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/VMLbClusterMonitor.java @@ -34,6 +34,7 @@ import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy; import org.apache.stratos.autoscaler.rule.AutoscalerRuleEvaluator; import org.apache.stratos.autoscaler.util.AutoScalerConstants; import org.apache.stratos.autoscaler.util.ConfUtil; +import org.apache.stratos.common.constants.StratosConstants; import org.apache.stratos.messaging.domain.topology.ClusterStatus; import org.apache.stratos.messaging.event.topology.ClusterRemovedEvent; @@ -48,7 +49,10 @@ public class VMLbClusterMonitor extends VMClusterMonitor { public VMLbClusterMonitor(String clusterId, String serviceId, DeploymentPolicy deploymentPolicy, AutoscalePolicy autoscalePolicy) { - super(clusterId, serviceId, new AutoscalerRuleEvaluator(), + super(clusterId, serviceId, + new AutoscalerRuleEvaluator( + StratosConstants.VM_MIN_CHECK_DROOL_FILE, + StratosConstants.VM_SCALE_CHECK_DROOL_FILE), deploymentPolicy, autoscalePolicy, new ConcurrentHashMap<String, NetworkPartitionContext>()); readConfigurations(); http://git-wip-us.apache.org/repos/asf/stratos/blob/7d8acf3e/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/VMServiceClusterMonitor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/VMServiceClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/VMServiceClusterMonitor.java index 6f9fb26..adf750d 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/VMServiceClusterMonitor.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/VMServiceClusterMonitor.java @@ -35,6 +35,7 @@ import org.apache.stratos.autoscaler.util.ConfUtil; import org.apache.stratos.cloud.controller.stub.pojo.MemberContext; import org.apache.stratos.cloud.controller.stub.pojo.Properties; import org.apache.stratos.cloud.controller.stub.pojo.Property; +import org.apache.stratos.common.constants.StratosConstants; import org.apache.stratos.messaging.domain.topology.ClusterStatus; /** @@ -51,7 +52,9 @@ public class VMServiceClusterMonitor extends VMClusterMonitor { public VMServiceClusterMonitor(String clusterId, String serviceId, DeploymentPolicy deploymentPolicy, AutoscalePolicy autoscalePolicy) { - super(clusterId, serviceId, new AutoscalerRuleEvaluator(), + super(clusterId, serviceId, + new AutoscalerRuleEvaluator(StratosConstants.VM_MIN_CHECK_DROOL_FILE, + StratosConstants.VM_SCALE_CHECK_DROOL_FILE), deploymentPolicy, autoscalePolicy, new ConcurrentHashMap<String, NetworkPartitionContext>()); readConfigurations(); http://git-wip-us.apache.org/repos/asf/stratos/blob/7d8acf3e/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/AutoscalerRuleEvaluator.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/AutoscalerRuleEvaluator.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/AutoscalerRuleEvaluator.java index 4bf9207..a402ab4 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/AutoscalerRuleEvaluator.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/AutoscalerRuleEvaluator.java @@ -44,32 +44,36 @@ public class AutoscalerRuleEvaluator { private static final Log log = LogFactory.getLog(AutoscalerRuleEvaluator.class); - private static final String DRL_FILE_NAME = "mincheck.drl"; - private static final String SCALING_DRL_FILE_NAME = "scaling.drl"; - private static final String TERMINATE_ALL_DRL_FILE_NAME = "terminateall.drl"; + //vm drool files as default + private String minCheckDroolFileName = "mincheck.drl"; + private String scaleCheckDroolFileName = "scaling.drl"; + private String terminateAllDroolFileName = "terminateall.drl"; private static KnowledgeBase minCheckKbase; private static KnowledgeBase scaleCheckKbase; @SuppressWarnings("unused") private static KnowledgeBase terminateAllKbase; - public AutoscalerRuleEvaluator(){ + public AutoscalerRuleEvaluator(String minCheckDroolFileName, String scaleCheckDroolFileName){ + + this.minCheckDroolFileName = minCheckDroolFileName; + this.scaleCheckDroolFileName = scaleCheckDroolFileName; - minCheckKbase = readKnowledgeBase(DRL_FILE_NAME); + minCheckKbase = readKnowledgeBase(this.minCheckDroolFileName); if (log.isDebugEnabled()) { - log.debug("Minimum check rule is parsed successfully"); + log.debug("Minimum check rule is parsed successfully : " + this.minCheckDroolFileName); } - scaleCheckKbase = readKnowledgeBase(SCALING_DRL_FILE_NAME); + scaleCheckKbase = readKnowledgeBase(this.scaleCheckDroolFileName); if (log.isDebugEnabled()) { - log.debug("Scale check rule is parsed successfully"); + log.debug("Scale check rule is parsed successfully : " + this.scaleCheckDroolFileName); } - terminateAllKbase = readKnowledgeBase(TERMINATE_ALL_DRL_FILE_NAME); + terminateAllKbase = readKnowledgeBase(this.terminateAllDroolFileName); if (log.isDebugEnabled()) { - log.debug("Terminate all rule is parsed successfully"); + log.debug("Terminate all rule is parsed successfully : " + this.terminateAllDroolFileName); } }
