Updated Branches:
  refs/heads/master 20612592e -> 36c403a7f

Removing old rules scheduler and adding delegator class for utility tasks done 
by rules


Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/71ac3524
Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/71ac3524
Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/71ac3524

Branch: refs/heads/master
Commit: 71ac352405a5f4f1ba19fdb30d1182e9d830a408
Parents: 9c1afd0
Author: Lahiru Sandaruwan <[email protected]>
Authored: Thu Dec 12 09:16:50 2013 +0530
Committer: Lahiru Sandaruwan <[email protected]>
Committed: Thu Dec 12 09:16:50 2013 +0530

----------------------------------------------------------------------
 .../autoscaler/NetworkPartitionContext.java     |  24 ++--
 .../internal/AutoscalerServerComponent.java     |  13 +--
 .../rule/AutoscalerRuleEvaluator.java           | 111 +-----------------
 .../autoscaler/rule/ExecutorTaskScheduler.java  |  89 ---------------
 .../autoscaler/rule/RuleTasksDelegator.java     | 114 +++++++++++++++++++
 .../distribution/src/main/conf/mincheck.drl     |   6 +-
 .../distribution/src/main/conf/scaling.drl      |  22 ++--
 7 files changed, 155 insertions(+), 224 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/71ac3524/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/NetworkPartitionContext.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/NetworkPartitionContext.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/NetworkPartitionContext.java
index a41d332..b4595f6 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/NetworkPartitionContext.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/NetworkPartitionContext.java
@@ -51,7 +51,7 @@ public class NetworkPartitionContext {
 
     //details required for partition selection algorithms
     private int currentPartitionIndex;
-    private Map<String, Integer> partitionCountMap;
+    private Map<String, Integer> partitionToMemberCountMap;
 
     //partitions of this network partition
     private Map<String, PartitionContext> partitionCtxts;
@@ -62,6 +62,7 @@ public class NetworkPartitionContext {
         this.id = id;
         this.setServiceToLBClusterId(new HashMap<String, String>());
         this.setClusterIdToLBClusterIdMap(new HashMap<String, String>());
+        partitionToMemberCountMap = new HashMap<String, Integer>();
 
     }
 
@@ -235,30 +236,30 @@ public class NetworkPartitionContext {
 
     public void increaseMemberCountInPartitionBy(String partitionId, int 
count){
 
-         partitionCountMap.put(partitionId, getMemberCount(partitionId) + 
count);
+         partitionToMemberCountMap.put(partitionId, 
getMemberCount(partitionId) + count);
      }
 
      public void decreaseMemberCountInPartitionBy(String partitionId, int 
count){
 
-         partitionCountMap.put(partitionId, getMemberCount(partitionId) - 
count);
+         partitionToMemberCountMap.put(partitionId, 
getMemberCount(partitionId) - count);
      }
 
      public void addPartitionCount(String partitionId, int count){
-         partitionCountMap.put(partitionId, count);
+         partitionToMemberCountMap.put(partitionId, count);
      }
 
      public void removePartitionCount(String partitionId){
 
-         partitionCountMap.remove(partitionId);
+         partitionToMemberCountMap.remove(partitionId);
      }
 
      public boolean partitionCountExists(String partitionId){
-         return partitionCountMap.containsKey(partitionId);
+         return partitionToMemberCountMap.containsKey(partitionId);
      }
 
      public int getMemberCount(String partitionId){
-         if(partitionCountMap.containsKey(partitionId)) {
-             return partitionCountMap.get(partitionId);
+         if(partitionToMemberCountMap.containsKey(partitionId)) {
+             return partitionToMemberCountMap.get(partitionId);
          }
          return 0;
      }
@@ -293,5 +294,12 @@ public class NetworkPartitionContext {
 
     public void setPartitions(Partition[] partitions) {
         this.partitions = partitions;
+        for (Partition partition: partitions){
+            partitionToMemberCountMap.put(partition.getId(), 0);
+        }
+    }
+
+    public void setPartitionToMemberCountMap(Map<String, Integer> 
partitionToMemberCountMap) {
+        this.partitionToMemberCountMap = partitionToMemberCountMap;
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/71ac3524/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServerComponent.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServerComponent.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServerComponent.java
index 3bd037e..a9631f2 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServerComponent.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServerComponent.java
@@ -28,7 +28,6 @@ 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.registry.RegistryManager;
-import org.apache.stratos.autoscaler.rule.ExecutorTaskScheduler;
 import org.apache.stratos.autoscaler.topology.AutoscalerTopologyReceiver;
 import org.apache.stratos.autoscaler.util.AutoScalerConstants;
 import org.apache.stratos.autoscaler.util.Deserializer;
@@ -103,12 +102,12 @@ public class AutoscalerServerComponent {
                                log.debug("Health message processor thread 
started");
                        }
                        // Start scheduler for running rules
-                       ExecutorTaskScheduler executor = new 
ExecutorTaskScheduler();
-                       Thread executorThread = new Thread(executor);
-                       executorThread.start();
-                       if (log.isDebugEnabled()) {
-                               log.debug("Rules executor thread started");
-                       }
+//                     ExecutorTaskScheduler executor = new 
ExecutorTaskScheduler();
+//                     Thread executorThread = new Thread(executor);
+//                     executorThread.start();
+//                     if (log.isDebugEnabled()) {
+//                             log.debug("Rules executor thread started");
+//                     }
                        this.registryManager = RegistryManager.getInstance();
                        // Adding the registry stored partitions to the 
information model.
                        ArrayList<Partition> partitions = 
this.retreivePartitions();

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/71ac3524/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 4589efa..e96b7c9 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
@@ -21,17 +21,8 @@ package org.apache.stratos.autoscaler.rule;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.autoscaler.Constants;
 import org.apache.stratos.autoscaler.NetworkPartitionContext;
 import org.apache.stratos.autoscaler.PartitionContext;
-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.client.cloud.controller.CloudControllerClient;
-import org.apache.stratos.autoscaler.partition.PartitionManager;
-import org.apache.stratos.cloud.controller.deployment.partition.Partition;
-import org.apache.stratos.cloud.controller.pojo.MemberContext;
-import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
 import org.drools.KnowledgeBase;
 import org.drools.KnowledgeBaseFactory;
 import org.drools.builder.*;
@@ -42,7 +33,6 @@ import org.drools.runtime.rule.FactHandle;
 import org.wso2.carbon.utils.CarbonUtils;
 
 import java.io.File;
-import java.util.Enumeration;
 import java.util.Properties;
 
 /**
@@ -60,11 +50,6 @@ public class AutoscalerRuleEvaluator {
        private static KnowledgeBase minCheckKbase;
        private static KnowledgeBase scaleCheckKbase;
 
-
-    public static double scaleUpFactor = 0.8;   //get from config
-    public static double scaleDownFactor = 0.2;
-    public static double scaleDownLowerRate = 0.8;
-
     public AutoscalerRuleEvaluator(){
 
         minCheckKbase = readKnowledgeBase(DRL_FILE_NAME);
@@ -86,7 +71,7 @@ public class AutoscalerRuleEvaluator {
 
         if (handle == null) {
 
-            ksession.setGlobal("$evaluator", new AutoscalerRuleEvaluator());
+            ksession.setGlobal("$delegator", new RuleTasksDelegator());
             handle = ksession.insert(obj);
         } else {
             ksession.update(handle, obj);
@@ -100,14 +85,16 @@ public class AutoscalerRuleEvaluator {
     public static FactHandle evaluateScaleCheck(StatefulKnowledgeSession 
ksession, FactHandle handle, Object obj) {
 
         if (handle == null) {
-            ksession.setGlobal("$evaluator", new AutoscalerRuleEvaluator());
+            ksession.setGlobal("$delegator", new RuleTasksDelegator());
 
             handle = ksession.insert(obj);
         } else {
             ksession.update(handle, obj);
         }
         ksession.fireAllRules();
-        log.info("fired all rules "+obj);
+        if(log.isDebugEnabled()){
+            log.debug(String.format("Rules executed for : %s ", obj));
+        }
         return handle;
     }
 
@@ -123,34 +110,6 @@ public class AutoscalerRuleEvaluator {
         ksession = scaleCheckKbase.newStatefulKnowledgeSession();
         return ksession;
     }
-    
-       public void delegateSpawn(PartitionContext partitionContext, String 
clusterId) {
-        try {
-
-            String nwPartitionId = partitionContext.getNetworkPartitionId();
-            NetworkPartitionContext ctxt =
-                                           PartitionManager.getInstance()
-                                                           
.getNetworkPartition(nwPartitionId);
-
-            String lbClusterId = getLbClusterId(partitionContext, ctxt);
-
-            MemberContext memberContext =
-                                          CloudControllerClient.getInstance()
-                                                               
.spawnAnInstance(partitionContext.getPartition(),
-                                                                               
 clusterId,
-                                                                               
 lbClusterId);
-            if (memberContext != null) {
-                partitionContext.addPendingMember(memberContext);
-            }
-
-        } catch (Throwable e) {
-                       String message = "Cannot spawn an instance";
-            log.error(message, e);
-                       throw new RuntimeException(message, e);
-               }
-       }
-
-
 
     public static String getLbClusterId(PartitionContext partitionContext, 
NetworkPartitionContext ctxt) {
         Properties props = partitionContext.getProperties();
@@ -167,45 +126,6 @@ public class AutoscalerRuleEvaluator {
         return lbClusterId;
     }
 
-    public void delegateTerminate(Partition partition, String clusterId) {
-               log.info("terminate from partition " + partition.getId() + " 
cluster " + clusterId );
-       }
-
-    public void delegateTerminate(String memberId) {
-               try {
-
-                       CloudControllerClient.getInstance().terminate(memberId);
-               } catch (Throwable e) {
-                       log.error("Cannot terminate instance", e);
-               }
-       }
-       
-       public void delegateTerminateAll(String clusterId) {
-        try {
-
-            
CloudControllerClient.getInstance().terminateAllInstances(clusterId);
-        } catch (Throwable e) {
-            log.error("Cannot terminate instance", e);
-        }
-    }
-
-//     public boolean delegateSpawn(Partition partition, String clusterId, int 
memberCountToBeIncreased) {
-//             CloudControllerClient cloudControllerClient = new 
CloudControllerClient();
-//             try {
-//            int currentMemberCount = 
AutoscalerContext.getInstance().getClusterMonitor(clusterId).getMemberCount();
-//            log.info("Current member count is " + currentMemberCount );
-//
-//            if(currentMemberCount < partition.getPartitionMembersMax()) {
-//                
AutoscalerContext.getInstance().getClusterMonitor(clusterId).increaseMemberCount(memberCountToBeIncreased);
-//                cloudControllerClient.spawnInstances(partition, clusterId, 
memberCountToBeIncreased);
-//            }
-//                     return true;
-//             } catch (Throwable e) {
-//                     log.error("Cannot spawn an instance", e);
-//             }
-//             return false;
-//     }
-
     private static KnowledgeBase readKnowledgeBase(String drlFileName) {
         
         KnowledgeBuilder kbuilder = 
KnowledgeBuilderFactory.newKnowledgeBuilder();
@@ -224,27 +144,6 @@ public class AutoscalerRuleEvaluator {
         return kbase;
     }
 
-    public AutoscaleAlgorithm getAutoscaleAlgorithm(String partitionAlgorithm){
-        AutoscaleAlgorithm autoscaleAlgorithm = null;
-        if(Constants.ROUND_ROBIN_ALGORITHM_ID.equals(partitionAlgorithm)){
-
-            autoscaleAlgorithm = new RoundRobin();
-        } else 
if(Constants.ONE_AFTER_ANOTHER_ALGORITHM_ID.equals(partitionAlgorithm)){
-
-            autoscaleAlgorithm = new OneAfterAnother();
-        }
-        return autoscaleAlgorithm;
-    }
-
-    public double getPredictedValueForNextMinute(float average, float 
gradient, float secondDerivative){
-        double predictedValue;
-//        s = u * t + 0.5 * a * t * t
-        if(log.isDebugEnabled()) {
-            log.debug((String.format("Calculating predicted value, gradient %s 
", gradient)));
-        }
-        predictedValue = average + gradient + 0.5 * secondDerivative;
-        return predictedValue;
-    }
 
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/71ac3524/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/ExecutorTaskScheduler.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/ExecutorTaskScheduler.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/ExecutorTaskScheduler.java
deleted file mode 100644
index 869058e..0000000
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/ExecutorTaskScheduler.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * 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 java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
-
-import org.apache.commons.configuration.XMLConfiguration;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.autoscaler.Constants;
-import org.apache.stratos.autoscaler.util.ConfUtil;
-
-/**
- * This class is responsible for scheduling the task of evaluating the current 
details of topology, statistics, and health
- * status against the rules set(written in Drools)
- */
-public class ExecutorTaskScheduler implements Runnable {
-    private static final Log log = 
LogFactory.getLog(ExecutorTaskScheduler.class);
-
-    private static int initialDelay;
-    private static int period;
-
-    public ExecutorTaskScheduler() {
-        XMLConfiguration conf = ConfUtil.getInstance().getConfiguration();
-        initialDelay = 
conf.getInt("autoscaler.rulesEvaluator.schedule.initialDelay", 
Constants.SCHEDULE_DEFAULT_INITIAL_DELAY);
-        period = conf.getInt("autoscaler.rulesEvaluator.schedule.period", 
Constants.SCHEDULE_DEFAULT_PERIOD);
-    }
-
-    @Override
-    public void run() {
-       final ScheduledExecutorService ex = 
Executors.newSingleThreadScheduledExecutor();
-        final Runnable rulesEvaluator = new Runnable() {
-            public void run() {
-
-//                try {
-//                    for (Service service : 
TopologyManager.getTopology().getServices()) {
-//
-//                        
AutoscalerRuleEvaluator.getInstance().evaluate(service);
-//                    }
-//
-//                    // Remove cluster context if its already removed from 
Topology
-//                    for (String clusterContextId : 
AutoscalerContext.getInstance().getClusterContexes().keySet()) {
-//                        boolean clusterAvailable = false;
-//                        for (Service service : 
TopologyManager.getTopology().getServices()) {
-//                            for (Cluster cluster : service.getClusters()) {
-//                                if 
(cluster.getClusterId().equals(clusterContextId)) {
-//
-//                                    clusterAvailable = true;
-//                                }
-//                            }
-//                        }
-//
-//                        if (!clusterAvailable) {
-//                            
AutoscalerContext.getInstance().removeClusterContext(clusterContextId);
-//                        }
-//                    }
-//
-//                } catch (Exception e) {
-//                    String msg = "Error while evaluating rules.";
-//                    log.error(msg, e);
-//                    throw new RuntimeException(msg, e);
-////                    log.debug("Shutting down rule scheduler");
-////                    ex.shutdownNow();
-//                }
-            }
-        };
-        
-        ex.scheduleWithFixedDelay(rulesEvaluator, initialDelay, period, 
TimeUnit.SECONDS);
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/71ac3524/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
new file mode 100644
index 0000000..1a82239
--- /dev/null
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java
@@ -0,0 +1,114 @@
+package org.apache.stratos.autoscaler.rule;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.autoscaler.Constants;
+import org.apache.stratos.autoscaler.NetworkPartitionContext;
+import org.apache.stratos.autoscaler.PartitionContext;
+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.client.cloud.controller.CloudControllerClient;
+import org.apache.stratos.autoscaler.partition.PartitionManager;
+import org.apache.stratos.cloud.controller.deployment.partition.Partition;
+import org.apache.stratos.cloud.controller.pojo.MemberContext;
+
+import java.util.Properties;
+
+/**
+ * This will have utility methods that need to be executed from rule file...
+ */
+public class RuleTasksDelegator {
+
+    public static final double SCALE_UP_FACTOR = 0.8;   //get from config
+    public static final double SCALE_DOWN_FACTOR = 0.2;
+
+    private static final Log log = LogFactory.getLog(RuleTasksDelegator.class);
+
+    public double getPredictedValueForNextMinute(float average, float 
gradient, float secondDerivative, int timeInterval){
+        double predictedValue;
+//        s = u * t + 0.5 * a * t * t
+        predictedValue = average + gradient * timeInterval + 0.5 * 
secondDerivative * timeInterval * timeInterval;
+        return predictedValue;
+    }
+
+    public AutoscaleAlgorithm getAutoscaleAlgorithm(String partitionAlgorithm){
+        AutoscaleAlgorithm autoscaleAlgorithm = null;
+        if(Constants.ROUND_ROBIN_ALGORITHM_ID.equals(partitionAlgorithm)){
+
+            autoscaleAlgorithm = new RoundRobin();
+        } else 
if(Constants.ONE_AFTER_ANOTHER_ALGORITHM_ID.equals(partitionAlgorithm)){
+
+            autoscaleAlgorithm = new OneAfterAnother();
+        }
+        return autoscaleAlgorithm;
+    }
+
+    public void delegateSpawn(PartitionContext partitionContext, String 
clusterId) {
+        try {
+
+            String nwPartitionId = partitionContext.getNetworkPartitionId();
+            NetworkPartitionContext ctxt =
+                                          PartitionManager.getInstance()
+                                                          
.getNetworkPartition(nwPartitionId);
+
+            String lbClusterId = getLbClusterId(partitionContext, ctxt);
+
+            MemberContext memberContext =
+                                         CloudControllerClient.getInstance()
+                                                              
.spawnAnInstance(partitionContext.getPartition(),
+                                                                      
clusterId,
+                                                                      
lbClusterId);
+            if (memberContext != null) {
+               partitionContext.addPendingMember(memberContext);
+            }
+
+        } catch (Throwable e) {
+            String message = "Cannot spawn an instance";
+            log.error(message, e);
+            throw new RuntimeException(message, e);
+        }
+       }
+
+
+
+    public static String getLbClusterId(PartitionContext partitionContext, 
NetworkPartitionContext ctxt) {
+       Properties props = partitionContext.getProperties();
+       String value =
+                      (String) 
props.get(org.apache.stratos.messaging.util.Constants.LOAD_BALANCER_REF);
+       String lbClusterId = null;
+
+       if 
(value.equals(org.apache.stratos.messaging.util.Constants.DEFAULT_LOAD_BALANCER))
 {
+           lbClusterId = ctxt.getDefaultLbClusterId();
+       } else if 
(value.equals(org.apache.stratos.messaging.util.Constants.SERVICE_AWARE_LOAD_BALANCER))
 {
+           String serviceName = partitionContext.getServiceName();
+           lbClusterId = ctxt.getLBClusterIdOfService(serviceName);
+       }
+       return lbClusterId;
+    }
+
+    public void delegateTerminate(Partition partition, String clusterId) {
+        log.info("terminate from partition " + partition.getId() + " cluster " 
+ clusterId );
+    }
+
+    public void delegateTerminate(String memberId) {
+        try {
+
+            CloudControllerClient.getInstance().terminate(memberId);
+        } catch (Throwable e) {
+            log.error("Cannot terminate instance", e);
+        }
+    }
+
+       public void delegateTerminateAll(String clusterId) {
+           try {
+
+               
CloudControllerClient.getInstance().terminateAllInstances(clusterId);
+           } catch (Throwable e) {
+               log.error("Cannot terminate instance", e);
+           }
+       }
+
+
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/71ac3524/products/autoscaler/modules/distribution/src/main/conf/mincheck.drl
----------------------------------------------------------------------
diff --git 
a/products/autoscaler/modules/distribution/src/main/conf/mincheck.drl 
b/products/autoscaler/modules/distribution/src/main/conf/mincheck.drl
index b5f8791..4ca2edc 100755
--- a/products/autoscaler/modules/distribution/src/main/conf/mincheck.drl
+++ b/products/autoscaler/modules/distribution/src/main/conf/mincheck.drl
@@ -44,7 +44,7 @@ import org.apache.stratos.cloud.controller.pojo.MemberContext;
 global org.apache.stratos.autoscaler.policy.PolicyManager $manager;
 global org.apache.stratos.autoscaler.AutoscalerContext $context; 
 global org.apache.commons.logging.Log log;
-global org.apache.stratos.autoscaler.rule.AutoscalerRuleEvaluator $evaluator;
+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;
@@ -56,7 +56,7 @@ dialect "mvel"
               eval($ctxt.getCurrentMemberCount() < 
$ctxt.getMinimumMemberCount())
 
        then
-              $evaluator.delegateSpawn($ctxt, clusterId);
+              $delegator.delegateSpawn($ctxt, clusterId);
               
 end
 
@@ -68,6 +68,6 @@ dialect "mvel"
             memberId : String() from $ctxt.getObsoletedMembers()
             eval($ctxt.removeObsoleteMember(memberId))
         then
-           $evaluator.delegateTerminate(memberId);
+           $delegator.delegateTerminate(memberId);
 end
 

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/71ac3524/products/autoscaler/modules/distribution/src/main/conf/scaling.drl
----------------------------------------------------------------------
diff --git a/products/autoscaler/modules/distribution/src/main/conf/scaling.drl 
b/products/autoscaler/modules/distribution/src/main/conf/scaling.drl
index 2252d84..42cf1e9 100644
--- a/products/autoscaler/modules/distribution/src/main/conf/scaling.drl
+++ b/products/autoscaler/modules/distribution/src/main/conf/scaling.drl
@@ -45,7 +45,7 @@ import org.apache.stratos.cloud.controller.pojo.MemberContext;
 import org.apache.stratos.autoscaler.policy.model.LoadAverage
 import org.apache.stratos.autoscaler.policy.model.MemoryConsumption
 
-global org.apache.stratos.autoscaler.rule.AutoscalerRuleEvaluator $evaluator;
+global org.apache.stratos.autoscaler.rule.RuleTasksDelegator $delegator;
 global org.apache.stratos.autoscaler.deployment.policy.DeploymentPolicy 
$deploymentPolicy;
 global org.apache.stratos.autoscaler.policy.model.AutoscalePolicy 
$autoscalePolicy;
 global java.lang.String clusterId;
@@ -56,21 +56,21 @@ dialect "mvel"
        when
         $networkPartitionContext : NetworkPartitionContext ()
         $loadThresholds : LoadThresholds() from  
$autoscalePolicy.getLoadThresholds()
-        autoscaleAlgorithm : AutoscaleAlgorithm() from  
$evaluator.getAutoscaleAlgorithm($networkPartitionContext.getPartitionAlgorithm())
+        autoscaleAlgorithm : AutoscaleAlgorithm() from  
$delegator.getAutoscaleAlgorithm($networkPartitionContext.getPartitionAlgorithm())
         lbStatAverage : Float() from  
$networkPartitionContext.getAverageRequestsInFlight()
         lbStatGradient : Float() from  
$networkPartitionContext.getRequestsInFlightGradient()
         lbStatSecondDerivative : Float() from  
$networkPartitionContext.getRequestsInFlightSecondDerivative()
         averageLimit : Float() from  
$loadThresholds.getRequestsInFlight().getAverage()
 
         partition :  Partition() from 
autoscaleAlgorithm.getNextScaleUpPartition($networkPartitionContext, clusterId)
-        predictedValue : Float() from 
$evaluator.getPredictedValueForNextMinute(lbStatAverage, lbStatGradient, 
lbStatSecondDerivative)
-        eval(predictedValue > averageLimit * $evaluator.scaleUpFactor)
+        predictedValue : Float() from 
$delegator.getPredictedValueForNextMinute(lbStatAverage, lbStatGradient, 
lbStatSecondDerivative, 1)
+        eval(predictedValue > averageLimit * $delegator.SCALE_UP_FACTOR)
        then
 //         if (predictedValue*scaleUpFactor > averageLimit){
             //scale up
             NetworkPartitionContext networkPartitionContext;
 
-            
$evaluator.delegateSpawn($networkPartitionContext.getPartitionCtxt(partition.getId()),
 clusterId);
+            
$delegator.delegateSpawn($networkPartitionContext.getPartitionCtxt(partition.getId()),
 clusterId);
 
 //         }
 
@@ -82,15 +82,15 @@ dialect "mvel"
        when
         $networkPartitionContext : NetworkPartitionContext ()
         $loadThresholds : LoadThresholds() from  
$autoscalePolicy.getLoadThresholds()
-        autoscaleAlgorithm : AutoscaleAlgorithm() from  
$evaluator.getAutoscaleAlgorithm($networkPartitionContext.getPartitionAlgorithm())
+        autoscaleAlgorithm : AutoscaleAlgorithm() from  
$delegator.getAutoscaleAlgorithm($networkPartitionContext.getPartitionAlgorithm())
         lbStatAverage : Float() from  
$networkPartitionContext.getAverageRequestsInFlight()
         lbStatGradient : Float() from  
$networkPartitionContext.getRequestsInFlightGradient()
         lbStatSecondDerivative : Float() from  
$networkPartitionContext.getRequestsInFlightSecondDerivative()
         averageLimit : Float() from  
$loadThresholds.getRequestsInFlight().getAverage()
 
         partition :  Partition() from 
autoscaleAlgorithm.getNextScaleDownPartition($networkPartitionContext, 
clusterId)
-        predictedValue :  Float() from 
$evaluator.getPredictedValueForNextMinute(lbStatAverage, lbStatGradient, 
lbStatSecondDerivative)
-        eval(predictedValue* $evaluator.scaleDownFactor* 
$evaluator.scaleDownLowerRate < averageLimit)
+        predictedValue :  Float() from 
$delegator.getPredictedValueForNextMinute(lbStatAverage, lbStatGradient, 
lbStatSecondDerivative, 1)
+        eval(predictedValue < averageLimit * $delegator.SCALE_DOWN_FACTOR)
        then
 
         MemberStatsContext selectedMemberStatsContext = null;
@@ -102,9 +102,9 @@ dialect "mvel"
                 LoadAverage loadAverage = memberStatsContext.getLoadAverage();
                 MemoryConsumption memoryConsumption = 
memberStatsContext.getMemoryConsumption();
                 double predictedCpu
-                = 
$evaluator.getPredictedValueForNextMinute(loadAverage.getAverage(),loadAverage.getGradient(),loadAverage.getSecondDerivative());
+                = 
$delegator.getPredictedValueForNextMinute(loadAverage.getAverage(),loadAverage.getGradient(),loadAverage.getSecondDerivative(),
 1);
                 double predictedMemoryConsumption
-                = 
$evaluator.getPredictedValueForNextMinute(memoryConsumption.getAverage(),memoryConsumption.getGradient(),memoryConsumption.getSecondDerivative());
+                = 
$delegator.getPredictedValueForNextMinute(memoryConsumption.getAverage(),memoryConsumption.getGradient(),memoryConsumption.getSecondDerivative(),
 1);
                 double overallLoad = (predictedCpu + 
predictedMemoryConsumption) / 2;
                 if(!foundAValue){
                     foundAValue = true;
@@ -119,7 +119,7 @@ dialect "mvel"
             }
         }
         if(selectedMemberStatsContext != null)
-            
$evaluator.delegateTerminate(selectedMemberStatsContext.getMemberId());
+            
$delegator.delegateTerminate(selectedMemberStatsContext.getMemberId());
 
 
 end

Reply via email to