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();
             }
 

Reply via email to