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/11 06:13:24 UTC

[38/50] [abbrv] git commit: Return terminated members when scaling down and also send member terminated event.

Return terminated members when scaling down and also send member terminated event.


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

Branch: refs/heads/master
Commit: b0fd7b61e518aadfdfb8548ebca1527920104fe6
Parents: 6cc484f
Author: Nirmal Fernando <ni...@gmail.com>
Authored: Sat Oct 11 07:50:29 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:58 2014 +0530

----------------------------------------------------------------------
 .../impl/CloudControllerServiceImpl.java        | 27 +++++++++++++++++---
 .../runtime/FasterLookUpDataHolder.java         |  1 +
 2 files changed, 25 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/b0fd7b61/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 a9a72cb..6717f74 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
@@ -21,7 +21,9 @@ package org.apache.stratos.cloud.controller.impl;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.net.InetAddresses;
 
+import org.apache.commons.collections.ListUtils;
 import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.cloud.controller.concurrent.PartitionValidatorCallable;
@@ -1674,6 +1676,12 @@ public class CloudControllerServiceImpl implements CloudControllerService {
             }
             
             KubernetesApiClient kubApi = kubClusterContext.getKubApi();
+            // create a label query
+            Label l = new Label();
+            l.setName(clusterId);
+            
+            // get the current pods - useful when scale down
+            Pod[] previousStatePods = kubApi.getSelectedPods(new Label[]{l});
             
             // update the replication controller - cluster id = replication controller id
             if (LOG.isDebugEnabled()) {
@@ -1688,9 +1696,6 @@ public class CloudControllerServiceImpl implements CloudControllerService {
                         + clusterId + " via Kubernetes layer.");
             }
             
-            // create a label query
-            Label l = new Label();
-            l.setName(clusterId);
             // execute the label query
             Pod[] allPods = new Pod[0];
             
@@ -1719,6 +1724,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
             // generate Member Contexts
             for (Pod pod : allPods) {
                 MemberContext context;
+                // if member context does not exist -> a new member (scale up)
                 if ((context = dataHolder.getMemberContextOfMemberId(pod.getId())) == null) {
                     
                     context = podToMemberContextFunc.apply(pod);
@@ -1737,6 +1743,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
                     dataHolder.addScheduledFutureJob(context.getMemberId(), exec.schedule(new PodActivationWatcher(pod.getId(), context, kubApi), 5000));
                     
                     memberContexts.add(context);
+                    
                 }
                 // publish data
                 // TODO
@@ -1744,6 +1751,20 @@ public class CloudControllerServiceImpl implements CloudControllerService {
                 
             }
             
+            if (memberContexts.isEmpty()) {
+                // terminated members
+                @SuppressWarnings("unchecked")
+                List<Pod> difference = ListUtils.subtract(Arrays.asList(previousStatePods), Arrays.asList(allPods));
+                for (Pod pod : difference) {
+                    if (pod != null) {
+                        MemberContext context = dataHolder.getMemberContextOfMemberId(pod.getId());
+                        logTermination(context);
+                        memberContexts.add(context);
+                    }
+                }
+            }
+            
+            
             // persist in registry
             persist();
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/b0fd7b61/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/runtime/FasterLookUpDataHolder.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/runtime/FasterLookUpDataHolder.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/runtime/FasterLookUpDataHolder.java
index 2a83908..199f9c8 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/runtime/FasterLookUpDataHolder.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/runtime/FasterLookUpDataHolder.java
@@ -338,6 +338,7 @@ public class FasterLookUpDataHolder implements Serializable{
         if (task != null) {
             
             task.cancel(true);
+            log.info("Scheduled Pod Activation Watcher task canceled.");
         }
     }