You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by im...@apache.org on 2015/09/23 15:31:11 UTC
stratos git commit: Fixing kubernetes service management methods in
cluster context
Repository: stratos
Updated Branches:
refs/heads/stratos-4.1.x 13bd7dca7 -> cf386347b
Fixing kubernetes service management methods in cluster context
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/cf386347
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/cf386347
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/cf386347
Branch: refs/heads/stratos-4.1.x
Commit: cf386347bda836d2640f8dec6203bdbfcf0c7224
Parents: 13bd7dc
Author: Imesh Gunaratne <im...@apache.org>
Authored: Wed Sep 23 19:00:43 2015 +0530
Committer: Imesh Gunaratne <im...@apache.org>
Committed: Wed Sep 23 19:01:00 2015 +0530
----------------------------------------------------------------------
.../cloud/controller/domain/ClusterContext.java | 47 ++++------
.../iaases/kubernetes/KubernetesIaas.java | 97 +++-----------------
.../messaging/topology/TopologyBuilder.java | 2 +-
3 files changed, 34 insertions(+), 112 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/cf386347/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ClusterContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ClusterContext.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ClusterContext.java
index 9e8b7d2..abfc287 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ClusterContext.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ClusterContext.java
@@ -44,12 +44,12 @@ public class ClusterContext implements Serializable {
// on an unregistration.
private long timeoutInMillis;
private Properties properties;
- private Map<String, Map<String,KubernetesService>> kubernetesServices;
+ private Map<String, Map<String,KubernetesService>> clusterInstanceToKubernetesServicesMap;
public ClusterContext(String applicationId, String cartridgeType, String clusterId, String payload, String hostName,
boolean isLbCluster, Properties properties) {
- this.kubernetesServices = new HashMap<>();
+ this.clusterInstanceToKubernetesServicesMap = new HashMap<>();
this.applicationId = applicationId;
this.cartridgeType = cartridgeType;
this.clusterId = clusterId;
@@ -116,38 +116,27 @@ public class ClusterContext implements Serializable {
}
public Collection<KubernetesService> getKubernetesServices(String clusterInstanceId) {
- Collection<KubernetesService> arrayKubernetesList = new ArrayList<>();
- if (kubernetesServices.get(clusterInstanceId) != null) {
- arrayKubernetesList = kubernetesServices.get(clusterInstanceId).values();
+ Map<String, KubernetesService> kubernetesServicesMap =
+ clusterInstanceToKubernetesServicesMap.get(clusterInstanceId);
+ if (kubernetesServicesMap != null) {
+ return kubernetesServicesMap.values();
}
- return arrayKubernetesList;
- }
-
- public Collection<KubernetesService> getAllKubernetesServicesForCluster() {
-
- Collection<KubernetesService> allServices = new ArrayList<>();
-
- Iterator<Map.Entry<String, Map<String, KubernetesService>>> kubServicesPerInsatnceEntry = kubernetesServices.entrySet().iterator();
- while (kubServicesPerInsatnceEntry.hasNext()) {
- Map.Entry<String, Map<String, KubernetesService>> kubServicePerClusterInstance = kubServicesPerInsatnceEntry.next();
- Iterator<Map.Entry<String, KubernetesService>> kubServiceEntry = kubServicePerClusterInstance.getValue().entrySet().iterator();
- while (kubServiceEntry.hasNext()) {
- allServices.add(kubServiceEntry.next().getValue());
- }
-
- }
- return allServices;
-
+ return new ArrayList<KubernetesService>();
}
public void addKubernetesService(String clusterInstanceId,KubernetesService kubernetesService) {
- HashMap<String, KubernetesService> kubernetesServiceHashMap = new HashMap<>();
- kubernetesServiceHashMap.put(kubernetesService.getId(), kubernetesService);
- this.kubernetesServices.put(clusterInstanceId, kubernetesServiceHashMap);
+ Map<String, KubernetesService> kubernetesServicesMap = clusterInstanceToKubernetesServicesMap.get(clusterInstanceId);
+ if(kubernetesServicesMap == null) {
+ kubernetesServicesMap = new HashMap<>();
+ this.clusterInstanceToKubernetesServicesMap.put(clusterInstanceId, kubernetesServicesMap);
+ }
+ kubernetesServicesMap.put(kubernetesService.getId(), kubernetesService);
}
- public void removeKubernetesService(String serviceName) {
- kubernetesServices.remove(serviceName);
+ public void removeKubernetesService(String clusterInstanceId, String serviceName) {
+ Map<String, KubernetesService> kubernetesServicesMap = clusterInstanceToKubernetesServicesMap.get(clusterInstanceId);
+ if(kubernetesServicesMap != null) {
+ kubernetesServicesMap.remove(serviceName);
+ }
}
-
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/cf386347/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaas.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaas.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaas.java
index 5a32c70..884e681 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaas.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaas.java
@@ -519,7 +519,8 @@ public class KubernetesIaas extends Iaas {
if (clusterPortMappings != null) {
String serviceName = DigestUtils.md5Hex(clusterId);
- Collection<KubernetesService> kubernetesServices = clusterContext.getKubernetesServices(memberContext.getClusterInstanceId());
+ Collection<KubernetesService> kubernetesServices =
+ clusterContext.getKubernetesServices(memberContext.getClusterInstanceId());
for (ClusterPortMapping clusterPortMapping : clusterPortMappings) {
// Skip if already created
@@ -698,14 +699,18 @@ public class KubernetesIaas extends Iaas {
/**
* Find a kubernetes service by container port
*
- * @param services
+ * @param kubernetesServices
* @param containerPort
* @return
*/
- private KubernetesService findKubernetesService(Collection<KubernetesService> services, int containerPort) {
- for (KubernetesService service : services) {
- if (service.getContainerPort() == containerPort) {
- return service;
+ private KubernetesService findKubernetesService(Collection<KubernetesService> kubernetesServices,
+ int containerPort) {
+
+ if(kubernetesServices != null) {
+ for (KubernetesService kubernetesService : kubernetesServices) {
+ if (kubernetesService.getContainerPort() == containerPort) {
+ return kubernetesService;
+ }
}
}
return null;
@@ -839,79 +844,6 @@ public class KubernetesIaas extends Iaas {
}
/**
- * Terminate all the containers belong to a cluster by cluster id.
- *
- * @param clusterId
- * @return
- * @throws InvalidClusterException
- */
- public MemberContext[] terminateContainers(String clusterId)
- throws InvalidClusterException {
- Lock lock = null;
- try {
- lock = CloudControllerContext.getInstance().acquireMemberContextWriteLock();
-
- ClusterContext clusterContext = CloudControllerContext.getInstance().getClusterContext(clusterId);
- handleNullObject(clusterContext, "Could not terminate containers, cluster not found: [cluster-id] "
- + clusterId);
-
- // Remove kubernetes services
- List<KubernetesService> kubernetesServices = Lists.newArrayList(clusterContext.getAllKubernetesServicesForCluster());
- if (kubernetesServices != null) {
- for (KubernetesService kubernetesService : kubernetesServices) {
- try {
- String kubernetesClusterId = kubernetesService.getKubernetesClusterId();
- handleNullObject(kubernetesClusterId,
- "Could not terminate containers, kubernetes cluster id not found: " +
- "[cluster-id] " + clusterId);
- KubernetesClusterContext kubClusterContext = CloudControllerContext.getInstance().
- getKubernetesClusterContext(kubernetesClusterId);
- handleNullObject(kubClusterContext,
- "Could not terminate containers, kubernetes cluster not found: " +
- "[kubernetes-cluster-id] " + kubernetesClusterId);
-
- KubernetesApiClient kubApi = kubClusterContext.getKubApi();
-
- String serviceId = kubernetesService.getId();
- kubApi.deleteService(serviceId);
-
- kubClusterContext.deallocatePort(kubernetesService.getPort());
- clusterContext.removeKubernetesService(serviceId);
- }
- catch (KubernetesClientException e) {
- log.error("Could not remove kubernetes service: [cluster-id] " + clusterId, e);
- }
- }
- }
-
- List<MemberContext> memberContextsRemoved = new ArrayList<MemberContext>();
- List<MemberContext> memberContexts =
- CloudControllerContext.getInstance().getMemberContextsOfClusterId(clusterId);
- if (memberContexts != null) {
- for (MemberContext memberContext : memberContexts) {
- try {
- MemberContext memberContextRemoved = terminateContainer(memberContext);
- memberContextsRemoved.add(memberContextRemoved);
- }
- catch (MemberTerminationFailedException e) {
- String message = "Could not terminate container: [member-id] " + memberContext.getMemberId();
- log.error(message);
- }
- }
- }
-
- // Persist changes
- CloudControllerContext.getInstance().persist();
- return memberContextsRemoved.toArray(new MemberContext[memberContextsRemoved.size()]);
- }
- finally {
- if (lock != null) {
- CloudControllerContext.getInstance().releaseWriteLock(lock);
- }
- }
- }
-
- /**
* Terminate a container by member id
*
* @param memberContext
@@ -1071,12 +1003,13 @@ public class KubernetesIaas extends Iaas {
* Remove kubernetes services if available for application cluster.
*
* @param clusterContext
+ * @param clusterInstanceId
*/
- public static void removeKubernetesServices(ClusterContext clusterContext) {
+ public static void removeKubernetesServices(ClusterContext clusterContext, String clusterInstanceId) {
if (clusterContext != null) {
ArrayList<KubernetesService> kubernetesServices =
- Lists.newArrayList(clusterContext.getAllKubernetesServicesForCluster());
+ Lists.newArrayList(clusterContext.getKubernetesServices(clusterInstanceId));
for (KubernetesService kubernetesService : kubernetesServices) {
KubernetesClusterContext kubernetesClusterContext =
@@ -1090,7 +1023,7 @@ public class KubernetesIaas extends Iaas {
try {
kubernetesApiClient.deleteService(serviceId);
kubernetesClusterContext.deallocatePort(kubernetesService.getPort());
- clusterContext.removeKubernetesService(serviceId);
+ clusterContext.removeKubernetesService(clusterInstanceId, serviceId);
}
catch (KubernetesClientException e) {
log.error(String.format("Could not delete kubernetes service: [application-id] %s " +
http://git-wip-us.apache.org/repos/asf/stratos/blob/cf386347/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyBuilder.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyBuilder.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyBuilder.java
index e94bb52..0131f3e 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyBuilder.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyBuilder.java
@@ -1065,7 +1065,7 @@ public class TopologyBuilder {
ClusterContext clusterContext =
CloudControllerContext.getInstance().getClusterContext(event.getClusterId());
- KubernetesIaas.removeKubernetesServices(clusterContext);
+ KubernetesIaas.removeKubernetesServices(clusterContext, context.getInstanceId());
} else {
log.error(String.format("Cluster state transition is not valid: [cluster-id] %s " +