Repository: stratos Updated Branches: refs/heads/docker-grouping-merge 9af8798c5 -> 4d39532f4
moving obsolete-check rule from min-check drool file to a different drool file Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/80855b74 Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/80855b74 Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/80855b74 Branch: refs/heads/docker-grouping-merge Commit: 80855b748ad0565bf9d888c57cd60f287d6bca6c Parents: 87908a4 Author: R-Rajkumar <[email protected]> Authored: Wed Nov 5 14:05:06 2014 +0530 Committer: R-Rajkumar <[email protected]> Committed: Wed Nov 5 14:05:06 2014 +0530 ---------------------------------------------------------------------- .../monitor/cluster/AbstractClusterMonitor.java | 22 +++++- .../KubernetesServiceClusterMonitor.java | 17 ++++- .../monitor/cluster/VMLbClusterMonitor.java | 8 ++- .../cluster/VMServiceClusterMonitor.java | 15 +++-- .../rule/AutoscalerRuleEvaluator.java | 70 +++++++++++++------- .../common/constants/StratosConstants.java | 2 + .../src/main/conf/drools/container-mincheck.drl | 19 ------ .../conf/drools/container-obsoletecheck.drl | 46 +++++++++++++ .../src/main/conf/drools/mincheck.drl | 14 ---- .../src/main/conf/drools/obsoletecheck.drl | 66 ++++++++++++++++++ 10 files changed, 211 insertions(+), 68 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/80855b74/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/AbstractClusterMonitor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/AbstractClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/AbstractClusterMonitor.java index 55748e1..1fd9124 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/AbstractClusterMonitor.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/AbstractClusterMonitor.java @@ -36,7 +36,6 @@ import org.apache.stratos.messaging.domain.topology.ClusterStatus; import org.apache.stratos.messaging.event.health.stat.AverageLoadAverageEvent; import org.apache.stratos.messaging.event.health.stat.AverageMemoryConsumptionEvent; import org.apache.stratos.messaging.event.health.stat.AverageRequestsInFlightEvent; -import org.apache.stratos.messaging.event.health.stat.AverageRequestsServingCapabilityEvent; import org.apache.stratos.messaging.event.health.stat.GradientOfLoadAverageEvent; import org.apache.stratos.messaging.event.health.stat.GradientOfMemoryConsumptionEvent; import org.apache.stratos.messaging.event.health.stat.GradientOfRequestsInFlightEvent; @@ -73,8 +72,10 @@ public abstract class AbstractClusterMonitor extends Monitor implements Runnable private int monitoringIntervalMilliseconds; protected FactHandle minCheckFactHandle; + protected FactHandle obsoleteCheckFactHandle; protected FactHandle scaleCheckFactHandle; private StatefulKnowledgeSession minCheckKnowledgeSession; + private StatefulKnowledgeSession obsoleteCheckKnowledgeSession; private StatefulKnowledgeSession scaleCheckKnowledgeSession; private boolean isDestroyed; @@ -236,11 +237,19 @@ public abstract class AbstractClusterMonitor extends Monitor implements Runnable public void setMinCheckFactHandle(FactHandle minCheckFactHandle) { this.minCheckFactHandle = minCheckFactHandle; } + + public FactHandle getObsoleteCheckFactHandle() { + return obsoleteCheckFactHandle; + } + + public void setObsoleteCheckFactHandle(FactHandle obsoleteCheckFactHandle) { + this.obsoleteCheckFactHandle = obsoleteCheckFactHandle; + } public FactHandle getScaleCheckFactHandle() { return scaleCheckFactHandle; } - + public void setScaleCheckFactHandle(FactHandle scaleCheckFactHandle) { this.scaleCheckFactHandle = scaleCheckFactHandle; } @@ -253,6 +262,15 @@ public abstract class AbstractClusterMonitor extends Monitor implements Runnable StatefulKnowledgeSession minCheckKnowledgeSession) { this.minCheckKnowledgeSession = minCheckKnowledgeSession; } + + public StatefulKnowledgeSession getObsoleteCheckKnowledgeSession() { + return obsoleteCheckKnowledgeSession; + } + + public void setObsoleteCheckKnowledgeSession( + StatefulKnowledgeSession obsoleteCheckKnowledgeSession) { + this.obsoleteCheckKnowledgeSession = obsoleteCheckKnowledgeSession; + } public StatefulKnowledgeSession getScaleCheckKnowledgeSession() { return scaleCheckKnowledgeSession; http://git-wip-us.apache.org/repos/asf/stratos/blob/80855b74/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/KubernetesServiceClusterMonitor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/KubernetesServiceClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/KubernetesServiceClusterMonitor.java index 1f17daa..85c71fd 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/KubernetesServiceClusterMonitor.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/KubernetesServiceClusterMonitor.java @@ -47,8 +47,9 @@ public final class KubernetesServiceClusterMonitor extends KubernetesClusterMoni String serviceClusterID, String serviceId, String autoscalePolicyId) { super(serviceClusterID, serviceId, kubernetesClusterCtxt, - new AutoscalerRuleEvaluator( + new AutoscalerRuleEvaluator( StratosConstants.CONTAINER_MIN_CHECK_DROOL_FILE, + StratosConstants.CONTAINER_OBSOLETE_CHECK_DROOL_FILE, StratosConstants.CONTAINER_SCALE_CHECK_DROOL_FILE), autoscalePolicyId); readConfigurations(); @@ -78,6 +79,7 @@ public final class KubernetesServiceClusterMonitor extends KubernetesClusterMoni @Override protected void monitor() { minCheck(); + obsoleteCheck(); scaleCheck(); } @@ -125,10 +127,23 @@ public final class KubernetesServiceClusterMonitor extends KubernetesClusterMoni getMinCheckKnowledgeSession(), minCheckFactHandle, getKubernetesClusterCtxt()); } + + private void obsoleteCheck() { + getMinCheckKnowledgeSession().setGlobal("clusterId", getClusterId()); + String kubernetesClusterID = getKubernetesClusterCtxt().getKubernetesClusterID(); + if (log.isDebugEnabled()) { + log.debug(String.format( + "Running obsolete check for [kub-cluster] : %s [cluster] : %s ", kubernetesClusterID, getClusterId())); + } + obsoleteCheckFactHandle = AutoscalerRuleEvaluator.evaluateMinCheck( + getObsoleteCheckKnowledgeSession(), obsoleteCheckFactHandle, + getKubernetesClusterCtxt()); + } @Override public void destroy() { getMinCheckKnowledgeSession().dispose(); + getObsoleteCheckKnowledgeSession().dispose(); getScaleCheckKnowledgeSession().dispose(); setDestroyed(true); stopScheduler(); http://git-wip-us.apache.org/repos/asf/stratos/blob/80855b74/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMLbClusterMonitor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMLbClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMLbClusterMonitor.java index 386197c..b9abc50 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMLbClusterMonitor.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMLbClusterMonitor.java @@ -27,16 +27,15 @@ import org.apache.commons.logging.LogFactory; import org.apache.stratos.autoscaler.NetworkPartitionContext; import org.apache.stratos.autoscaler.NetworkPartitionLbHolder; import org.apache.stratos.autoscaler.PartitionContext; -import org.apache.stratos.autoscaler.policy.model.DeploymentPolicy; import org.apache.stratos.autoscaler.partition.PartitionManager; import org.apache.stratos.autoscaler.policy.PolicyManager; import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy; +import org.apache.stratos.autoscaler.policy.model.DeploymentPolicy; 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.health.stat.AverageRequestsServingCapabilityEvent; import org.apache.stratos.messaging.event.topology.ClusterRemovedEvent; /** @@ -53,6 +52,7 @@ public class VMLbClusterMonitor extends VMClusterMonitor { super(clusterId, serviceId, new AutoscalerRuleEvaluator( StratosConstants.VM_MIN_CHECK_DROOL_FILE, + StratosConstants.VM_OBSOLETE_CHECK_DROOL_FILE, StratosConstants.VM_SCALE_CHECK_DROOL_FILE), deploymentPolicy, autoscalePolicy, new ConcurrentHashMap<String, NetworkPartitionContext>()); @@ -107,6 +107,9 @@ public class VMLbClusterMonitor extends VMClusterMonitor { AutoscalerRuleEvaluator.evaluateMinCheck(getMinCheckKnowledgeSession(), minCheckFactHandle, partitionContext); + obsoleteCheckFactHandle = + AutoscalerRuleEvaluator.evaluateObsoleteCheck(getObsoleteCheckKnowledgeSession(), + obsoleteCheckFactHandle, partitionContext); // start only in the first partition context break; } @@ -119,6 +122,7 @@ public class VMLbClusterMonitor extends VMClusterMonitor { @Override public void destroy() { getMinCheckKnowledgeSession().dispose(); + getObsoleteCheckKnowledgeSession().dispose(); getMinCheckKnowledgeSession().dispose(); setDestroyed(true); stopScheduler(); http://git-wip-us.apache.org/repos/asf/stratos/blob/80855b74/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMServiceClusterMonitor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMServiceClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMServiceClusterMonitor.java index e5e8fe4..4a4926b 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMServiceClusterMonitor.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMServiceClusterMonitor.java @@ -25,13 +25,12 @@ import java.util.concurrent.ConcurrentHashMap; import org.apache.commons.configuration.XMLConfiguration; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.stratos.autoscaler.AutoscalerContext; import org.apache.stratos.autoscaler.NetworkPartitionContext; import org.apache.stratos.autoscaler.PartitionContext; -import org.apache.stratos.autoscaler.policy.model.DeploymentPolicy; import org.apache.stratos.autoscaler.event.publisher.ClusterStatusEventPublisher; import org.apache.stratos.autoscaler.monitor.events.MonitorStatusEvent; import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy; +import org.apache.stratos.autoscaler.policy.model.DeploymentPolicy; import org.apache.stratos.autoscaler.rule.AutoscalerRuleEvaluator; import org.apache.stratos.autoscaler.util.AutoScalerConstants; import org.apache.stratos.autoscaler.util.ConfUtil; @@ -42,7 +41,6 @@ import org.apache.stratos.common.constants.StratosConstants; import org.apache.stratos.messaging.domain.applications.ApplicationStatus; import org.apache.stratos.messaging.domain.applications.GroupStatus; import org.apache.stratos.messaging.domain.topology.ClusterStatus; -import org.apache.stratos.messaging.event.health.stat.AverageRequestsServingCapabilityEvent; /** * Is responsible for monitoring a service cluster. This runs periodically @@ -58,9 +56,10 @@ public class VMServiceClusterMonitor extends VMClusterMonitor { public VMServiceClusterMonitor(String clusterId, String serviceId, DeploymentPolicy deploymentPolicy, AutoscalePolicy autoscalePolicy) { - super(clusterId, serviceId, - new AutoscalerRuleEvaluator(StratosConstants.VM_MIN_CHECK_DROOL_FILE, - StratosConstants.VM_SCALE_CHECK_DROOL_FILE), + super(clusterId, serviceId, new AutoscalerRuleEvaluator( + StratosConstants.VM_MIN_CHECK_DROOL_FILE, + StratosConstants.VM_OBSOLETE_CHECK_DROOL_FILE, + StratosConstants.VM_SCALE_CHECK_DROOL_FILE), deploymentPolicy, autoscalePolicy, new ConcurrentHashMap<String, NetworkPartitionContext>()); readConfigurations(); @@ -203,6 +202,9 @@ public class VMServiceClusterMonitor extends VMClusterMonitor { minCheckFactHandle = AutoscalerRuleEvaluator.evaluateMinCheck(getMinCheckKnowledgeSession() , minCheckFactHandle, partitionContext); + + obsoleteCheckFactHandle = AutoscalerRuleEvaluator.evaluateObsoleteCheck(getObsoleteCheckKnowledgeSession(), + obsoleteCheckFactHandle, partitionContext); //checking the status of the cluster @@ -260,6 +262,7 @@ public class VMServiceClusterMonitor extends VMClusterMonitor { @Override public void destroy() { getMinCheckKnowledgeSession().dispose(); + getObsoleteCheckKnowledgeSession().dispose(); getScaleCheckKnowledgeSession().dispose(); setDestroyed(true); stopScheduler(); http://git-wip-us.apache.org/repos/asf/stratos/blob/80855b74/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 4c32bd3..a66345a 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 @@ -46,44 +46,58 @@ public class AutoscalerRuleEvaluator { private static final Log log = LogFactory.getLog(AutoscalerRuleEvaluator.class); //vm drool files as default - private String minCheckDroolFileName = "mincheck.drl"; - private String scaleCheckDroolFileName = "scaling.drl"; + private String minCheckDroolFileName = StratosConstants.CONTAINER_MIN_CHECK_DROOL_FILE; + private String obsoleteCheckDroolFileName = StratosConstants.CONTAINER_OBSOLETE_CHECK_DROOL_FILE; + private String scaleCheckDroolFileName = StratosConstants.CONTAINER_SCALE_CHECK_DROOL_FILE; private String terminateAllDroolFileName = "terminateall.drl"; private static KnowledgeBase minCheckKbase; + private static KnowledgeBase obsoleteCheckKbase; private static KnowledgeBase scaleCheckKbase; @SuppressWarnings("unused") private static KnowledgeBase terminateAllKbase; - public AutoscalerRuleEvaluator(String minCheckDroolFileName, String scaleCheckDroolFileName){ + public AutoscalerRuleEvaluator(String minCheckDroolFileName, String obsoleteCheckDroolFileName, String scaleCheckDroolFileName){ - this.minCheckDroolFileName = minCheckDroolFileName; - this.scaleCheckDroolFileName = scaleCheckDroolFileName; + if (minCheckDroolFileName != null && !minCheckDroolFileName.isEmpty()) { + this.minCheckDroolFileName = minCheckDroolFileName; + } + + if (obsoleteCheckDroolFileName != null && !obsoleteCheckDroolFileName.isEmpty()) { + this.obsoleteCheckDroolFileName = obsoleteCheckDroolFileName; + } + + if (scaleCheckDroolFileName != null && !scaleCheckDroolFileName.isEmpty()) { + this.scaleCheckDroolFileName = scaleCheckDroolFileName; + } minCheckKbase = readKnowledgeBase(this.minCheckDroolFileName); if (log.isDebugEnabled()) { log.debug("Minimum check rule is parsed successfully : " + this.minCheckDroolFileName); } + + obsoleteCheckKbase = readKnowledgeBase(this.obsoleteCheckDroolFileName); + + if (log.isDebugEnabled()) { + log.debug("Obsolete check rule is parsed successfully : " + this.obsoleteCheckDroolFileName); + } scaleCheckKbase = readKnowledgeBase(this.scaleCheckDroolFileName); if (log.isDebugEnabled()) { log.debug("Scale check rule is parsed successfully : " + this.scaleCheckDroolFileName); } + terminateAllKbase = readKnowledgeBase(this.terminateAllDroolFileName); if (log.isDebugEnabled()) { log.debug("Terminate all rule is parsed successfully : " + this.terminateAllDroolFileName); } } - - public static FactHandle evaluateMinCheck(StatefulKnowledgeSession ksession, FactHandle handle, Object obj) { - if (handle == null) { - ksession.setGlobal("$delegator", new RuleTasksDelegator()); handle = ksession.insert(obj); } else { @@ -95,13 +109,24 @@ public class AutoscalerRuleEvaluator { } return handle; } - + + public static FactHandle evaluateObsoleteCheck(StatefulKnowledgeSession ksession, FactHandle handle, Object obj) { + if (handle == null) { + ksession.setGlobal("$delegator", new RuleTasksDelegator()); + handle = ksession.insert(obj); + } else { + ksession.update(handle, obj); + } + ksession.fireAllRules(); + if(log.isDebugEnabled()){ + log.debug(String.format("Obsolete check executed for : %s ", obj)); + } + return handle; + } public static FactHandle evaluateScaleCheck(StatefulKnowledgeSession ksession, FactHandle handle, Object obj) { - if (handle == null) { ksession.setGlobal("$delegator", new RuleTasksDelegator()); - handle = ksession.insert(obj); } else { ksession.update(handle, obj); @@ -113,12 +138,8 @@ public class AutoscalerRuleEvaluator { return handle; } - - public static FactHandle evaluateTerminateAll(StatefulKnowledgeSession ksession, FactHandle handle, Object obj) { - if (handle == null) { - ksession.setGlobal("$delegator", new RuleTasksDelegator()); handle = ksession.insert(obj); } else { @@ -131,13 +152,11 @@ public class AutoscalerRuleEvaluator { return handle; } - public static FactHandle evaluateTerminateDependency(StatefulKnowledgeSession ksession, FactHandle handle, Object obj) { if(log.isDebugEnabled()){ log.debug(String.format("Terminate dependency check executing for : %s ", obj)); } if (handle == null) { - ksession.setGlobal("$delegator", new RuleTasksDelegator()); handle = ksession.insert(obj); } else { @@ -153,20 +172,27 @@ public class AutoscalerRuleEvaluator { return handle; } - - public StatefulKnowledgeSession getMinCheckStatefulSession() { StatefulKnowledgeSession ksession; ksession = minCheckKbase.newStatefulKnowledgeSession(); ksession.setGlobal("log", RuleLog.getInstance()); return ksession; } + + public StatefulKnowledgeSession getObsoleteCheckStatefulSession() { + StatefulKnowledgeSession ksession; + ksession = obsoleteCheckKbase.newStatefulKnowledgeSession(); + ksession.setGlobal("log", RuleLog.getInstance()); + return ksession; + } + public StatefulKnowledgeSession getScaleCheckStatefulSession() { StatefulKnowledgeSession ksession; ksession = scaleCheckKbase.newStatefulKnowledgeSession(); ksession.setGlobal("log", RuleLog.getInstance()); return ksession; } + public StatefulKnowledgeSession getTerminateAllStatefulSession() { StatefulKnowledgeSession ksession; ksession = scaleCheckKbase.newStatefulKnowledgeSession(); @@ -196,7 +222,6 @@ public class AutoscalerRuleEvaluator { } private static KnowledgeBase readKnowledgeBase(String drlFileName) { - KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); String configDir = CarbonUtils.getCarbonConfigDirPath(); String droolsDir = configDir + File.separator + StratosConstants.DROOLS_DIR_NAME; @@ -213,7 +238,4 @@ public class AutoscalerRuleEvaluator { kbase.addKnowledgePackages(kbuilder.getKnowledgePackages()); return kbase; } - - - } http://git-wip-us.apache.org/repos/asf/stratos/blob/80855b74/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/constants/StratosConstants.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/constants/StratosConstants.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/constants/StratosConstants.java index 401e6c0..846f7a4 100644 --- a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/constants/StratosConstants.java +++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/constants/StratosConstants.java @@ -160,6 +160,8 @@ public class StratosConstants { public static final String VM_SCALE_CHECK_DROOL_FILE = "scaling.drl"; public static final String CONTAINER_MIN_CHECK_DROOL_FILE = "container-mincheck.drl"; public static final String VM_MIN_CHECK_DROOL_FILE = "mincheck.drl"; + public static final String CONTAINER_OBSOLETE_CHECK_DROOL_FILE = "obsoletecheck.drl"; + public static final String VM_OBSOLETE_CHECK_DROOL_FILE = "container-obsoletecheck.drl"; // Policy and definition related constants public static final int PUBLIC_DEFINITION = 0; http://git-wip-us.apache.org/repos/asf/stratos/blob/80855b74/products/stratos/modules/distribution/src/main/conf/drools/container-mincheck.drl ---------------------------------------------------------------------- diff --git a/products/stratos/modules/distribution/src/main/conf/drools/container-mincheck.drl b/products/stratos/modules/distribution/src/main/conf/drools/container-mincheck.drl index f87a556..688b9dc 100644 --- a/products/stratos/modules/distribution/src/main/conf/drools/container-mincheck.drl +++ b/products/stratos/modules/distribution/src/main/conf/drools/container-mincheck.drl @@ -52,22 +52,3 @@ dialect "mvel" $delegator.delegateStartContainers($kubernetesClusterContext); } end - -rule "Terminate Obsoleted Containers" -dialect "mvel" - when - $kubernetesClusterContext : KubernetesClusterContext () - kubernetesClusterId : String() from $kubernetesClusterContext.getKubernetesClusterID() - obsoleteReplicas : Integer() from $kubernetesClusterContext.getObsoletedMembers().size() - - eval(log.info("Running obsolete containers rule [kub-cluster] : " + kubernetesClusterId + " [cluster] : " + clusterId)) - eval(log.info("[obsolete-check] " + "[cluster] : " + clusterId + " [Replicas] obsoleteReplicas : " + obsoleteReplicas)) - eval($kubernetesClusterContext.getObsoletedMembers().keySet().size() > 0) - memberId : String() from $kubernetesClusterContext.getObsoletedMembers().keySet() - eval(log.debug("[obsolete-check] [kub-cluster] : " + kubernetesClusterId + " [cluster] : " + clusterId + " Member id : " + memberId)) - then - log.info("[obsolete-check] Terminating the obsolete member with id : " + memberId + " in the cluster : " + clusterId); - $delegator.delegateTerminateContainer($kubernetesClusterContext, memberId); -end - - http://git-wip-us.apache.org/repos/asf/stratos/blob/80855b74/products/stratos/modules/distribution/src/main/conf/drools/container-obsoletecheck.drl ---------------------------------------------------------------------- diff --git a/products/stratos/modules/distribution/src/main/conf/drools/container-obsoletecheck.drl b/products/stratos/modules/distribution/src/main/conf/drools/container-obsoletecheck.drl new file mode 100644 index 0000000..6af208f --- /dev/null +++ b/products/stratos/modules/distribution/src/main/conf/drools/container-obsoletecheck.drl @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.stratos.autoscaler.rule; + +import org.apache.commons.logging.Log; +import org.apache.stratos.autoscaler.KubernetesClusterContext; + +global org.apache.stratos.autoscaler.rule.RuleLog log; +global org.apache.stratos.autoscaler.rule.RuleTasksDelegator $delegator; +global java.lang.String clusterId; + +rule "Terminate Obsoleted Containers" +dialect "mvel" + when + $kubernetesClusterContext : KubernetesClusterContext () + kubernetesClusterId : String() from $kubernetesClusterContext.getKubernetesClusterID() + obsoleteReplicas : Integer() from $kubernetesClusterContext.getObsoletedMembers().size() + + eval(log.info("Running obsolete containers rule [kub-cluster] : " + kubernetesClusterId + " [cluster] : " + clusterId)) + eval(log.info("[obsolete-check] " + "[cluster] : " + clusterId + " [Replicas] obsoleteReplicas : " + obsoleteReplicas)) + eval($kubernetesClusterContext.getObsoletedMembers().keySet().size() > 0) + memberId : String() from $kubernetesClusterContext.getObsoletedMembers().keySet() + eval(log.debug("[obsolete-check] [kub-cluster] : " + kubernetesClusterId + " [cluster] : " + clusterId + " Member id : " + memberId)) + then + log.info("[obsolete-check] Terminating the obsolete member with id : " + memberId + " in the cluster : " + clusterId); + $delegator.delegateTerminateContainer($kubernetesClusterContext, memberId); +end + + http://git-wip-us.apache.org/repos/asf/stratos/blob/80855b74/products/stratos/modules/distribution/src/main/conf/drools/mincheck.drl ---------------------------------------------------------------------- diff --git a/products/stratos/modules/distribution/src/main/conf/drools/mincheck.drl b/products/stratos/modules/distribution/src/main/conf/drools/mincheck.drl index 29cd987..96d7a09 100755 --- a/products/stratos/modules/distribution/src/main/conf/drools/mincheck.drl +++ b/products/stratos/modules/distribution/src/main/conf/drools/mincheck.drl @@ -67,17 +67,3 @@ dialect "mvel" } $delegator.delegateSpawn($ctxt, clusterId, lbRef, isPrimary); end - -rule "Terminate Obsoleted Instances" -dialect "mvel" - when - $ctxt : PartitionContext () - eval(log.debug("Running obsolete instances rule: [partition] " + $ctxt.getPartitionId() + " [network-partition] " + $ctxt.getNetworkPartitionId())) - eval(log.debug("[obsolete-check] [network-partition] " + $ctxt.getNetworkPartitionId() + " [partition] " + $ctxt.getPartitionId() +" Obsolete member count: " + $ctxt.getObsoletedMembers().size())) - eval($ctxt.getObsoletedMembers().keySet().size() > 0) - memberId : String() from $ctxt.getObsoletedMembers().keySet() - eval(log.debug("[obsolete-check] [network-partition] " + $ctxt.getNetworkPartitionId() + " [partition] " + $ctxt.getPartitionId() + " Member id: " + memberId)) - then - $delegator.terminateObsoleteInstance(memberId); -end - http://git-wip-us.apache.org/repos/asf/stratos/blob/80855b74/products/stratos/modules/distribution/src/main/conf/drools/obsoletecheck.drl ---------------------------------------------------------------------- diff --git a/products/stratos/modules/distribution/src/main/conf/drools/obsoletecheck.drl b/products/stratos/modules/distribution/src/main/conf/drools/obsoletecheck.drl new file mode 100755 index 0000000..55f80cf --- /dev/null +++ b/products/stratos/modules/distribution/src/main/conf/drools/obsoletecheck.drl @@ -0,0 +1,66 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.stratos.autoscaler.rule; + +import org.apache.stratos.messaging.domain.topology.Service; +import org.apache.stratos.messaging.domain.topology.Cluster; +import org.apache.stratos.autoscaler.AutoscalerContext; +import org.apache.stratos.autoscaler.Constants; +import org.apache.stratos.autoscaler.policy.PolicyManager; +import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy; +import org.apache.stratos.autoscaler.policy.model.RequestsInFlight; +import org.apache.stratos.autoscaler.policy.model.LoadThresholds; +import org.apache.stratos.autoscaler.client.cloud.controller.CloudControllerClient; +import org.apache.stratos.autoscaler.algorithm.AutoscaleAlgorithm; +import org.apache.stratos.autoscaler.algorithm.OneAfterAnother; +import org.apache.stratos.autoscaler.algorithm.RoundRobin; +import org.apache.stratos.autoscaler.PartitionContext; +import org.apache.stratos.messaging.message.receiver.topology.TopologyManager; +import org.apache.stratos.autoscaler.rule.AutoscalerRuleEvaluator; +import org.apache.commons.logging.Log; +import org.apache.stratos.autoscaler.policy.model.DeploymentPolicy; +import org.apache.stratos.autoscaler.partition.PartitionGroup; +import org.apache.stratos.cloud.controller.stub.deployment.partition.Partition; +import org.apache.stratos.cloud.controller.stub.pojo.MemberContext; + +global org.apache.stratos.autoscaler.rule.RuleLog log; +global org.apache.stratos.autoscaler.policy.PolicyManager $manager; +global org.apache.stratos.autoscaler.AutoscalerContext $context; +global org.apache.stratos.autoscaler.rule.RuleTasksDelegator $delegator; +global org.apache.stratos.messaging.domain.topology.Topology $topology; +global java.util.Map partitionCtxts; +global java.lang.String clusterId; +global java.lang.String lbRef; +global java.lang.Boolean isPrimary; +global Integer primaryMemberCount; + +rule "Terminate Obsoleted Instances" +dialect "mvel" + when + $ctxt : PartitionContext () + eval(log.debug("Running obsolete instances rule: [partition] " + $ctxt.getPartitionId() + " [network-partition] " + $ctxt.getNetworkPartitionId())) + eval(log.debug("[obsolete-check] [network-partition] " + $ctxt.getNetworkPartitionId() + " [partition] " + $ctxt.getPartitionId() +" Obsolete member count: " + $ctxt.getObsoletedMembers().size())) + eval($ctxt.getObsoletedMembers().keySet().size() > 0) + memberId : String() from $ctxt.getObsoletedMembers().keySet() + eval(log.debug("[obsolete-check] [network-partition] " + $ctxt.getNetworkPartitionId() + " [partition] " + $ctxt.getPartitionId() + " Member id: " + memberId)) + then + $delegator.terminateObsoleteInstance(memberId); +end +
