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 <[email protected]> Authored: Fri Dec 5 08:09:55 2014 +0530 Committer: Nirmal Fernando <[email protected]> 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); }
