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:11 UTC
[25/50] [abbrv] git commit: fixing drools logic and adding comments
fixing drools logic and adding comments
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/67313a1e
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/67313a1e
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/67313a1e
Branch: refs/heads/master
Commit: 67313a1eca106fb310a2061b1e46f5fbb03e4c5f
Parents: 7c072a9
Author: R-Rajkumar <rr...@gmail.com>
Authored: Fri Oct 10 10:38:43 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:57 2014 +0530
----------------------------------------------------------------------
.../autoscaler/KubernetesClusterContext.java | 12 ++++
.../cloud/controller/CloudControllerClient.java | 22 +++---
.../KubernetesServiceClusterMonitor.java | 13 ++--
.../autoscaler/rule/RuleTasksDelegator.java | 71 ++++++++++++++------
.../src/main/conf/container-mincheck.drl | 23 ++++---
.../src/main/conf/container-scaling.drl | 27 ++++++--
6 files changed, 114 insertions(+), 54 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/67313a1e/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/KubernetesClusterContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/KubernetesClusterContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/KubernetesClusterContext.java
index b75c0cc..0dfea0c 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/KubernetesClusterContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/KubernetesClusterContext.java
@@ -50,6 +50,10 @@ public class KubernetesClusterContext implements Serializable {
private int minReplicas;
private int maxReplicas = 10;
private int currentReplicas = 0;
+
+ // it will tell whether the startContainers() method succeed or not for the 1st time
+ // we should call startContainers() only once
+ private boolean isServiceClusterCreated = false;
// properties
private Properties properties;
@@ -647,4 +651,12 @@ public class KubernetesClusterContext implements Serializable {
public void setClusterId(String clusterId) {
this.clusterId = clusterId;
}
+
+ public boolean isServiceClusterCreated() {
+ return isServiceClusterCreated;
+ }
+
+ public void setServiceClusterCreated(boolean isServiceClusterCreated) {
+ this.isServiceClusterCreated = isServiceClusterCreated;
+ }
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/67313a1e/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
index b7a476a..ce69875 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
@@ -244,7 +244,7 @@ public class CloudControllerClient {
* @return
* @throws SpawningException
*/
- public synchronized MemberContext[] createContainers(String kubernetesClusterId, String clusterId) throws SpawningException {
+ public synchronized MemberContext[] startContainers(String kubernetesClusterId, String clusterId) throws SpawningException {
try {
KubernetesManager kubernetesManager = KubernetesManager.getInstance();
@@ -310,22 +310,22 @@ public class CloudControllerClient {
}
}
- public synchronized void updateKubernetesController(String clusterId, int replicas)
- throws SpawningException {
+ public synchronized MemberContext[] updateContainers(String clusterId, int replicas)
+ throws SpawningException {
try {
log.info(String.format("Updating kubernetes replication controller via cloud controller: " +
"[cluster] %s [replicas] %s", clusterId, replicas));
- stub.updateKubernetesController(clusterId, replicas);
+ MemberContext[] memberContexts = stub.updateContainers(clusterId, replicas);
+ return memberContexts;
+ } catch (CloudControllerServiceUnregisteredCartridgeExceptionException e) {
+ String msg = "Error while updating kubernetes controller, cartridge not found for [cluster] " + clusterId;
+ log.error(msg, e);
+ throw new SpawningException(msg, e);
} catch (RemoteException e) {
String msg = "Error while updating kubernetes controller, cannot communicate with " +
"cloud controller service";
log.error(msg, e);
- throw new SpawningException(e.getMessage(), e);
- } catch (CloudControllerServiceInvalidClusterExceptionException e) {
- String msg = "Error while updating kubernetes controller, invalid clusterId";
- log.error(msg, e);
- throw new SpawningException(e.getMessage(), e);
- }
+ throw new SpawningException(msg, e);
+ }
}
-
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/67313a1e/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 fdff259..8bfc1a8 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
@@ -96,7 +96,7 @@ public final class KubernetesServiceClusterMonitor extends KubernetesClusterMoni
getScaleCheckKnowledgeSession().setGlobal("laReset", loadAverageReset);
if (log.isDebugEnabled()) {
log.debug(String.format(
- "Running scale check for kub-cluster %s ", kubernetesClusterID));
+ "Running scale check for [kub-cluster] : %s [cluster] : %s ", kubernetesClusterID, getClusterId()));
}
scaleCheckFactHandle = AutoscalerRuleEvaluator.evaluateScaleCheck(
getScaleCheckKnowledgeSession(), scaleCheckFactHandle, getKubernetesClusterCtxt());
@@ -105,16 +105,17 @@ public final class KubernetesServiceClusterMonitor extends KubernetesClusterMoni
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));
+ + "[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()));
- }
+ String kubernetesClusterID = getKubernetesClusterCtxt().getKubernetesClusterID();
+ if (log.isDebugEnabled()) {
+ log.debug(String.format(
+ "Running min check for [kub-cluster] : %s [cluster] : %s ", kubernetesClusterID, getClusterId()));
+ }
minCheckFactHandle = AutoscalerRuleEvaluator.evaluateMinCheck(
getMinCheckKnowledgeSession(), minCheckFactHandle,
getKubernetesClusterCtxt());
http://git-wip-us.apache.org/repos/asf/stratos/blob/67313a1e/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java
index 416aa31..9d3227a 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java
@@ -199,36 +199,67 @@ public class RuleTasksDelegator {
log.error("Cannot terminate instance", e);
}
}
-
- public void delegateCreateContainers(KubernetesClusterContext kubernetesClusterContext) {
+
+ public void delegateStartContainers(KubernetesClusterContext kubernetesClusterContext) {
try {
- String kubernetesClusterId = kubernetesClusterContext.getKubernetesClusterID();
- String clusterId = kubernetesClusterContext.getClusterId();
+ String kubernetesClusterId = kubernetesClusterContext.getKubernetesClusterID();
+ String clusterId = kubernetesClusterContext.getClusterId();
CloudControllerClient ccClient = CloudControllerClient.getInstance();
- MemberContext[] memberContexts = ccClient.createContainers(kubernetesClusterId, clusterId);
- for (MemberContext memberContext : memberContexts) {
- if (null != memberContext) {
- kubernetesClusterContext.addPendingMember(memberContext);
- if (log.isDebugEnabled()) {
- log.debug(String.format(
- "Pending member added, [member] %s [kub cluster] %s",
- memberContext.getMemberId(), kubernetesClusterId));
- }
- } else {
- if (log.isDebugEnabled()) {
- log.debug("Returned member context is null, did not add to pending members");
+ MemberContext[] memberContexts = ccClient.startContainers(kubernetesClusterId, clusterId);
+ if (null != memberContexts) {
+ for (MemberContext memberContext : memberContexts) {
+ if (null != memberContext) {
+ kubernetesClusterContext.addPendingMember(memberContext);
+ kubernetesClusterContext.setServiceClusterCreated(true);
+ if (log.isDebugEnabled()) {
+ log.debug(String.format(
+ "Pending member added, [member] %s [kub cluster] %s",
+ memberContext.getMemberId(), kubernetesClusterId));
+ }
+ } else {
+ if (log.isDebugEnabled()) {
+ log.debug("Returned member context is null, did not add any pending members");
+ }
}
}
+ } else {
+ if (log.isDebugEnabled()) {
+ log.debug("Returned member context is null, did not add to pending members");
+ }
}
} catch (Throwable e) {
log.error("Cannot create containers ", e);
}
- }
+ }
- public void delegateExpandCluster(KubernetesClusterContext kubernetesClusterContext, int replicas) {
- String clusterId = kubernetesClusterContext.getClusterId();
+ public void delegateUpdateContainers(KubernetesClusterContext kubernetesClusterContext,
+ int replicas) {
+ String clusterId = kubernetesClusterContext.getClusterId();
try {
- CloudControllerClient.getInstance().updateKubernetesController(clusterId, replicas);
+ CloudControllerClient ccClient = CloudControllerClient.getInstance();
+ // getting newly created pods' member contexts
+ MemberContext[] memberContexts = ccClient.updateContainers(clusterId, replicas);
+ if (null != memberContexts) {
+ for (MemberContext memberContext : memberContexts) {
+ if (null != memberContext) {
+ kubernetesClusterContext.addPendingMember(memberContext);
+ if (log.isDebugEnabled()) {
+ String kubernetesClusterID = kubernetesClusterContext.getKubernetesClusterID();
+ log.debug(String.format(
+ "Pending member added, [member] %s [kub cluster] %s",
+ memberContext.getMemberId(), kubernetesClusterID));
+ }
+ } else {
+ if (log.isDebugEnabled()) {
+ log.debug("Returned member context is null, did not add any pending members");
+ }
+ }
+ }
+ } else {
+ if (log.isDebugEnabled()) {
+ log.debug("Returned array of member context is null, did not add to pending members");
+ }
+ }
} catch (Throwable e) {
log.error("Cannot update kubernetes controller ", e);
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/67313a1e/products/stratos/modules/distribution/src/main/conf/container-mincheck.drl
----------------------------------------------------------------------
diff --git a/products/stratos/modules/distribution/src/main/conf/container-mincheck.drl b/products/stratos/modules/distribution/src/main/conf/container-mincheck.drl
index 9c3cf0f..605c553 100644
--- a/products/stratos/modules/distribution/src/main/conf/container-mincheck.drl
+++ b/products/stratos/modules/distribution/src/main/conf/container-mincheck.drl
@@ -33,22 +33,23 @@ dialect "mvel"
kubernetesClusterId : String() from $kubernetesClusterContext.getKubernetesClusterID()
minReplicas : Integer() from $kubernetesClusterContext.getMinReplicas()
nonTerminatedReplicas : Integer() from $kubernetesClusterContext.getNonTerminatedMemberCount()
+ isServiceClusterCreated : Boolean() from $kubernetesClusterContext.isServiceClusterCreated()
eval(log.debug("Running minimum rule: [kub-cluster] " +kubernetesClusterId + " [cluster] " + clusterId))
- eval(log.debug("[min-check] [kub-cluster] " + kubernetesClusterId
- + " [cluster] " + clusterId + " Non terminated member count: " + nonTerminatedReplicas))
- eval(log.debug("[min-check] [kub-cluster] " + kubernetesClusterId
- + " [cluster] " + clusterId + " Minimum member count: " + minReplicas))
+ eval(log.debug("[min-check] " + " [cluster] " + clusterId + " [Replicas] nonTerminated : " + nonTerminatedReplicas))
+ eval(log.debug("[min-check] " + " [cluster] " + clusterId + " [Replicas] minReplicas : " + minReplicas))
eval(nonTerminatedReplicas < minReplicas)
then
- if (nonTerminatedReplicas == 0) {
- log.info("[min-check] [kub-cluster] " + kubernetesClusterId
- + " [cluster] " + clusterId + " : min-rule not satisfied, no containers created yet, creating minReplicas : " + minReplicas);
- $delegator.delegateCreateContainers($kubernetesClusterContext);
+ if (isServiceClusterCreated) {
+ // we suceeded calling startContainer() once, can't call it again
+ log.info("[min-check] Decided to scale-up : [cluster] " + clusterId);
+ log.info("[min-check] " + " [cluster] " + clusterId + " min-rule not satisfied, expanding cluster to minReplicas : " + minReplicas);
+ $delegator.delegateUpdateContainers($kubernetesClusterContext, minReplicas);
} else {
- log.info("[min-check] [kub-cluster] " + kubernetesClusterId
- + " [cluster] " + clusterId + " : min-rule not satisfied, expanding cluster to minReplicas : " + minReplicas);
- $delegator.delegateExpandCluster($kubernetesClusterContext, minReplicas);
+ // we should call startContainer
+ log.info("[min-check] Decided to create the cluster : [cluster] " + clusterId);
+ log.info("[min-check] " + " [cluster] " + clusterId + " : min-rule not satisfied, no containers created yet, creating minReplicas : " + minReplicas);
+ $delegator.delegateStartContainers($kubernetesClusterContext);
}
end
http://git-wip-us.apache.org/repos/asf/stratos/blob/67313a1e/products/stratos/modules/distribution/src/main/conf/container-scaling.drl
----------------------------------------------------------------------
diff --git a/products/stratos/modules/distribution/src/main/conf/container-scaling.drl b/products/stratos/modules/distribution/src/main/conf/container-scaling.drl
index 6f20274..398049b 100644
--- a/products/stratos/modules/distribution/src/main/conf/container-scaling.drl
+++ b/products/stratos/modules/distribution/src/main/conf/container-scaling.drl
@@ -38,6 +38,7 @@ dialect "mvel"
kubernetesClusterId : String() from $kubernetesClusterContext.getKubernetesClusterID()
minReplicas : Integer() from $kubernetesClusterContext.getMinReplicas()
maxReplicas : Integer() from $kubernetesClusterContext.getMaxReplicas()
+ nonTerminatedReplicas : Integer() from $kubernetesClusterContext.getNonTerminatedMemberCount()
eval(log.debug("Running scaling rule : [kub-cluster] " + kubernetesClusterId + " [cluster] " + clusterId))
@@ -78,6 +79,7 @@ dialect "mvel"
scaleUp : Boolean() from (scaleUpForRif || scaleUpForMc || scaleUpForLa)
scaleDown : Boolean() from (scaleDownForRif && scaleDownForMc && scaleDownForLa)
+ eval(log.debug("[scaling] " + " [cluster] " + clusterId + " [Replicas] nonTerminated : " + nonTerminatedReplicas))
eval(log.debug("[scaling] " + " [cluster] " + clusterId + " [Replicas] minReplicas : " + minReplicas))
eval(log.debug("[scaling] " + " [cluster] " + clusterId + " [Replicas] maxReplicas : " + maxReplicas))
@@ -101,7 +103,6 @@ dialect "mvel"
then
if (scaleUp) {
- log.info("[scale-up] Decided to scale up : [kub-cluster] " + kubernetesClusterId + " [cluster] " + clusterId);
int requiredReplicas = 0;
if (scaleUpForRif) {
int predictedReplicasForRif = $delegator.getPredictedReplicasForStat(minReplicas, rifUpperLimit, rifPredictedValue);
@@ -135,14 +136,28 @@ dialect "mvel"
requiredReplicas = minReplicas;
}
//expand the cluster
- log.info("[scaling] " + " [cluster] " + clusterId + " valid number of replicas to expand : " + requiredReplicas);
- $delegator.delegateExpandCluster($kubernetesClusterContext, requiredReplicas);
+ if (requiredReplicas > nonTerminatedReplicas) {
+ log.info("[scaling] Decided to scale-up : [cluster] " + clusterId);
+ log.info("[scaling-up] " + " [cluster] " + clusterId + " valid number of replicas to expand : " + requiredReplicas);
+ $delegator.delegateUpdateContainers($kubernetesClusterContext, requiredReplicas);
+ }
+ //shrink the cluster
+ if (requiredReplicas < nonTerminatedReplicas) {
+ log.info("[scaling] Decided to scale-down : [cluster] " + clusterId);
+ log.info("[scaling-down] " + " [cluster] " + clusterId + " valid number of replicas to shrink : " + requiredReplicas);
+ $delegator.delegateUpdateContainers($kubernetesClusterContext, requiredReplicas);
+ }
+ if (requiredReplicas == nonTerminatedReplicas) {
+ log.info("[scaling] " + " [cluster] " + clusterId + "non terminated replicas and predicted replicas are same");
+ }
+
} else if (scaleDown) {
- log.debug("[scale-down] Decided to scale down : [kub-cluster] " + kubernetesClusterId + " [cluster] " + clusterId);
+ log.info("[scaling] Decided to scale-down : [cluster] " + clusterId);
+ log.info("[scaling-down] " + " [cluster] " + clusterId + " shrink the cluster to minReplicas : " + minReplicas);
//shrink the cluster to minReplicas
- $delegator.delegateExpandCluster($kubernetesClusterContext, minReplicas);
+ $delegator.delegateUpdateContainers($kubernetesClusterContext, minReplicas);
} else {
- log.debug("[scaling] No decision made to either scale up or down ... ");
+ log.info("[scaling] No decision made to either scale up or down ... ");
}
end