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/12/07 13:40:39 UTC

[06/16] stratos git commit: Autoscaler changes with partition validation changes.

Autoscaler changes with partition validation changes.


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

Branch: refs/heads/master
Commit: 93e75006ae2af510a236144e79d19d62ca193806
Parents: d3fcf9b
Author: Nirmal Fernando <ni...@gmail.com>
Authored: Fri Dec 5 08:09:55 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sun Dec 7 17:59:31 2014 +0530

----------------------------------------------------------------------
 .../client/CloudControllerClient.java           | 22 ++++-
 .../monitor/cluster/ClusterMonitorFactory.java  | 12 +--
 .../autoscaler/rule/RuleTasksDelegator.java     | 95 +++++++++++++++-----
 3 files changed, 100 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/93e75006/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/CloudControllerClient.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/CloudControllerClient.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/CloudControllerClient.java
index 854e80f..bf68913 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/CloudControllerClient.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/CloudControllerClient.java
@@ -355,7 +355,10 @@ public class CloudControllerClient {
      * 				cartridge not found for the given cluster id, or if the given
      * 				kubernetes cluster id is not valid
      */
-    public synchronized MemberContext[] startContainers(String kubernetesClusterId, String clusterId) throws SpawningException {
+    public synchronized MemberContext[] startContainers(Partition partition,
+            String clusterId,
+            String networkPartitionId,String instanceID, boolean isPrimary,
+            int minMemberCount) throws SpawningException {
         try {
 
 //            KubernetesManager kubernetesManager = KubernetesManager.getInstance();
@@ -368,6 +371,23 @@ public class CloudControllerClient {
 
             ContainerClusterContext context = new ContainerClusterContext();
             context.setClusterId(clusterId);
+            context.setPartition(partition);
+            context.setNetworkPartitionId(networkPartitionId);
+            context.setInstanceId(instanceID);
+            
+            Properties memberContextProps = new Properties();
+            Property isPrimaryProp = new Property();
+            isPrimaryProp.setName("PRIMARY");
+            isPrimaryProp.setValue(String.valueOf(isPrimary));
+
+            Property minCountProp = new Property();
+            minCountProp.setName("MIN_COUNT");
+            minCountProp.setValue(String.valueOf(minMemberCount));
+
+            memberContextProps.addProperty(isPrimaryProp);
+            memberContextProps.addProperty(minCountProp);
+            context.setProperties(AutoscalerUtil.toStubProperties(memberContextProps));
+            
 //            Properties memberContextProps = new Properties();
 //            Property kubernetesClusterMasterIPProps = new Property();
 //            kubernetesClusterMasterIPProps.setName(StratosConstants.KUBERNETES_MASTER_IP);

http://git-wip-us.apache.org/repos/asf/stratos/blob/93e75006/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitorFactory.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitorFactory.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitorFactory.java
index f906f64..618c15a 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitorFactory.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitorFactory.java
@@ -46,13 +46,13 @@ public class ClusterMonitorFactory {
             throws PolicyValidationException, PartitionValidationException {
 
         AbstractClusterMonitor clusterMonitor;
-        if (cluster.isKubernetesCluster()) {
-            clusterMonitor = getDockerServiceClusterMonitor(cluster);
-//        } else if (cluster.isLbCluster()) {
-//            clusterMonitor = getVMLbClusterMonitor(cluster);
-        } else {
+//        if (cluster.isKubernetesCluster()) {
+//            clusterMonitor = getDockerServiceClusterMonitor(cluster);
+////        } else if (cluster.isLbCluster()) {
+////            clusterMonitor = getVMLbClusterMonitor(cluster);
+//        } else {
             clusterMonitor = getVMClusterMonitor(cluster);
-        }
+//        }
 
         return clusterMonitor;
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/93e75006/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 6a4766c..2bfd091 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
@@ -174,6 +174,57 @@ public class RuleTasksDelegator {
         }
     }
 
+    public void delegateStartContainers(ClusterLevelPartitionContext clusterMonitorPartitionContext, String clusterId, String instanceId, boolean isPrimary) {
+
+        try {
+
+            String nwPartitionId = clusterMonitorPartitionContext.getNetworkPartitionId();
+//            NetworkPartitionLbHolder lbHolder =
+//                    PartitionManager.getInstance()
+//                            .getNetworkPartitionLbHolder(nwPartitionId);
+//            String lbClusterId = getLbClusterId(lbRefType, clusterMonitorPartitionContext, lbHolder);
+            //Calculate accumulation of minimum counts of all the partition of current network partition
+            int minimumCountOfNetworkPartition = 0;
+            VMClusterMonitor vmClusterMonitor = (VMClusterMonitor) AutoscalerContext.getInstance().getClusterMonitor(clusterId);
+            VMClusterContext clusterContext = (VMClusterContext) vmClusterMonitor.getClusterContext();
+            ClusterLevelNetworkPartitionContext  clusterLevelNetworkPartitionContext = clusterContext.getNetworkPartitionCtxt(nwPartitionId);
+            ClusterInstanceContext clusterInstanceContext = clusterLevelNetworkPartitionContext.getClusterInstanceContext(instanceId);
+            minimumCountOfNetworkPartition = clusterInstanceContext.getMinInstanceCount();
+            MemberContext[] memberContexts =
+                    CloudControllerClient.getInstance()
+                            .startContainers(clusterMonitorPartitionContext.getPartition(),
+                                    clusterId,
+                                    instanceId,
+                                    clusterMonitorPartitionContext.getNetworkPartitionId(),
+                                    isPrimary,
+                                    minimumCountOfNetworkPartition);
+            if (null != memberContexts) {
+                for (MemberContext memberContext : memberContexts) {
+                    if (null != memberContext) {
+                        clusterMonitorPartitionContext.addPendingMember(memberContext);
+                        if (log.isDebugEnabled()) {
+                            log.debug(String.format("Pending member added, [member] %s [partition] %s", memberContext.getMemberId(),
+                                    memberContext.getPartition().getId()));
+                        }
+                    } 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) {
+            String message = "Cannot spawn an instance";
+            log.error(message, e);
+            throw new RuntimeException(message, e);
+        }
+    }
+    
     public void delegateSpawn(ClusterLevelPartitionContext clusterMonitorPartitionContext, String clusterId, String instanceId, boolean isPrimary) {
 
         try {
@@ -377,28 +428,28 @@ public class RuleTasksDelegator {
             String kubernetesClusterId = kubernetesClusterContext.getKubernetesClusterID();
             String clusterId = kubernetesClusterContext.getClusterId();
             CloudControllerClient ccClient = CloudControllerClient.getInstance();
-            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");
-                }
-            }
+//            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 (Exception e) {
             log.error("Cannot create containers ", e);
         }