Introducing new logic to generate kubernetes pod id and store it in kubernetes cluster context
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/210b825f Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/210b825f Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/210b825f Branch: refs/heads/master Commit: 210b825fe5ec887de14849e82dd4292bdb41faed Parents: ae7b94c Author: Imesh Gunaratne <[email protected]> Authored: Sun Mar 15 14:58:33 2015 +0530 Committer: Imesh Gunaratne <[email protected]> Committed: Sun Mar 15 14:58:33 2015 +0530 ---------------------------------------------------------------------- .../context/CloudControllerContext.java | 9 - .../kubernetes/KubernetesClusterContext.java | 24 +- .../iaases/kubernetes/KubernetesIaas.java | 32 +- .../main/resources/CloudControllerService.wsdl | 2514 +++++++++--------- 4 files changed, 1288 insertions(+), 1291 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/210b825f/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/CloudControllerContext.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/CloudControllerContext.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/CloudControllerContext.java index ac3997d..8543810 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/CloudControllerContext.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/CloudControllerContext.java @@ -168,7 +168,6 @@ public class CloudControllerContext implements Serializable { private transient AsyncDataPublisher dataPublisher; private boolean coordinator; - private int kubernetesServiceSeqNo; private CloudControllerContext() { // Check clustering status @@ -730,12 +729,4 @@ public class CloudControllerContext implements Serializable { destinationList.add(item); } } - - public int getKubernetesServiceSeqNo() { - return kubernetesServiceSeqNo; - } - - public void setKubernetesServiceSeqNo(int kubernetesServiceSeqNo) { - this.kubernetesServiceSeqNo = kubernetesServiceSeqNo; - } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/stratos/blob/210b825f/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/kubernetes/KubernetesClusterContext.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/kubernetes/KubernetesClusterContext.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/kubernetes/KubernetesClusterContext.java index 0132475..2a8bc23 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/kubernetes/KubernetesClusterContext.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/kubernetes/KubernetesClusterContext.java @@ -18,14 +18,15 @@ */ package org.apache.stratos.cloud.controller.domain.kubernetes; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.stratos.kubernetes.client.KubernetesApiClient; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.atomic.AtomicLong; + /** * Holds information about a Kubernetes Cluster. * @@ -47,7 +48,9 @@ public class KubernetesClusterContext implements Serializable { private List<Integer> servicePorts; // kubernetes client API instance private transient KubernetesApiClient kubApi; - + private AtomicLong serviceSeqNo; + private AtomicLong podSeqNo; + public KubernetesClusterContext(String id, String masterIp, String masterPort, int lowerPort, int upperPort) { servicePorts = new ArrayList<Integer>(); this.lowerPort = lowerPort; @@ -58,6 +61,8 @@ public class KubernetesClusterContext implements Serializable { this.masterIp = masterIp; this.masterPort = masterPort; this.setKubApi(new KubernetesApiClient(getEndpoint(masterIp, masterPort))); + this.serviceSeqNo = new AtomicLong(); + this.podSeqNo = new AtomicLong(); } @@ -136,6 +141,14 @@ public class KubernetesClusterContext implements Serializable { this.lowerPort = lowerPort; } + public AtomicLong getServiceSeqNo() { + return serviceSeqNo; + } + + public AtomicLong getPodSeqNo() { + return podSeqNo; + } + @Override public int hashCode() { final int prime = 31; @@ -184,5 +197,4 @@ public class KubernetesClusterContext implements Serializable { return false; return true; } - } http://git-wip-us.apache.org/repos/asf/stratos/blob/210b825f/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaas.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaas.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaas.java index c6064fe..f6ef684 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaas.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaas.java @@ -41,8 +41,8 @@ import org.apache.stratos.kubernetes.client.KubernetesConstants; import org.apache.stratos.kubernetes.client.exceptions.KubernetesClientException; import org.apache.stratos.kubernetes.client.model.EnvironmentVariable; import org.apache.stratos.kubernetes.client.model.Pod; -import org.apache.stratos.kubernetes.client.model.Service; import org.apache.stratos.kubernetes.client.model.Port; +import org.apache.stratos.kubernetes.client.model.Service; import org.apache.stratos.messaging.domain.topology.KubernetesService; import java.util.ArrayList; @@ -202,19 +202,19 @@ public class KubernetesIaas extends Iaas { } } - KubernetesClusterContext kubClusterContext = getKubernetesClusterContext(kubernetesClusterId, + KubernetesClusterContext kubernetesClusterContext = getKubernetesClusterContext(kubernetesClusterId, kubernetesMasterIp, kubernetesMasterPort, kubernetesPortRange.getUpper(), kubernetesPortRange.getLower()); // Generate kubernetes service ports and update port mappings in cartridge - generateKubernetesServicePorts(kubClusterContext, clusterContext.getClusterId(), cartridge); + generateKubernetesServicePorts(kubernetesClusterContext, clusterContext.getClusterId(), cartridge); // Create kubernetes services for port mappings - KubernetesApiClient kubernetesApi = kubClusterContext.getKubApi(); - createKubernetesServices(kubernetesApi, clusterContext, kubernetesCluster); + KubernetesApiClient kubernetesApi = kubernetesClusterContext.getKubApi(); + createKubernetesServices(kubernetesApi, clusterContext, kubernetesCluster, kubernetesClusterContext); // Create pod - createPod(clusterContext, memberContext, kubernetesApi); + createPod(clusterContext, memberContext, kubernetesApi, kubernetesClusterContext); // Wait for pod status to be changed to running Pod pod = waitForPodToBeActivated(memberContext, kubernetesApi); @@ -338,10 +338,11 @@ public class KubernetesIaas extends Iaas { * * @param memberContext * @param kubernetesApi + * @param kubernetesClusterContext * @throws KubernetesClientException */ private void createPod(ClusterContext clusterContext, MemberContext memberContext, - KubernetesApiClient kubernetesApi) + KubernetesApiClient kubernetesApi, KubernetesClusterContext kubernetesClusterContext) throws KubernetesClientException { String applicationId = memberContext.getApplicationId(); @@ -381,7 +382,8 @@ public class KubernetesIaas extends Iaas { memberContext.setDynamicPayload(payload.toArray(new NameValuePair[payload.size()])); // Create pod - String podId = KubernetesIaasUtil.fixSpecialCharacters(memberId); + long podSeqNo = kubernetesClusterContext.getPodSeqNo().incrementAndGet(); + String podId = "pod" + "-" + podSeqNo; String podLabel = KubernetesIaasUtil.fixSpecialCharacters(clusterId); String dockerImage = iaasProvider.getImage(); EnvironmentVariable[] environmentVariables = KubernetesIaasUtil.prepareEnvironmentVariables( @@ -390,9 +392,10 @@ public class KubernetesIaas extends Iaas { List<Port> ports = KubernetesIaasUtil.convertPortMappings(cartridge.getPortMappings()); kubernetesApi.createPod(podId, podLabel, dockerImage, ports, environmentVariables); - // Add pod id to member context and persist + // Add pod id to member context memberContext.setKubernetesPodId(podId); memberContext.setKubernetesPodLabel(podLabel); + // Persist cloud controller context CloudControllerContext.getInstance().persist(); if (log.isInfoEnabled()) { @@ -408,10 +411,12 @@ public class KubernetesIaas extends Iaas { * @param kubernetesApi * @param clusterContext * @param kubernetesCluster + * @param kubernetesClusterContext * @throws KubernetesClientException */ private void createKubernetesServices(KubernetesApiClient kubernetesApi, ClusterContext clusterContext, - KubernetesCluster kubernetesCluster) + KubernetesCluster kubernetesCluster, + KubernetesClusterContext kubernetesClusterContext) throws KubernetesClientException { String clusterId = clusterContext.getClusterId(); @@ -446,7 +451,6 @@ public class KubernetesIaas extends Iaas { log.debug(String.format("Minion public IPs: %s", minionPublicIPs)); } - int kubernetesServiceSeqNo = CloudControllerContext.getInstance().getKubernetesServiceSeqNo(); for (PortMapping portMapping : cartridge.getPortMappings()) { // Skip if already created @@ -455,8 +459,9 @@ public class KubernetesIaas extends Iaas { continue; } - // Service id = cluster id + kubernetes service seq number of cluster - String serviceId = KubernetesIaasUtil.fixSpecialCharacters("service" + "-" + (++kubernetesServiceSeqNo)); + // Find next service sequence no + long serviceSeqNo = kubernetesClusterContext.getServiceSeqNo().incrementAndGet(); + String serviceId = KubernetesIaasUtil.fixSpecialCharacters("service" + "-" + (serviceSeqNo)); String serviceLabel = KubernetesIaasUtil.fixSpecialCharacters(clusterId); if (log.isInfoEnabled()) { @@ -475,7 +480,6 @@ public class KubernetesIaas extends Iaas { minionPublicIPs.toArray(new String[minionPublicIPs.size()])); } finally { // Persist kubernetes service sequence no - CloudControllerContext.getInstance().setKubernetesServiceSeqNo(kubernetesServiceSeqNo); CloudControllerContext.getInstance().persist(); }
