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/10 06:19:46 UTC
[2/4] git commit: Implement terminateContainer API passing a member
ID.
Implement terminateContainer API passing a member ID.
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/4943624b
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/4943624b
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/4943624b
Branch: refs/heads/container-autoscaling
Commit: 4943624b8f83af88a3ddbdce65d5193dbdd87c70
Parents: e5bc1e2
Author: Nirmal Fernando <ni...@gmail.com>
Authored: Fri Oct 10 09:48:19 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Fri Oct 10 09:48:19 2014 +0530
----------------------------------------------------------------------
.../exception/InvalidIaasProviderException.java | 2 -
.../impl/CloudControllerServiceImpl.java | 51 ++++++++++++++++++++
.../interfaces/CloudControllerService.java | 8 +++
3 files changed, 59 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/4943624b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidIaasProviderException.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidIaasProviderException.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidIaasProviderException.java
index 6f7994e..77f727e 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidIaasProviderException.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidIaasProviderException.java
@@ -18,8 +18,6 @@
*/
package org.apache.stratos.cloud.controller.exception;
-import org.apache.stratos.cloud.controller.pojo.IaasProvider;
-
/**
* Throws when a {@link IaasProvider} is evaluated to be invalid.
* @author nirmal
http://git-wip-us.apache.org/repos/asf/stratos/blob/4943624b/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 a3fed80..be8702b 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
@@ -1755,5 +1755,56 @@ public class CloudControllerServiceImpl implements CloudControllerService {
}
}
+ @Override
+ public void terminateContainer(String memberId) throws MemberTerminationFailedException {
+
+ handleNullObject(memberId, "Failed to terminate member. Invalid Member id. [Member id] " + memberId);
+
+ MemberContext memberContext = dataHolder.getMemberContextOfMemberId(memberId);
+
+ handleNullObject(memberContext, "Failed to terminate member. Member id not found. [Member id] " + memberId);
+
+ String clusterId = memberContext.getClusterId();
+
+ handleNullObject(clusterId, "Failed to terminate member. Cluster id is null. [Member id] " + memberId);
+
+ ClusterContext ctxt = dataHolder.getClusterContext(clusterId);
+
+ handleNullObject(ctxt,
+ String.format("Failed to terminate member [Member id] %s. Invalid cluster id %s ", memberId, clusterId));
+
+ String kubernetesClusterId = CloudControllerUtil.getProperty(ctxt.getProperties(),
+ StratosConstants.KUBERNETES_CLUSTER_ID);
+
+ handleNullObject(kubernetesClusterId, String.format("Failed to terminate member [Member id] %s. Cannot find '"+
+ StratosConstants.KUBERNETES_CLUSTER_ID+"' in [cluster context] %s ", memberId, ctxt));
+
+ KubernetesClusterContext kubClusterContext = dataHolder.getKubernetesClusterContext(kubernetesClusterId);
+
+ handleNullObject(kubClusterContext, String.format("Failed to terminate member [Member id] %s. Cannot find a matching Kubernetes Cluster in [cluster context] %s ", memberId, ctxt));
+
+ KubernetesApiClient kubApi = kubClusterContext.getKubApi();
+ // delete the Pod
+ try {
+ // member id = pod id
+ kubApi.deletePod(memberId);
+
+ dataHolder.removeMemberContext(memberId, clusterId);
+ // persist
+ persist();
+ } catch (KubernetesClientException e) {
+ String msg = String.format("Failed to terminate member [Member id] %s", memberId);
+ log.error(msg, e);
+ throw new MemberTerminationFailedException(msg, e);
+ }
+ }
+
+ private void handleNullObject(Object obj, String errorMsg) {
+ if (obj == null) {
+ log.error(errorMsg);
+ throw new IllegalArgumentException(errorMsg);
+ }
+ }
+
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/4943624b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/CloudControllerService.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/CloudControllerService.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/CloudControllerService.java
index 7117c1c..398467c 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/CloudControllerService.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/CloudControllerService.java
@@ -25,6 +25,7 @@ import org.apache.stratos.cloud.controller.exception.InvalidClusterException;
import org.apache.stratos.cloud.controller.exception.InvalidIaasProviderException;
import org.apache.stratos.cloud.controller.exception.InvalidMemberException;
import org.apache.stratos.cloud.controller.exception.InvalidPartitionException;
+import org.apache.stratos.cloud.controller.exception.MemberTerminationFailedException;
import org.apache.stratos.cloud.controller.exception.UnregisteredCartridgeException;
import org.apache.stratos.cloud.controller.exception.UnregisteredClusterException;
import org.apache.stratos.cloud.controller.pojo.*;
@@ -137,6 +138,13 @@ public interface CloudControllerService {
void terminateAllContainers(String clusterId) throws InvalidClusterException;
/**
+ * Terminate a given member/Kubernetes Pod.
+ * @param memberId member/Pod id to be terminated.
+ * @throws MemberTerminationFailedException
+ */
+ void terminateContainer(String memberId) throws MemberTerminationFailedException;
+
+ /**
* Update the Kubernetes controller created for the given cluster with the specified number of replicas.
* @param clusterId id of the subjected cluster.
* @param replicas total number of replicas to be set to the controller.