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