reading hostname from container for memberId

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

Branch: refs/heads/container-autoscaling
Commit: 3a1e2f1c489b703425f5ba5f69f91df1c02feb16
Parents: b59b4c0
Author: R-Rajkumar <[email protected]>
Authored: Thu Oct 9 17:11:53 2014 +0530
Committer: R-Rajkumar <[email protected]>
Committed: Thu Oct 9 17:11:53 2014 +0530

----------------------------------------------------------------------
 .../autoscaler/KubernetesClusterContext.java    | 18 +++-----
 .../KubernetesServiceClusterMonitor.java        | 48 ++++----------------
 .../autoscaler/rule/RuleTasksDelegator.java     | 29 +++++++++++-
 .../config/CartridgeAgentConfiguration.java     | 24 ++++++++--
 4 files changed, 62 insertions(+), 57 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/3a1e2f1c/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/KubernetesClusterContext.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/KubernetesClusterContext.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/KubernetesClusterContext.java
index 99ae4bc..b75c0cc 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/KubernetesClusterContext.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/KubernetesClusterContext.java
@@ -30,8 +30,6 @@ import java.util.concurrent.ConcurrentHashMap;
 import org.apache.commons.configuration.XMLConfiguration;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import 
org.apache.stratos.autoscaler.client.cloud.controller.CloudControllerClient;
-import org.apache.stratos.autoscaler.exception.TerminationException;
 import org.apache.stratos.autoscaler.policy.model.LoadAverage;
 import org.apache.stratos.autoscaler.policy.model.MemoryConsumption;
 import org.apache.stratos.autoscaler.policy.model.RequestsInFlight;
@@ -320,19 +318,13 @@ public class KubernetesClusterContext implements 
Serializable {
                         long pendingTime = System.currentTimeMillis()
                                            - pendingMember.getInitTime();
                         if (pendingTime >= expiryTime) {
-
-                            // terminate all containers of this cluster
-                            try {
-                                
CloudControllerClient.getInstance().terminateAllContainers(clusterId);
-                                iterator.remove();
-                            } catch (TerminationException e) {
-                                log.error(e.getMessage(), e);
-                            }
-
+                               iterator.remove();
+                               log.info("Pending state of member: " + 
pendingMember.getMemberId() +
+                                    " is expired. " + "Adding as an obsoleted 
member.");
+                               ctxt.addObsoleteMember(pendingMember);
                         }
                     }
                 }
-
                 try {
                     // TODO find a constant
                     Thread.sleep(15000);
@@ -367,6 +359,8 @@ public class KubernetesClusterContext implements 
Serializable {
                     long obsoleteTime = System.currentTimeMillis() - 
obsoleteMember.getInitTime();
                     if (obsoleteTime >= obsoltedMemberExpiryTime) {
                         iterator.remove();
+                        log.info("Obsolete state of member: " + 
obsoleteMember.getMemberId() +
+                                " is expired. " + "Removing from obsolete 
member list");
                     }
                 }
                 try {

http://git-wip-us.apache.org/repos/asf/stratos/blob/3a1e2f1c/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/KubernetesServiceClusterMonitor.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/KubernetesServiceClusterMonitor.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/KubernetesServiceClusterMonitor.java
index d0d7668..068f21e 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/KubernetesServiceClusterMonitor.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/KubernetesServiceClusterMonitor.java
@@ -18,8 +18,6 @@
  */
 package org.apache.stratos.autoscaler.monitor;
 
-import java.util.Properties;
-
 import org.apache.commons.configuration.XMLConfiguration;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -32,10 +30,7 @@ import 
org.apache.stratos.autoscaler.util.AutoScalerConstants;
 import org.apache.stratos.autoscaler.util.ConfUtil;
 import org.apache.stratos.cloud.controller.stub.pojo.MemberContext;
 import org.apache.stratos.common.constants.StratosConstants;
-import org.apache.stratos.messaging.domain.topology.Cluster;
 import org.apache.stratos.messaging.domain.topology.ClusterStatus;
-import org.apache.stratos.messaging.domain.topology.Service;
-import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
 
 /*
  * It is monitoring a kubernetes service cluster periodically.
@@ -45,8 +40,6 @@ public final class KubernetesServiceClusterMonitor extends 
KubernetesClusterMoni
     private static final Log log = 
LogFactory.getLog(KubernetesServiceClusterMonitor.class);
 
     private String lbReferenceType;
-    private int numberOfReplicasInServiceCluster = 0;
-    int retryInterval = 60000;
 
     public KubernetesServiceClusterMonitor(KubernetesClusterContext 
kubernetesClusterCtxt,
                                            String serviceClusterID, String 
serviceId,
@@ -83,33 +76,14 @@ public final class KubernetesServiceClusterMonitor extends 
KubernetesClusterMoni
     @Override
     protected void monitor() {
 
-        int minReplicas;
-        try {
-            TopologyManager.acquireReadLock();
-            Service service = 
TopologyManager.getTopology().getService(getServiceId());
-            Cluster cluster = service.getCluster(getClusterId());
-            Properties props = cluster.getProperties();
-            minReplicas = 
Integer.parseInt(props.getProperty(StratosConstants.KUBERNETES_MIN_REPLICAS));
-        } finally {
-            TopologyManager.releaseReadLock();
-        }
-
         String kubernetesClusterId = 
getKubernetesClusterCtxt().getKubernetesClusterID();
         int activeMembers = 
getKubernetesClusterCtxt().getActiveMembers().size();
         int pendingMembers = 
getKubernetesClusterCtxt().getPendingMembers().size();
-        int nonTerminatedMembers = activeMembers + pendingMembers;
+        int nonTerminatedMembers = 
getKubernetesClusterCtxt().getNonTerminatedMemberCount();
         log.info(KubernetesServiceClusterMonitor.class.getName()+" is 
running.... Active Members: "+activeMembers
                 + " Pending Members: "+pendingMembers);
-
-        if (nonTerminatedMembers > 0 && nonTerminatedMembers < minReplicas) {
-            // update
-            int requiredReplicas = minReplicas - nonTerminatedMembers;
-            log.info("Required replicas : "+requiredReplicas);
-
-        } else if (nonTerminatedMembers >= minReplicas) {
-            // TODO autoscale
-            log.info("Current member count : "+nonTerminatedMembers);
-        } else {
+        
+        if (nonTerminatedMembers == 0) {
             try {
                 CloudControllerClient ccClient = 
CloudControllerClient.getInstance();
                 MemberContext[] memberContexts = 
ccClient.createContainers(kubernetesClusterId,
@@ -132,24 +106,20 @@ public final class KubernetesServiceClusterMonitor 
extends KubernetesClusterMoni
             } catch (SpawningException spawningException) {
                 if (log.isDebugEnabled()) {
                     String message = "Cannot create containers, will retry in "
-                            + (retryInterval / 1000) + "s";
+                            + (getMonitorIntervalMilliseconds() / 1000) + "s";
                     log.debug(message, spawningException);
                 }
             } catch (Exception exception) {
                 if (log.isDebugEnabled()) {
                     String message = "Error while creating containers, will 
retry in "
-                            + (retryInterval / 1000) + "s";
+                            + (getMonitorIntervalMilliseconds() / 1000) + "s";
                     log.debug(message, exception);
                 }
             }
-            try {
-                Thread.sleep(retryInterval);
-            } catch (InterruptedException ignored) {
-            }
-        }
-        
-        minCheck();
-        scaleCheck();
+               } else {
+               minCheck();
+               scaleCheck();
+               }
     }
 
     private void scaleCheck() {

http://git-wip-us.apache.org/repos/asf/stratos/blob/3a1e2f1c/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 246dcc2..b062913 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
@@ -24,6 +24,7 @@ package org.apache.stratos.autoscaler.rule;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.autoscaler.Constants;
+import org.apache.stratos.autoscaler.KubernetesClusterContext;
 import org.apache.stratos.autoscaler.NetworkPartitionLbHolder;
 import org.apache.stratos.autoscaler.PartitionContext;
 import org.apache.stratos.autoscaler.algorithm.AutoscaleAlgorithm;
@@ -198,12 +199,38 @@ public class RuleTasksDelegator {
                log.error("Cannot terminate instance", e);
            }
        }
+       
+       public void delegateCreateContainers(KubernetesClusterContext  
kubernetesClusterContext) {
+        try {
+            CloudControllerClient ccClient = 
CloudControllerClient.getInstance();
+            String kubernetesClusterId = 
kubernetesClusterContext.getKubernetesClusterID();
+                       String clusterId = 
kubernetesClusterContext.getClusterId();
+                       MemberContext[] memberContexts = 
ccClient.createContainers(kubernetesClusterId, clusterId);
+            for (MemberContext memberContext : memberContexts) {
+
+                if (null != memberContext) {
+                       
kubernetesClusterContext.addPendingMember(memberContext);
+                    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 to pending members");
+                    }
+                }
+            }
+        } catch (Exception e) {
+            log.error("Cannot create containers ", e);
+        }
+       }
 
     public void delegateExpandCluster(String clusterId, int replicas) {
         try {
             
CloudControllerClient.getInstance().updateKubernetesController(clusterId, 
replicas);
         } catch (Throwable e) {
-            log.error("Cannot update kubernetes controller", e);
+            log.error("Cannot update kubernetes controller ", e);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/3a1e2f1c/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/config/CartridgeAgentConfiguration.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/config/CartridgeAgentConfiguration.java
 
b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/config/CartridgeAgentConfiguration.java
index 970ba1a..febbcd3 100644
--- 
a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/config/CartridgeAgentConfiguration.java
+++ 
b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/config/CartridgeAgentConfiguration.java
@@ -28,6 +28,8 @@ import 
org.apache.stratos.cartridge.agent.util.CartridgeAgentConstants;
 import org.apache.stratos.cartridge.agent.util.CartridgeAgentUtils;
 
 import java.io.File;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
 import java.util.*;
 
 /**
@@ -81,7 +83,7 @@ public class CartridgeAgentConfiguration {
             clusterId = readParameterValue(CartridgeAgentConstants.CLUSTER_ID);
             networkPartitionId = 
readParameterValue(CartridgeAgentConstants.NETWORK_PARTITION_ID);
             partitionId = 
readParameterValue(CartridgeAgentConstants.PARTITION_ID);
-            memberId = 
readOrGenerateMemberIdValue(CartridgeAgentConstants.MEMBER_ID,clusterId);
+            memberId = readMemberIdValue(CartridgeAgentConstants.MEMBER_ID);
             cartridgeKey = 
readParameterValue(CartridgeAgentConstants.CARTRIDGE_KEY);
             appPath = readParameterValue(CartridgeAgentConstants.APP_PATH);
             repoUrl = readParameterValue(CartridgeAgentConstants.REPO_URL);
@@ -144,15 +146,27 @@ public class CartridgeAgentConfiguration {
                return kubernetesClusterIdValue;
        }
 
-       private String readOrGenerateMemberIdValue(String memberId, String 
clusterId) {
+       private String readMemberIdValue(String memberId) {
                String memberIdValue = null;
                if (parameters.containsKey(memberId) && 
parameters.get(memberId) != null) {
                        memberIdValue = parameters.get(memberId);
                } else if (System.getProperty(memberId) != null) {
                        memberIdValue = System.getProperty(memberId);
-               } else {                        
-                       memberIdValue = clusterId + 
UUID.randomUUID().toString();
-                       log.debug(" MemberId generated as ["+memberIdValue+"] 
");
+               } else {        
+                       String hostname = "unknown";
+                       try {
+                               log.info("Reading hostname from container");
+                               InetAddress addr;
+                               addr = InetAddress.getLocalHost();
+                               hostname = addr.getHostName();
+                       } catch (UnknownHostException e) {
+                               String msg = "Hostname can not be resolved";
+                               log.error(msg, e);
+                       }
+                       memberIdValue = hostname;
+                       if (log.isDebugEnabled()) {
+                               log.debug("MemberId  is taking the value of 
hostname : [" + memberIdValue + "] ");
+                       }
                }
                return memberIdValue;
        }

Reply via email to