You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by ni...@apache.org on 2014/10/11 06:13:01 UTC

[15/50] [abbrv] git commit: making drool files as arguments to AutoscalerRuleEvaluator

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/7b0cf721
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/7b0cf721
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/7b0cf721

Branch: refs/heads/master
Commit: 7b0cf721b11037166033fbd998eb53cd3c63af23
Parents: 6e0eca9
Author: R-Rajkumar <rr...@gmail.com>
Authored: Thu Oct 9 10:55:15 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:56 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/7b0cf721/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 6362fc4..d0d7668 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();
     }
 
@@ -144,9 +147,56 @@ public final class KubernetesServiceClusterMonitor extends KubernetesClusterMoni
             } catch (InterruptedException ignored) {
             }
         }
+        
+        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/7b0cf721/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/7b0cf721/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/7b0cf721/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);
         }
     }