You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by ra...@apache.org on 2014/10/10 13:45:27 UTC

[08/14] git commit: reading hostname from container for memberId

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 <rr...@gmail.com>
Authored: Thu Oct 9 17:11:53 2014 +0530
Committer: R-Rajkumar <rr...@gmail.com>
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;
 	}