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/10/08 18:53:10 UTC

[16/27] git commit: Few improvements; checking Pod creation & wait till pods getting created, terminate Pods forcefully to make sure Pods are not running.

Few improvements; checking Pod creation & wait till pods getting created, terminate Pods forcefully to make sure Pods are not running.


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

Branch: refs/heads/container-autoscaling
Commit: 30e08c8319183bafbc5365d3a026e159a541dc46
Parents: c84ffe6
Author: Nirmal Fernando <ni...@gmail.com>
Authored: Wed Oct 8 22:21:05 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Wed Oct 8 22:21:30 2014 +0530

----------------------------------------------------------------------
 .../impl/CloudControllerServiceImpl.java        | 50 ++++++++++++++++----
 1 file changed, 42 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/30e08c83/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
index 4042140..da96ab0 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
@@ -1372,7 +1372,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
         }
 
         try {
-            validateProperty(StratosConstants.KUBERNETES_MIN_REPLICAS, ctxt);
+            String minReplicas = validateProperty(StratosConstants.KUBERNETES_MIN_REPLICAS, ctxt);
             String kubernetesClusterId = validateProperty(StratosConstants.KUBERNETES_CLUSTER_ID, ctxt);
             String kubernetesMasterIp = validateProperty(StratosConstants.KUBERNETES_MASTER_IP, containerClusterContext);
             String kubernetesPortRange = validateProperty(StratosConstants.KUBERNETES_PORT_RANGE, containerClusterContext);
@@ -1408,19 +1408,30 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 			
 			kubApi.createService(service);
 			
+			// set host port
+			ctxt.addProperty(StratosConstants.ALLOCATED_SERVICE_HOST_PORT, service.getPort());
+			
 			if (log.isDebugEnabled()) {
 				log.debug("Cloud Controller successfully started the service "
 						+ controller + " via Kubernetes layer.");
 			}
 			
-			// needs to wait few seconds before running label queries
-			Thread.sleep(3000);
-			
 			// create a label query
 			Label l = new Label();
 			l.setName(clusterId);
 			// execute the label query
-			Pod[] newlyCreatedPods = kubApi.getSelectedPods(new Label[]{l});
+			Pod[] newlyCreatedPods = new Pod[0];
+			int expectedCount = Integer.parseInt(minReplicas);
+			
+			for (int i = 0; i < expectedCount ; i++) {
+			    newlyCreatedPods = kubApi.getSelectedPods(new Label[]{l});
+			    
+			    log.info("Pods "+newlyCreatedPods.length);
+			    if(newlyCreatedPods.length == expectedCount) {
+			        break;
+			    }
+			    Thread.sleep(5000);
+            }
 			
 			if (log.isDebugEnabled()) {
 			    
@@ -1436,10 +1447,10 @@ public class CloudControllerServiceImpl implements CloudControllerService {
                 context.setCartridgeType(cartridgeType);
                 context.setClusterId(clusterId);
                 
-                context.setProperties(CloudControllerUtil.addProperty(containerClusterContext
+                context.setProperties(CloudControllerUtil.addProperty(context
                         .getProperties(), StratosConstants.ALLOCATED_SERVICE_HOST_PORT,
-                        CloudControllerUtil.getProperty(ctxt.getProperties(),
-                                StratosConstants.ALLOCATED_SERVICE_HOST_PORT)));
+                        String.valueOf(service.getPort())));
+                
                 dataHolder.addMemberContext(context);
                 
                 // trigger topology
@@ -1565,6 +1576,29 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 			// we're not going to throw this error, but proceed with other deletions
 			log.error("Failed to update Kubernetes Controller with id: "+clusterId, e);
 		}
+		
+		// delete pods forcefully
+        try {
+            // create a label query
+            Label l = new Label();
+            l.setName(clusterId);
+            // execute the label query
+            Pod[] pods = kubApi.getSelectedPods(new Label[]{l});
+            
+            for (Pod pod : pods) {
+                try {
+                    // delete pods forcefully
+                    kubApi.deletePod(pod.getId());
+                } catch (KubernetesClientException ignore) {
+                    // we can't do nothing here
+                    log.warn(String.format("Failed to delete Pod [%s] forcefully!", pod.getId()));
+                }
+            }
+        } catch (KubernetesClientException e) {
+            // we're not going to throw this error, but proceed with other deletions
+            log.error("Failed to delete pods forcefully for cluster: "+clusterId, e);
+        }
+		
 		// delete the replication controller.
 		try {
 			kubApi.deleteReplicationController(clusterId);