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