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/11 06:12:47 UTC

[01/50] [abbrv] git commit: on start containers method, do a label query and find the Pods being created and creating corresponding MemberContexts.

Repository: stratos
Updated Branches:
  refs/heads/master 869f818ff -> aa06b1a95


on start containers method, do a label query and find the Pods being created and creating corresponding MemberContexts.


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

Branch: refs/heads/master
Commit: bb1daa70a8b72440d8c83ecc5284d9f166c8b969
Parents: b2e614c
Author: Nirmal Fernando <ni...@gmail.com>
Authored: Tue Oct 7 18:15:22 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:54 2014 +0530

----------------------------------------------------------------------
 .../impl/CloudControllerServiceImpl.java        | 166 ++++++++++---------
 1 file changed, 87 insertions(+), 79 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/bb1daa70/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 18269e6..a413882 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
@@ -28,8 +28,9 @@ import org.apache.stratos.cloud.controller.concurrent.PartitionValidatorCallable
 import org.apache.stratos.cloud.controller.concurrent.ThreadExecutor;
 import org.apache.stratos.cloud.controller.deployment.partition.Partition;
 import org.apache.stratos.cloud.controller.exception.*;
-import org.apache.stratos.cloud.controller.functions.MemberContextToKubernetesService;
-import org.apache.stratos.cloud.controller.functions.MemberContextToReplicationController;
+import org.apache.stratos.cloud.controller.functions.ContainerClusterContextToKubernetesService;
+import org.apache.stratos.cloud.controller.functions.ContainerClusterContextToReplicationController;
+import org.apache.stratos.cloud.controller.functions.PodToMemberContext;
 import org.apache.stratos.cloud.controller.interfaces.CloudControllerService;
 import org.apache.stratos.cloud.controller.interfaces.Iaas;
 import org.apache.stratos.cloud.controller.persist.Deserializer;
@@ -45,6 +46,8 @@ import org.apache.stratos.cloud.controller.validate.interfaces.PartitionValidato
 import org.apache.stratos.common.constants.StratosConstants;
 import org.apache.stratos.kubernetes.client.KubernetesApiClient;
 import org.apache.stratos.kubernetes.client.exceptions.KubernetesClientException;
+import org.apache.stratos.kubernetes.client.model.Label;
+import org.apache.stratos.kubernetes.client.model.Pod;
 import org.apache.stratos.kubernetes.client.model.ReplicationController;
 import org.apache.stratos.kubernetes.client.model.Service;
 import org.apache.stratos.messaging.domain.topology.Member;
@@ -1330,33 +1333,32 @@ public class CloudControllerServiceImpl implements CloudControllerService {
     }
 
 	@Override
-	public MemberContext startContainers(MemberContext memberContext)
+	public MemberContext[] startContainers(ContainerClusterContext containerClusterContext)
 			throws UnregisteredCartridgeException {
 		
 		if(log.isDebugEnabled()) {
-    		log.debug("CloudControllerServiceImpl:startContainer");
+    		log.debug("CloudControllerServiceImpl:startContainers");
     	}
 
-        if (memberContext == null) {
-            String msg = "Instance start-up failed. Member is null.";
+        if (containerClusterContext == null) {
+            String msg = "Instance start-up failed. ContainerClusterContext is null.";
             log.error(msg);
             throw new IllegalArgumentException(msg);
         }
 
-        String clusterId = memberContext.getClusterId();
+        String clusterId = containerClusterContext.getClusterId();
         if(log.isDebugEnabled()) {
-        	log.debug("Received an instance spawn request : " + memberContext.toString());
+        	log.debug("Received an instance spawn request : " + containerClusterContext.toString());
         }
 
         ClusterContext ctxt = dataHolder.getClusterContext(clusterId);
 
         if (ctxt == null) {
-            String msg = "Instance start-up failed. Invalid cluster id. " + memberContext.toString();
+            String msg = "Instance start-up failed. Invalid cluster id. " + containerClusterContext.toString();
             log.error(msg);
             throw new IllegalArgumentException(msg);
         }
         
-        
         String cartridgeType = ctxt.getCartridgeType();
 
         Cartridge cartridge = dataHolder.getCartridge(cartridgeType);
@@ -1364,59 +1366,28 @@ public class CloudControllerServiceImpl implements CloudControllerService {
         if (cartridge == null) {
             String msg =
                          "Instance start-up failed. No matching Cartridge found [type] "+cartridgeType +". "+
-                                 memberContext.toString();
+                                 containerClusterContext.toString();
             log.error(msg);
             throw new UnregisteredCartridgeException(msg);
         }
 
-        memberContext.setCartridgeType(cartridgeType);
-
         try {
-            // generating the Unique member ID...
-            String memberID = generateMemberId(clusterId);
-            memberContext.setMemberId(memberID);
-
-			String kubernetesClusterId = CloudControllerUtil.getProperty(ctxt.getProperties(), 
-					StratosConstants.KUBERNETES_CLUSTER_ID);
-			
-			if (kubernetesClusterId == null) {
-				String msg = "Instance start-up failed. Cannot find '"+
-						StratosConstants.KUBERNETES_CLUSTER_ID+"'. " + ctxt;
-				log.error(msg);
-				throw new IllegalArgumentException(msg);
-			}
-			
-			String kubernetesMasterIp = CloudControllerUtil.getProperty(memberContext.getProperties(), 
-					StratosConstants.KUBERNETES_MASTER_IP);
-			
-			if (kubernetesMasterIp == null) {
-				String msg = "Instance start-up failed. Cannot find '"+
-						StratosConstants.KUBERNETES_MASTER_IP+"'. " + memberContext;
-				log.error(msg);
-				throw new IllegalArgumentException(msg);
-			}
-			
-			String kubernetesPortRange = CloudControllerUtil.getProperty(memberContext.getProperties(), 
-					StratosConstants.KUBERNETES_PORT_RANGE);
-			
-			if (kubernetesPortRange == null) {
-				String msg = "Instance start-up failed. Cannot find '"+
-						StratosConstants.KUBERNETES_PORT_RANGE+"'. " + memberContext;
-				log.error(msg);
-				throw new IllegalArgumentException(msg);
-			}
+            validateProperty(StratosConstants.KUBERNETES_MIN_REPLICAS, ctxt);
+            String kubernetesClusterId = validateProperty(StratosConstants.KUBERNETES_CLUSTER_ID, ctxt);
+            String kubernetesMasterIp = validateProperty(StratosConstants.KUBERNETES_MASTER_IP, containerClusterContext);
+            String kubernetesPortRange = validateProperty(StratosConstants.KUBERNETES_PORT_RANGE, containerClusterContext);
 			
 			KubernetesClusterContext kubClusterContext = getKubernetesClusterContext(kubernetesClusterId, kubernetesMasterIp, kubernetesPortRange);
 			
 			KubernetesApiClient kubApi = kubClusterContext.getKubApi();
 			
 			// first let's create a replication controller.
-			MemberContextToReplicationController controllerFunction = new MemberContextToReplicationController();
-			ReplicationController controller = controllerFunction.apply(memberContext);
+			ContainerClusterContextToReplicationController controllerFunction = new ContainerClusterContextToReplicationController();
+			ReplicationController controller = controllerFunction.apply(containerClusterContext);
 			
 			if (log.isDebugEnabled()) {
 				log.debug("Cloud Controller is delegating request to start a replication controller "+controller+
-						" for "+ memberContext + " to Kubernetes layer.");
+						" for "+ containerClusterContext + " to Kubernetes layer.");
 			}
 			
 			kubApi.createReplicationController(controller);
@@ -1427,12 +1398,12 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 			}
 			
 			// secondly let's create a kubernetes service proxy to load balance these containers
-			MemberContextToKubernetesService serviceFunction = new MemberContextToKubernetesService();
-			Service service = serviceFunction.apply(memberContext);
+			ContainerClusterContextToKubernetesService serviceFunction = new ContainerClusterContextToKubernetesService();
+			Service service = serviceFunction.apply(containerClusterContext);
 			
 			if (log.isDebugEnabled()) {
 				log.debug("Cloud Controller is delegating request to start a service "+service+
-						" for "+ memberContext + " to Kubernetes layer.");
+						" for "+ containerClusterContext + " to Kubernetes layer.");
 			}
 			
 			kubApi.createService(service);
@@ -1442,44 +1413,81 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 						+ controller + " via Kubernetes layer.");
 			}
 			
-            memberContext.setPublicIpAddress(kubernetesMasterIp);
-            memberContext.setPrivateIpAddress(kubernetesMasterIp);
-            memberContext.setProperties(CloudControllerUtil.addProperty(memberContext
-                    .getProperties(), StratosConstants.ALLOCATED_SERVICE_HOST_PORT,
-                    CloudControllerUtil.getProperty(ctxt.getProperties(),
-                            StratosConstants.ALLOCATED_SERVICE_HOST_PORT)));
-            dataHolder.addMemberContext(memberContext);
-
+			// create a label query
+			Label l = new Label();
+			l.setName(clusterId);
+			// execute the label query
+			Pod[] newlyCreatedPods = kubApi.getSelectedPods(new Label[]{l});
+			List<MemberContext> memberContexts = new ArrayList<MemberContext>();
+			
+			PodToMemberContext podToMemberContextFunc = new PodToMemberContext();
+			// generate Member Contexts
+			for (Pod pod : newlyCreatedPods) {
+                MemberContext context = podToMemberContextFunc.apply(pod);
+                context.setCartridgeType(cartridgeType);
+                context.setClusterId(clusterId);
+                
+                context.setProperties(CloudControllerUtil.addProperty(containerClusterContext
+                        .getProperties(), StratosConstants.ALLOCATED_SERVICE_HOST_PORT,
+                        CloudControllerUtil.getProperty(ctxt.getProperties(),
+                                StratosConstants.ALLOCATED_SERVICE_HOST_PORT)));
+                dataHolder.addMemberContext(context);
+                
+                // trigger topology
+                // update the topology with the newly spawned member
+                TopologyBuilder.handleMemberSpawned(cartridgeType, clusterId, null,
+                        kubernetesMasterIp, kubernetesMasterIp, context);
+                // publish data
+                // TODO
+//                CartridgeInstanceDataPublisher.publish(context.getMemberId(), null, null, context.getClusterId(), cartridgeType, MemberStatus.Created.toString(), node);
+                
+                memberContexts.add(context);
+            }
+			
 			// persist in registry
 			persist();
 
-			// trigger topology
-			// update the topology with the newly spawned member
-			TopologyBuilder.handleMemberSpawned(cartridgeType, clusterId, null,
-					kubernetesMasterIp, kubernetesMasterIp, memberContext);
-
-			// publish data
-			// TODO
-			// CartridgeInstanceDataPublisher.publish(memberID,
-			// memberContext.getPartition().getId(),
-			// memberContext.getNetworkPartitionId(),
-			// memberContext.getClusterId(),
-			// cartridgeType,
-			// MemberStatus.Created.toString(),
-			// node);
+            log.info("Kubernetes entities are successfully starting up. "+containerClusterContext.toString());
 
-            log.info("Kubernetes entities are successfully starting up. "+memberContext.toString());
-
-            return memberContext;
+            return memberContexts.toArray(new MemberContext[0]);
 
         } catch (Exception e) {
-            String msg = "Failed to start an instance. " + memberContext.toString()+" Cause: "+e.getMessage();
+            String msg = "Failed to start an instance. " + containerClusterContext.toString()+" Cause: "+e.getMessage();
             log.error(msg, e);
             throw new IllegalStateException(msg, e);
         }
 	}
 
-	private KubernetesClusterContext getKubernetesClusterContext(
+	private String validateProperty(String property, ClusterContext ctxt) {
+
+	    String propVal = CloudControllerUtil.getProperty(ctxt.getProperties(), property);
+        
+        if (propVal == null) {
+            String msg = "Instance start-up failed. Cannot find '"+
+                    StratosConstants.KUBERNETES_MIN_REPLICAS+"' in " + ctxt;
+            log.error(msg);
+            throw new IllegalArgumentException(msg);
+        }
+        
+        return propVal;
+    }
+	
+	private String validateProperty(String property, ContainerClusterContext ctxt) {
+
+        String propVal = CloudControllerUtil.getProperty(ctxt.getProperties(), property);
+        
+        if (propVal == null) {
+            String msg = "Instance start-up failed. Cannot find '"+
+                    StratosConstants.KUBERNETES_MIN_REPLICAS+"' in " + ctxt;
+            log.error(msg);
+            throw new IllegalArgumentException(msg);
+        }
+        
+        return propVal;
+        
+    }
+
+    private KubernetesClusterContext getKubernetesClusterContext(
 			String kubernetesClusterId, String kubernetesMasterIp,
 			String kubernetesPortRange) {
 		


[09/50] [abbrv] git commit: Need to wait a bit before executing the label query.

Posted by ni...@apache.org.
Need to wait a bit before executing the label query.


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

Branch: refs/heads/master
Commit: b14a5c075a7d2eda8dc2fbf4fda7570b63da9958
Parents: 08cd01b
Author: Nirmal Fernando <ni...@gmail.com>
Authored: Wed Oct 8 19:05:04 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:55 2014 +0530

----------------------------------------------------------------------
 .../controller/impl/CloudControllerServiceImpl.java      | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/b14a5c07/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 a413882..4042140 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
@@ -1413,11 +1413,20 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 						+ controller + " via Kubernetes layer.");
 			}
 			
+			// needs to wait few seconds before running label queries
+			Thread.sleep(3000);
+			
 			// create a label query
 			Label l = new Label();
 			l.setName(clusterId);
 			// execute the label query
 			Pod[] newlyCreatedPods = kubApi.getSelectedPods(new Label[]{l});
+			
+			if (log.isDebugEnabled()) {
+			    
+			    log.debug(String.format("Pods created : %s for cluster : %s",newlyCreatedPods.length, clusterId));
+			}
+			
 			List<MemberContext> memberContexts = new ArrayList<MemberContext>();
 			
 			PodToMemberContext podToMemberContextFunc = new PodToMemberContext();
@@ -1447,7 +1456,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 			// persist in registry
 			persist();
 
-            log.info("Kubernetes entities are successfully starting up. "+containerClusterContext.toString());
+            log.info("Kubernetes entities are successfully starting up. "+memberContexts);
 
             return memberContexts.toArray(new MemberContext[0]);
 


[24/50] [abbrv] git commit: Initialize member properties.

Posted by ni...@apache.org.
Initialize member properties.


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

Branch: refs/heads/master
Commit: 78497e8d4ad0b99e8d71d08348d8c9bcf16a1c94
Parents: 90c37ec
Author: Nirmal Fernando <ni...@gmail.com>
Authored: Wed Oct 8 22:19:20 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:56 2014 +0530

----------------------------------------------------------------------
 .../apache/stratos/cloud/controller/pojo/MemberContext.java   | 7 +++++++
 1 file changed, 7 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/78497e8d/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/MemberContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/MemberContext.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/MemberContext.java
index ec67b46..72b4914 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/MemberContext.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/MemberContext.java
@@ -60,9 +60,16 @@ public class MemberContext implements Serializable {
         this.memberId = id;
         this.clusterId = clusterId;
         this.setPartition(partition);
+        init();
     }
     
     public MemberContext() {
+        init();
+    }
+    
+    private void init() {
+        this.properties = new Properties();
+        this.properties.setProperties(new Property[0]);
     }
     
     public String getMemberId() {


[31/50] [abbrv] Updating CC wsdl based on the latest API changes.

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/stratos/blob/192228ed/service-stubs/org.apache.stratos.cloud.controller.service.stub/src/main/resources/CloudControllerService.wsdl
----------------------------------------------------------------------
diff --git a/service-stubs/org.apache.stratos.cloud.controller.service.stub/src/main/resources/CloudControllerService.wsdl b/service-stubs/org.apache.stratos.cloud.controller.service.stub/src/main/resources/CloudControllerService.wsdl
index f8de82f..eb8c819 100644
--- a/service-stubs/org.apache.stratos.cloud.controller.service.stub/src/main/resources/CloudControllerService.wsdl
+++ b/service-stubs/org.apache.stratos.cloud.controller.service.stub/src/main/resources/CloudControllerService.wsdl
@@ -3,1176 +3,1196 @@
     <wsdl:types>
         <xs:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://util.java/xsd">
             <xs:complexType name="Properties">
-                <xs:sequence></xs:sequence>
+                <xs:sequence/>
             </xs:complexType>
         </xs:schema>
         <xs:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://exception.controller.cloud.stratos.apache.org/xsd">
             <xs:complexType name="InvalidPartitionException">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="message" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="message" nillable="true" type="xs:string"/>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="InvalidCartridgeTypeException">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="message" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="message" nillable="true" type="xs:string"/>
                 </xs:sequence>
             </xs:complexType>
-            <xs:complexType name="InvalidClusterException">
+            <xs:complexType name="UnregisteredCartridgeException">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="message" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="message" nillable="true" type="xs:string"/>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="UnregisteredClusterException">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="message" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="message" nillable="true" type="xs:string"/>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="InvalidMemberException">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="message" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="message" nillable="true" type="xs:string"/>
                 </xs:sequence>
             </xs:complexType>
-            <xs:complexType name="UnregisteredCartridgeException">
+            <xs:complexType name="InvalidClusterException">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="message" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="message" nillable="true" type="xs:string"/>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="InvalidIaasProviderException">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="message" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="message" nillable="true" type="xs:string"/>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="InvalidCartridgeDefinitionException">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="message" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="message" nillable="true" type="xs:string"/>
                 </xs:sequence>
             </xs:complexType>
         </xs:schema>
         <xs:schema xmlns:ax221="http://exception.controller.cloud.stratos.apache.org/xsd" xmlns:ax227="http://pojo.controller.cloud.stratos.apache.org/xsd" xmlns:ax225="http://partition.deployment.controller.cloud.stratos.apache.org/xsd" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://impl.controller.cloud.stratos.apache.org">
-            <xs:import namespace="http://exception.controller.cloud.stratos.apache.org/xsd"></xs:import>
-            <xs:import namespace="http://partition.deployment.controller.cloud.stratos.apache.org/xsd"></xs:import>
-            <xs:import namespace="http://pojo.controller.cloud.stratos.apache.org/xsd"></xs:import>
+            <xs:import namespace="http://exception.controller.cloud.stratos.apache.org/xsd"/>
+            <xs:import namespace="http://partition.deployment.controller.cloud.stratos.apache.org/xsd"/>
+            <xs:import namespace="http://pojo.controller.cloud.stratos.apache.org/xsd"/>
             <xs:element name="CloudControllerServiceInvalidPartitionException">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="InvalidPartitionException" nillable="true" type="ax220:InvalidPartitionException"></xs:element>
+                        <xs:element minOccurs="0" name="InvalidPartitionException" nillable="true" type="ax220:InvalidPartitionException"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="validatePartition">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="partition" nillable="true" type="ax222:Partition"></xs:element>
+                        <xs:element minOccurs="0" name="partition" nillable="true" type="ax222:Partition"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="validatePartitionResponse">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="return" type="xs:boolean"></xs:element>
+                        <xs:element minOccurs="0" name="return" type="xs:boolean"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="CloudControllerServiceInvalidCartridgeTypeException">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="InvalidCartridgeTypeException" nillable="true" type="ax220:InvalidCartridgeTypeException"></xs:element>
+                        <xs:element minOccurs="0" name="InvalidCartridgeTypeException" nillable="true" type="ax220:InvalidCartridgeTypeException"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="validateDeploymentPolicy">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="cartridgeType" nillable="true" type="xs:string"></xs:element>
-                        <xs:element maxOccurs="unbounded" minOccurs="0" name="partitions" nillable="true" type="ax222:Partition"></xs:element>
+                        <xs:element minOccurs="0" name="cartridgeType" nillable="true" type="xs:string"/>
+                        <xs:element maxOccurs="unbounded" minOccurs="0" name="partitions" nillable="true" type="ax222:Partition"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="validateDeploymentPolicyResponse">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="return" type="xs:boolean"></xs:element>
+                        <xs:element minOccurs="0" name="return" type="xs:boolean"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="CloudControllerServiceInvalidClusterException">
+            <xs:element name="CloudControllerServiceUnregisteredCartridgeException">
+                <xs:complexType>
+                    <xs:sequence>
+                        <xs:element minOccurs="0" name="UnregisteredCartridgeException" nillable="true" type="ax220:UnregisteredCartridgeException"/>
+                    </xs:sequence>
+                </xs:complexType>
+            </xs:element>
+            <xs:element name="updateContainers">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="InvalidClusterException" nillable="true" type="ax220:InvalidClusterException"></xs:element>
+                        <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"/>
+                        <xs:element minOccurs="0" name="replicas" type="xs:int"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="updateKubernetesController">
+            <xs:element name="updateContainersResponse">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"></xs:element>
-                        <xs:element minOccurs="0" name="replicas" type="xs:int"></xs:element>
+                        <xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="ax223:MemberContext"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="CloudControllerServiceUnregisteredClusterException">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="UnregisteredClusterException" nillable="true" type="ax220:UnregisteredClusterException"></xs:element>
+                        <xs:element minOccurs="0" name="UnregisteredClusterException" nillable="true" type="ax220:UnregisteredClusterException"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="unregisterService">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"></xs:element>
+                        <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="unregisterDockerService">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"></xs:element>
+                        <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="undeployCartridgeDefinition">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="cartridgeType" nillable="true" type="xs:string"></xs:element>
+                        <xs:element minOccurs="0" name="cartridgeType" nillable="true" type="xs:string"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="CloudControllerServiceInvalidMemberException">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="InvalidMemberException" nillable="true" type="ax220:InvalidMemberException"></xs:element>
+                        <xs:element minOccurs="0" name="InvalidMemberException" nillable="true" type="ax220:InvalidMemberException"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="terminateInstance">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="memberId" nillable="true" type="xs:string"></xs:element>
+                        <xs:element minOccurs="0" name="memberId" nillable="true" type="xs:string"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="terminateAllInstances">
+            <xs:element name="CloudControllerServiceInvalidClusterException">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"></xs:element>
+                        <xs:element minOccurs="0" name="InvalidClusterException" nillable="true" type="ax220:InvalidClusterException"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="terminateAllContainers">
+            <xs:element name="terminateAllInstances">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"></xs:element>
+                        <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
-            <xs:element name="CloudControllerServiceUnregisteredCartridgeException">
+            <xs:element name="terminateAllContainers">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="UnregisteredCartridgeException" nillable="true" type="ax220:UnregisteredCartridgeException"></xs:element>
+                        <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="CloudControllerServiceInvalidIaasProviderException">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="InvalidIaasProviderException" nillable="true" type="ax220:InvalidIaasProviderException"></xs:element>
+                        <xs:element minOccurs="0" name="InvalidIaasProviderException" nillable="true" type="ax220:InvalidIaasProviderException"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="startInstance">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="memberContext" nillable="true" type="ax223:MemberContext"></xs:element>
+                        <xs:element minOccurs="0" name="memberContext" nillable="true" type="ax223:MemberContext"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="startInstanceResponse">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="return" nillable="true" type="ax223:MemberContext"></xs:element>
+                        <xs:element minOccurs="0" name="return" nillable="true" type="ax223:MemberContext"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="startContainers">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="containerClusterContext" nillable="true" type="ax223:ContainerClusterContext"></xs:element>
+                        <xs:element minOccurs="0" name="containerClusterContext" nillable="true" type="ax223:ContainerClusterContext"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="startContainersResponse">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="ax223:MemberContext"></xs:element>
+                        <xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="ax223:MemberContext"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="registerService">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="registrant" nillable="true" type="ax223:Registrant"></xs:element>
+                        <xs:element minOccurs="0" name="registrant" nillable="true" type="ax223:Registrant"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="registerServiceResponse">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="return" type="xs:boolean"></xs:element>
+                        <xs:element minOccurs="0" name="return" type="xs:boolean"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="getRegisteredCartridges">
                 <xs:complexType>
-                    <xs:sequence></xs:sequence>
+                    <xs:sequence/>
                 </xs:complexType>
             </xs:element>
             <xs:element name="getRegisteredCartridgesResponse">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="xs:string"></xs:element>
+                        <xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="xs:string"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="getClusterContext">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"></xs:element>
+                        <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="getClusterContextResponse">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="return" nillable="true" type="ax223:ClusterContext"></xs:element>
+                        <xs:element minOccurs="0" name="return" nillable="true" type="ax223:ClusterContext"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="getCartridgeInfo">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="cartridgeType" nillable="true" type="xs:string"></xs:element>
+                        <xs:element minOccurs="0" name="cartridgeType" nillable="true" type="xs:string"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="getCartridgeInfoResponse">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="return" nillable="true" type="ax223:CartridgeInfo"></xs:element>
+                        <xs:element minOccurs="0" name="return" nillable="true" type="ax223:CartridgeInfo"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="CloudControllerServiceInvalidCartridgeDefinitionException">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="InvalidCartridgeDefinitionException" nillable="true" type="ax220:InvalidCartridgeDefinitionException"></xs:element>
+                        <xs:element minOccurs="0" name="InvalidCartridgeDefinitionException" nillable="true" type="ax220:InvalidCartridgeDefinitionException"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="deployCartridgeDefinition">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="cartridgeConfig" nillable="true" type="ax223:CartridgeConfig"></xs:element>
+                        <xs:element minOccurs="0" name="cartridgeConfig" nillable="true" type="ax223:CartridgeConfig"/>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
         </xs:schema>
         <xs:schema xmlns:ax229="http://util.java/xsd" xmlns:ax226="http://partition.deployment.controller.cloud.stratos.apache.org/xsd" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://pojo.controller.cloud.stratos.apache.org/xsd">
-            <xs:import namespace="http://partition.deployment.controller.cloud.stratos.apache.org/xsd"></xs:import>
-            <xs:import namespace="http://util.java/xsd"></xs:import>
+            <xs:import namespace="http://partition.deployment.controller.cloud.stratos.apache.org/xsd"/>
+            <xs:import namespace="http://util.java/xsd"/>
             <xs:complexType name="Properties">
                 <xs:sequence>
-                    <xs:element maxOccurs="unbounded" minOccurs="0" name="properties" nillable="true" type="ax223:Property"></xs:element>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" name="properties" nillable="true" type="ax223:Property"/>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="Property">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="name" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="value" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="name" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="value" nillable="true" type="xs:string"/>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="MemberContext">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="allocatedIpAddress" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="cartridgeType" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="initTime" type="xs:long"></xs:element>
-                    <xs:element minOccurs="0" name="instanceId" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="lbClusterId" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="memberId" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="networkPartitionId" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="nodeId" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="partition" nillable="true" type="ax222:Partition"></xs:element>
-                    <xs:element minOccurs="0" name="privateIpAddress" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax223:Properties"></xs:element>
-                    <xs:element minOccurs="0" name="publicIpAddress" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="allocatedIpAddress" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="cartridgeType" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="initTime" type="xs:long"/>
+                    <xs:element minOccurs="0" name="instanceId" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="lbClusterId" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="memberId" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="networkPartitionId" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="nodeId" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="partition" nillable="true" type="ax222:Partition"/>
+                    <xs:element minOccurs="0" name="privateIpAddress" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax223:Properties"/>
+                    <xs:element minOccurs="0" name="publicIpAddress" nillable="true" type="xs:string"/>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="ContainerClusterContext">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax223:Properties"></xs:element>
+                    <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax223:Properties"/>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="Registrant">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="autoScalerPolicyName" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="cartridgeType" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="deploymentPolicyName" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="hostName" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="payload" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="persistence" nillable="true" type="ax223:Persistence"></xs:element>
-                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax223:Properties"></xs:element>
-                    <xs:element minOccurs="0" name="tenantRange" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="autoScalerPolicyName" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="cartridgeType" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="deploymentPolicyName" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="hostName" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="payload" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="persistence" nillable="true" type="ax223:Persistence"/>
+                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax223:Properties"/>
+                    <xs:element minOccurs="0" name="tenantRange" nillable="true" type="xs:string"/>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="Persistence">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="persistanceRequired" type="xs:boolean"></xs:element>
-                    <xs:element maxOccurs="unbounded" minOccurs="0" name="volumes" nillable="true" type="ax223:Volume"></xs:element>
+                    <xs:element minOccurs="0" name="persistanceRequired" type="xs:boolean"/>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" name="volumes" nillable="true" type="ax223:Volume"/>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="Volume">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="device" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="iaasType" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="id" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="mappingPath" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="removeOntermination" type="xs:boolean"></xs:element>
-                    <xs:element minOccurs="0" name="size" type="xs:int"></xs:element>
-                    <xs:element minOccurs="0" name="snapshotId" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="volumeId" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="device" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="iaasType" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="id" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="mappingPath" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="removeOntermination" type="xs:boolean"/>
+                    <xs:element minOccurs="0" name="size" type="xs:int"/>
+                    <xs:element minOccurs="0" name="snapshotId" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="volumeId" nillable="true" type="xs:string"/>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="ClusterContext">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="cartridgeType" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="hostName" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="lbCluster" type="xs:boolean"></xs:element>
-                    <xs:element minOccurs="0" name="payload" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax229:Properties"></xs:element>
-                    <xs:element minOccurs="0" name="timeoutInMillis" type="xs:long"></xs:element>
-                    <xs:element minOccurs="0" name="volumeRequired" type="xs:boolean"></xs:element>
-                    <xs:element maxOccurs="unbounded" minOccurs="0" name="volumes" nillable="true" type="ax223:Volume"></xs:element>
+                    <xs:element minOccurs="0" name="cartridgeType" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="hostName" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="lbCluster" type="xs:boolean"/>
+                    <xs:element minOccurs="0" name="payload" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax229:Properties"/>
+                    <xs:element minOccurs="0" name="timeoutInMillis" type="xs:long"/>
+                    <xs:element minOccurs="0" name="volumeRequired" type="xs:boolean"/>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" name="volumes" nillable="true" type="ax223:Volume"/>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="CartridgeInfo">
                 <xs:sequence>
-                    <xs:element maxOccurs="unbounded" minOccurs="0" name="appTypes" nillable="true" type="ax223:AppType"></xs:element>
-                    <xs:element minOccurs="0" name="baseDir" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="defaultAutoscalingPolicy" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="defaultDeploymentPolicy" nillable="true" type="xs:string"></xs:element>
-                    <xs:element maxOccurs="unbounded" minOccurs="0" name="deploymentDirs" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="description" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="displayName" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="hostName" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="isPublic" type="xs:boolean"></xs:element>
-                    <xs:element minOccurs="0" name="lbConfig" nillable="true" type="ax223:LoadbalancerConfig"></xs:element>
-                    <xs:element minOccurs="0" name="multiTenant" type="xs:boolean"></xs:element>
-                    <xs:element minOccurs="0" name="persistence" nillable="true" type="ax223:Persistence"></xs:element>
-                    <xs:element maxOccurs="unbounded" minOccurs="0" name="portMappings" nillable="true" type="ax223:PortMapping"></xs:element>
-                    <xs:element maxOccurs="unbounded" minOccurs="0" name="properties" nillable="true" type="ax223:Property"></xs:element>
-                    <xs:element minOccurs="0" name="provider" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="serviceGroup" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="type" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="version" nillable="true" type="xs:string"></xs:element>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" name="appTypes" nillable="true" type="ax223:AppType"/>
+                    <xs:element minOccurs="0" name="baseDir" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="defaultAutoscalingPolicy" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="defaultDeploymentPolicy" nillable="true" type="xs:string"/>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" name="deploymentDirs" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="description" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="displayName" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="hostName" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="isPublic" type="xs:boolean"/>
+                    <xs:element minOccurs="0" name="lbConfig" nillable="true" type="ax223:LoadbalancerConfig"/>
+                    <xs:element minOccurs="0" name="multiTenant" type="xs:boolean"/>
+                    <xs:element minOccurs="0" name="persistence" nillable="true" type="ax223:Persistence"/>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" name="portMappings" nillable="true" type="ax223:PortMapping"/>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" name="properties" nillable="true" type="ax223:Property"/>
+                    <xs:element minOccurs="0" name="provider" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="serviceGroup" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="type" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="version" nillable="true" type="xs:string"/>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="AppType">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="appSpecificMapping" type="xs:boolean"></xs:element>
-                    <xs:element minOccurs="0" name="name" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="appSpecificMapping" type="xs:boolean"/>
+                    <xs:element minOccurs="0" name="name" nillable="true" type="xs:string"/>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="LoadbalancerConfig">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax223:Properties"></xs:element>
-                    <xs:element minOccurs="0" name="type" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax223:Properties"/>
+                    <xs:element minOccurs="0" name="type" nillable="true" type="xs:string"/>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="PortMapping">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="port" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="protocol" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="proxyPort" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="port" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="protocol" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="proxyPort" nillable="true" type="xs:string"/>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="CartridgeConfig">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="baseDir" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="container" nillable="true" type="ax223:Container"></xs:element>
-                    <xs:element minOccurs="0" name="defaultAutoscalingPolicy" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="defaultDeploymentPolicy" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="deployerType" nillable="true" type="xs:string"></xs:element>
-                    <xs:element maxOccurs="unbounded" minOccurs="0" name="deploymentDirs" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="description" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="displayName" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="hostName" nillable="true" type="xs:string"></xs:element>
-                    <xs:element maxOccurs="unbounded" minOccurs="0" name="iaasConfigs" nillable="true" type="ax223:IaasConfig"></xs:element>
-                    <xs:element minOccurs="0" name="isPublic" type="xs:boolean"></xs:element>
-                    <xs:element minOccurs="0" name="lbConfig" nillable="true" type="ax223:LoadbalancerConfig"></xs:element>
-                    <xs:element minOccurs="0" name="multiTenant" type="xs:boolean"></xs:element>
-                    <xs:element minOccurs="0" name="persistence" nillable="true" type="ax223:Persistence"></xs:element>
-                    <xs:element maxOccurs="unbounded" minOccurs="0" name="portMappings" nillable="true" type="ax223:PortMapping"></xs:element>
-                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax223:Properties"></xs:element>
-                    <xs:element minOccurs="0" name="provider" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="serviceGroup" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="type" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="version" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="baseDir" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="container" nillable="true" type="ax223:Container"/>
+                    <xs:element minOccurs="0" name="defaultAutoscalingPolicy" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="defaultDeploymentPolicy" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="deployerType" nillable="true" type="xs:string"/>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" name="deploymentDirs" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="description" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="displayName" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="hostName" nillable="true" type="xs:string"/>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" name="iaasConfigs" nillable="true" type="ax223:IaasConfig"/>
+                    <xs:element minOccurs="0" name="isPublic" type="xs:boolean"/>
+                    <xs:element minOccurs="0" name="lbConfig" nillable="true" type="ax223:LoadbalancerConfig"/>
+                    <xs:element minOccurs="0" name="multiTenant" type="xs:boolean"/>
+                    <xs:element minOccurs="0" name="persistence" nillable="true" type="ax223:Persistence"/>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" name="portMappings" nillable="true" type="ax223:PortMapping"/>
+                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax223:Properties"/>
+                    <xs:element minOccurs="0" name="provider" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="serviceGroup" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="type" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="version" nillable="true" type="xs:string"/>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="Container">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="dockerFileRepo" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="imageName" nillable="true" type="xs:string"></xs:element>
-                    <xs:element maxOccurs="unbounded" minOccurs="0" name="properties" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="dockerFileRepo" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="imageName" nillable="true" type="xs:string"/>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" name="properties" nillable="true" type="xs:string"/>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="IaasConfig">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="className" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="credential" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="identity" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="imageId" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="maxInstanceLimit" type="xs:int"></xs:element>
-                    <xs:element minOccurs="0" name="name" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="networkInterfaces" nillable="true" type="ax223:NetworkInterfaces"></xs:element>
-                    <xs:element minOccurs="0" name="payload" nillable="true" type="xs:base64Binary"></xs:element>
-                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax223:Properties"></xs:element>
-                    <xs:element minOccurs="0" name="provider" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="type" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="className" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="credential" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="identity" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="imageId" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="maxInstanceLimit" type="xs:int"/>
+                    <xs:element minOccurs="0" name="name" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="networkInterfaces" nillable="true" type="ax223:NetworkInterfaces"/>
+                    <xs:element minOccurs="0" name="payload" nillable="true" type="xs:base64Binary"/>
+                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax223:Properties"/>
+                    <xs:element minOccurs="0" name="provider" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="type" nillable="true" type="xs:string"/>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="NetworkInterfaces">
                 <xs:sequence>
-                    <xs:element maxOccurs="unbounded" minOccurs="0" name="networkInterfaces" nillable="true" type="ax223:NetworkInterface"></xs:element>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" name="networkInterfaces" nillable="true" type="ax223:NetworkInterface"/>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="NetworkInterface">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="fixedIp" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="networkUuid" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="portUuid" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="fixedIp" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="networkUuid" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="portUuid" nillable="true" type="xs:string"/>
                 </xs:sequence>
             </xs:complexType>
         </xs:schema>
         <xs:schema xmlns:ax224="http://pojo.controller.cloud.stratos.apache.org/xsd" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://partition.deployment.controller.cloud.stratos.apache.org/xsd">
-            <xs:import namespace="http://pojo.controller.cloud.stratos.apache.org/xsd"></xs:import>
+            <xs:import namespace="http://pojo.controller.cloud.stratos.apache.org/xsd"/>
             <xs:complexType name="Partition">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="description" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="id" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="isPublic" type="xs:boolean"></xs:element>
-                    <xs:element minOccurs="0" name="partitionMax" type="xs:int"></xs:element>
-                    <xs:element minOccurs="0" name="partitionMin" type="xs:int"></xs:element>
-                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax223:Properties"></xs:element>
-                    <xs:element minOccurs="0" name="provider" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="description" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="id" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="isPublic" type="xs:boolean"/>
+                    <xs:element minOccurs="0" name="partitionMax" type="xs:int"/>
+                    <xs:element minOccurs="0" name="partitionMin" type="xs:int"/>
+                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax223:Properties"/>
+                    <xs:element minOccurs="0" name="provider" nillable="true" type="xs:string"/>
                 </xs:sequence>
             </xs:complexType>
         </xs:schema>
     </wsdl:types>
     <wsdl:message name="validatePartitionRequest">
-        <wsdl:part name="parameters" element="ns:validatePartition"></wsdl:part>
+        <wsdl:part name="parameters" element="ns:validatePartition"/>
     </wsdl:message>
     <wsdl:message name="validatePartitionResponse">
-        <wsdl:part name="parameters" element="ns:validatePartitionResponse"></wsdl:part>
+        <wsdl:part name="parameters" element="ns:validatePartitionResponse"/>
     </wsdl:message>
     <wsdl:message name="CloudControllerServiceInvalidPartitionException">
-        <wsdl:part name="parameters" element="ns:CloudControllerServiceInvalidPartitionException"></wsdl:part>
+        <wsdl:part name="parameters" element="ns:CloudControllerServiceInvalidPartitionException"/>
     </wsdl:message>
     <wsdl:message name="validateDeploymentPolicyRequest">
-        <wsdl:part name="parameters" element="ns:validateDeploymentPolicy"></wsdl:part>
+        <wsdl:part name="parameters" element="ns:validateDeploymentPolicy"/>
     </wsdl:message>
     <wsdl:message name="validateDeploymentPolicyResponse">
-        <wsdl:part name="parameters" element="ns:validateDeploymentPolicyResponse"></wsdl:part>
+        <wsdl:part name="parameters" element="ns:validateDeploymentPolicyResponse"/>
     </wsdl:message>
     <wsdl:message name="CloudControllerServiceInvalidCartridgeTypeException">
-        <wsdl:part name="parameters" element="ns:CloudControllerServiceInvalidCartridgeTypeException"></wsdl:part>
+        <wsdl:part name="parameters" element="ns:CloudControllerServiceInvalidCartridgeTypeException"/>
     </wsdl:message>
     <wsdl:message name="startContainersRequest">
-        <wsdl:part name="parameters" element="ns:startContainers"></wsdl:part>
+        <wsdl:part name="parameters" element="ns:startContainers"/>
     </wsdl:message>
     <wsdl:message name="startContainersResponse">
-        <wsdl:part name="parameters" element="ns:startContainersResponse"></wsdl:part>
+        <wsdl:part name="parameters" element="ns:startContainersResponse"/>
     </wsdl:message>
     <wsdl:message name="CloudControllerServiceUnregisteredCartridgeException">
-        <wsdl:part name="parameters" element="ns:CloudControllerServiceUnregisteredCartridgeException"></wsdl:part>
+        <wsdl:part name="parameters" element="ns:CloudControllerServiceUnregisteredCartridgeException"/>
     </wsdl:message>
     <wsdl:message name="terminateInstanceRequest">
-        <wsdl:part name="parameters" element="ns:terminateInstance"></wsdl:part>
+        <wsdl:part name="parameters" element="ns:terminateInstance"/>
     </wsdl:message>
     <wsdl:message name="CloudControllerServiceInvalidMemberException">
-        <wsdl:part name="parameters" element="ns:CloudControllerServiceInvalidMemberException"></wsdl:part>
+        <wsdl:part name="parameters" element="ns:CloudControllerServiceInvalidMemberException"/>
     </wsdl:message>
     <wsdl:message name="registerServiceRequest">
-        <wsdl:part name="parameters" element="ns:registerService"></wsdl:part>
+        <wsdl:part name="parameters" element="ns:registerService"/>
     </wsdl:message>
     <wsdl:message name="registerServiceResponse">
-        <wsdl:part name="parameters" element="ns:registerServiceResponse"></wsdl:part>
+        <wsdl:part name="parameters" element="ns:registerServiceResponse"/>
     </wsdl:message>
     <wsdl:message name="deployCartridgeDefinitionRequest">
-        <wsdl:part name="parameters" element="ns:deployCartridgeDefinition"></wsdl:part>
+        <wsdl:part name="parameters" element="ns:deployCartridgeDefinition"/>
     </wsdl:message>
-    <wsdl:message name="deployCartridgeDefinitionResponse"></wsdl:message>
+    <wsdl:message name="deployCartridgeDefinitionResponse"/>
     <wsdl:message name="CloudControllerServiceInvalidCartridgeDefinitionException">
-        <wsdl:part name="parameters" element="ns:CloudControllerServiceInvalidCartridgeDefinitionException"></wsdl:part>
+        <wsdl:part name="parameters" element="ns:CloudControllerServiceInvalidCartridgeDefinitionException"/>
     </wsdl:message>
     <wsdl:message name="CloudControllerServiceInvalidIaasProviderException">
-        <wsdl:part name="parameters" element="ns:CloudControllerServiceInvalidIaasProviderException"></wsdl:part>
+        <wsdl:part name="parameters" element="ns:CloudControllerServiceInvalidIaasProviderException"/>
     </wsdl:message>
     <wsdl:message name="getCartridgeInfoRequest">
-        <wsdl:part name="parameters" element="ns:getCartridgeInfo"></wsdl:part>
+        <wsdl:part name="parameters" element="ns:getCartridgeInfo"/>
     </wsdl:message>
     <wsdl:message name="getCartridgeInfoResponse">
-        <wsdl:part name="parameters" element="ns:getCartridgeInfoResponse"></wsdl:part>
+        <wsdl:part name="parameters" element="ns:getCartridgeInfoResponse"/>
     </wsdl:message>
     <wsdl:message name="terminateAllContainersRequest">
-        <wsdl:part name="parameters" element="ns:terminateAllContainers"></wsdl:part>
+        <wsdl:part name="parameters" element="ns:terminateAllContainers"/>
     </wsdl:message>
     <wsdl:message name="CloudControllerServiceInvalidClusterException">
-        <wsdl:part name="parameters" element="ns:CloudControllerServiceInvalidClusterException"></wsdl:part>
+        <wsdl:part name="parameters" element="ns:CloudControllerServiceInvalidClusterException"/>
     </wsdl:message>
     <wsdl:message name="unregisterServiceRequest">
-        <wsdl:part name="parameters" element="ns:unregisterService"></wsdl:part>
+        <wsdl:part name="parameters" element="ns:unregisterService"/>
     </wsdl:message>
-    <wsdl:message name="unregisterServiceResponse"></wsdl:message>
+    <wsdl:message name="unregisterServiceResponse"/>
     <wsdl:message name="CloudControllerServiceUnregisteredClusterException">
-        <wsdl:part name="parameters" element="ns:CloudControllerServiceUnregisteredClusterException"></wsdl:part>
+        <wsdl:part name="parameters" element="ns:CloudControllerServiceUnregisteredClusterException"/>
     </wsdl:message>
     <wsdl:message name="undeployCartridgeDefinitionRequest">
-        <wsdl:part name="parameters" element="ns:undeployCartridgeDefinition"></wsdl:part>
+        <wsdl:part name="parameters" element="ns:undeployCartridgeDefinition"/>
     </wsdl:message>
-    <wsdl:message name="undeployCartridgeDefinitionResponse"></wsdl:message>
+    <wsdl:message name="undeployCartridgeDefinitionResponse"/>
     <wsdl:message name="terminateAllInstancesRequest">
-        <wsdl:part name="parameters" element="ns:terminateAllInstances"></wsdl:part>
+        <wsdl:part name="parameters" element="ns:terminateAllInstances"/>
     </wsdl:message>
     <wsdl:message name="unregisterDockerServiceRequest">
-        <wsdl:part name="parameters" element="ns:unregisterDockerService"></wsdl:part>
+        <wsdl:part name="parameters" element="ns:unregisterDockerService"/>
     </wsdl:message>
     <wsdl:message name="getRegisteredCartridgesRequest">
-        <wsdl:part name="parameters" element="ns:getRegisteredCartridges"></wsdl:part>
+        <wsdl:part name="parameters" element="ns:getRegisteredCartridges"/>
     </wsdl:message>
     <wsdl:message name="getRegisteredCartridgesResponse">
-        <wsdl:part name="parameters" element="ns:getRegisteredCartridgesResponse"></wsdl:part>
+        <wsdl:part name="parameters" element="ns:getRegisteredCartridgesResponse"/>
     </wsdl:message>
     <wsdl:message name="startInstanceRequest">
-        <wsdl:part name="parameters" element="ns:startInstance"></wsdl:part>
+        <wsdl:part name="parameters" element="ns:startInstance"/>
     </wsdl:message>
     <wsdl:message name="startInstanceResponse">
-        <wsdl:part name="parameters" element="ns:startInstanceResponse"></wsdl:part>
+        <wsdl:part name="parameters" element="ns:startInstanceResponse"/>
+    </wsdl:message>
+    <wsdl:message name="updateContainersRequest">
+        <wsdl:part name="parameters" element="ns:updateContainers"/>
+    </wsdl:message>
+    <wsdl:message name="updateContainersResponse">
+        <wsdl:part name="parameters" element="ns:updateContainersResponse"/>
     </wsdl:message>
     <wsdl:message name="getClusterContextRequest">
-        <wsdl:part name="parameters" element="ns:getClusterContext"></wsdl:part>
+        <wsdl:part name="parameters" element="ns:getClusterContext"/>
     </wsdl:message>
     <wsdl:message name="getClusterContextResponse">
-        <wsdl:part name="parameters" element="ns:getClusterContextResponse"></wsdl:part>
-    </wsdl:message>
-    <wsdl:message name="updateKubernetesControllerRequest">
-        <wsdl:part name="parameters" element="ns:updateKubernetesController"></wsdl:part>
+        <wsdl:part name="parameters" element="ns:getClusterContextResponse"/>
     </wsdl:message>
     <wsdl:portType name="CloudControllerServicePortType">
         <wsdl:operation name="validatePartition">
-            <wsdl:input message="ns:validatePartitionRequest" wsaw:Action="urn:validatePartition"></wsdl:input>
-            <wsdl:output message="ns:validatePartitionResponse" wsaw:Action="urn:validatePartitionResponse"></wsdl:output>
-            <wsdl:fault message="ns:CloudControllerServiceInvalidPartitionException" name="CloudControllerServiceInvalidPartitionException" wsaw:Action="urn:validatePartitionCloudControllerServiceInvalidPartitionException"></wsdl:fault>
+            <wsdl:input message="ns:validatePartitionRequest" wsaw:Action="urn:validatePartition"/>
+            <wsdl:output message="ns:validatePartitionResponse" wsaw:Action="urn:validatePartitionResponse"/>
+            <wsdl:fault message="ns:CloudControllerServiceInvalidPartitionException" name="CloudControllerServiceInvalidPartitionException" wsaw:Action="urn:validatePartitionCloudControllerServiceInvalidPartitionException"/>
         </wsdl:operation>
         <wsdl:operation name="validateDeploymentPolicy">
-            <wsdl:input message="ns:validateDeploymentPolicyRequest" wsaw:Action="urn:validateDeploymentPolicy"></wsdl:input>
-            <wsdl:output message="ns:validateDeploymentPolicyResponse" wsaw:Action="urn:validateDeploymentPolicyResponse"></wsdl:output>
-            <wsdl:fault message="ns:CloudControllerServiceInvalidPartitionException" name="CloudControllerServiceInvalidPartitionException" wsaw:Action="urn:validateDeploymentPolicyCloudControllerServiceInvalidPartitionException"></wsdl:fault>
-            <wsdl:fault message="ns:CloudControllerServiceInvalidCartridgeTypeException" name="CloudControllerServiceInvalidCartridgeTypeException" wsaw:Action="urn:validateDeploymentPolicyCloudControllerServiceInvalidCartridgeTypeException"></wsdl:fault>
+            <wsdl:input message="ns:validateDeploymentPolicyRequest" wsaw:Action="urn:validateDeploymentPolicy"/>
+            <wsdl:output message="ns:validateDeploymentPolicyResponse" wsaw:Action="urn:validateDeploymentPolicyResponse"/>
+            <wsdl:fault message="ns:CloudControllerServiceInvalidPartitionException" name="CloudControllerServiceInvalidPartitionException" wsaw:Action="urn:validateDeploymentPolicyCloudControllerServiceInvalidPartitionException"/>
+            <wsdl:fault message="ns:CloudControllerServiceInvalidCartridgeTypeException" name="CloudControllerServiceInvalidCartridgeTypeException" wsaw:Action="urn:validateDeploymentPolicyCloudControllerServiceInvalidCartridgeTypeException"/>
         </wsdl:operation>
         <wsdl:operation name="startContainers">
-            <wsdl:input message="ns:startContainersRequest" wsaw:Action="urn:startContainers"></wsdl:input>
-            <wsdl:output message="ns:startContainersResponse" wsaw:Action="urn:startContainersResponse"></wsdl:output>
-            <wsdl:fault message="ns:CloudControllerServiceUnregisteredCartridgeException" name="CloudControllerServiceUnregisteredCartridgeException" wsaw:Action="urn:startContainersCloudControllerServiceUnregisteredCartridgeException"></wsdl:fault>
+            <wsdl:input message="ns:startContainersRequest" wsaw:Action="urn:startContainers"/>
+            <wsdl:output message="ns:startContainersResponse" wsaw:Action="urn:startContainersResponse"/>
+            <wsdl:fault message="ns:CloudControllerServiceUnregisteredCartridgeException" name="CloudControllerServiceUnregisteredCartridgeException" wsaw:Action="urn:startContainersCloudControllerServiceUnregisteredCartridgeException"/>
         </wsdl:operation>
         <wsdl:operation name="terminateInstance">
-            <wsdl:input message="ns:terminateInstanceRequest" wsaw:Action="urn:terminateInstance"></wsdl:input>
-            <wsdl:fault message="ns:CloudControllerServiceInvalidMemberException" name="CloudControllerServiceInvalidMemberException" wsaw:Action="urn:terminateInstanceCloudControllerServiceInvalidMemberException"></wsdl:fault>
-            <wsdl:fault message="ns:CloudControllerServiceInvalidCartridgeTypeException" name="CloudControllerServiceInvalidCartridgeTypeException" wsaw:Action="urn:terminateInstanceCloudControllerServiceInvalidCartridgeTypeException"></wsdl:fault>
+            <wsdl:input message="ns:terminateInstanceRequest" wsaw:Action="urn:terminateInstance"/>
+            <wsdl:fault message="ns:CloudControllerServiceInvalidMemberException" name="CloudControllerServiceInvalidMemberException" wsaw:Action="urn:terminateInstanceCloudControllerServiceInvalidMemberException"/>
+            <wsdl:fault message="ns:CloudControllerServiceInvalidCartridgeTypeException" name="CloudControllerServiceInvalidCartridgeTypeException" wsaw:Action="urn:terminateInstanceCloudControllerServiceInvalidCartridgeTypeException"/>
         </wsdl:operation>
         <wsdl:operation name="registerService">
-            <wsdl:input message="ns:registerServiceRequest" wsaw:Action="urn:registerService"></wsdl:input>
-            <wsdl:output message="ns:registerServiceResponse" wsaw:Action="urn:registerServiceResponse"></wsdl:output>
-            <wsdl:fault message="ns:CloudControllerServiceUnregisteredCartridgeException" name="CloudControllerServiceUnregisteredCartridgeException" wsaw:Action="urn:registerServiceCloudControllerServiceUnregisteredCartridgeException"></wsdl:fault>
+            <wsdl:input message="ns:registerServiceRequest" wsaw:Action="urn:registerService"/>
+            <wsdl:output message="ns:registerServiceResponse" wsaw:Action="urn:registerServiceResponse"/>
+            <wsdl:fault message="ns:CloudControllerServiceUnregisteredCartridgeException" name="CloudControllerServiceUnregisteredCartridgeException" wsaw:Action="urn:registerServiceCloudControllerServiceUnregisteredCartridgeException"/>
         </wsdl:operation>
         <wsdl:operation name="deployCartridgeDefinition">
-            <wsdl:input message="ns:deployCartridgeDefinitionRequest" wsaw:Action="urn:deployCartridgeDefinition"></wsdl:input>
-            <wsdl:output message="ns:deployCartridgeDefinitionResponse" wsaw:Action="urn:deployCartridgeDefinitionResponse"></wsdl:output>
-            <wsdl:fault message="ns:CloudControllerServiceInvalidCartridgeDefinitionException" name="CloudControllerServiceInvalidCartridgeDefinitionException" wsaw:Action="urn:deployCartridgeDefinitionCloudControllerServiceInvalidCartridgeDefinitionException"></wsdl:fault>
-            <wsdl:fault message="ns:CloudControllerServiceInvalidIaasProviderException" name="CloudControllerServiceInvalidIaasProviderException" wsaw:Action="urn:deployCartridgeDefinitionCloudControllerServiceInvalidIaasProviderException"></wsdl:fault>
+            <wsdl:input message="ns:deployCartridgeDefinitionRequest" wsaw:Action="urn:deployCartridgeDefinition"/>
+            <wsdl:output message="ns:deployCartridgeDefinitionResponse" wsaw:Action="urn:deployCartridgeDefinitionResponse"/>
+            <wsdl:fault message="ns:CloudControllerServiceInvalidCartridgeDefinitionException" name="CloudControllerServiceInvalidCartridgeDefinitionException" wsaw:Action="urn:deployCartridgeDefinitionCloudControllerServiceInvalidCartridgeDefinitionException"/>
+            <wsdl:fault message="ns:CloudControllerServiceInvalidIaasProviderException" name="CloudControllerServiceInvalidIaasProviderException" wsaw:Action="urn:deployCartridgeDefinitionCloudControllerServiceInvalidIaasProviderException"/>
         </wsdl:operation>
         <wsdl:operation name="getCartridgeInfo">
-            <wsdl:input message="ns:getCartridgeInfoRequest" wsaw:Action="urn:getCartridgeInfo"></wsdl:input>
-            <wsdl:output message="ns:getCartridgeInfoResponse" wsaw:Action="urn:getCartridgeInfoResponse"></wsdl:output>
-            <wsdl:fault message="ns:CloudControllerServiceUnregisteredCartridgeException" name="CloudControllerServiceUnregisteredCartridgeException" wsaw:Action="urn:getCartridgeInfoCloudControllerServiceUnregisteredCartridgeException"></wsdl:fault>
+            <wsdl:input message="ns:getCartridgeInfoRequest" wsaw:Action="urn:getCartridgeInfo"/>
+            <wsdl:output message="ns:getCartridgeInfoResponse" wsaw:Action="urn:getCartridgeInfoResponse"/>
+            <wsdl:fault message="ns:CloudControllerServiceUnregisteredCartridgeException" name="CloudControllerServiceUnregisteredCartridgeException" wsaw:Action="urn:getCartridgeInfoCloudControllerServiceUnregisteredCartridgeException"/>
         </wsdl:operation>
         <wsdl:operation name="terminateAllContainers">
-            <wsdl:input message="ns:terminateAllContainersRequest" wsaw:Action="urn:terminateAllContainers"></wsdl:input>
-            <wsdl:fault message="ns:CloudControllerServiceInvalidClusterException" name="CloudControllerServiceInvalidClusterException" wsaw:Action="urn:terminateAllContainersCloudControllerServiceInvalidClusterException"></wsdl:fault>
+            <wsdl:input message="ns:terminateAllContainersRequest" wsaw:Action="urn:terminateAllContainers"/>
+            <wsdl:fault message="ns:CloudControllerServiceInvalidClusterException" name="CloudControllerServiceInvalidClusterException" wsaw:Action="urn:terminateAllContainersCloudControllerServiceInvalidClusterException"/>
         </wsdl:operation>
         <wsdl:operation name="unregisterService">
-            <wsdl:input message="ns:unregisterServiceRequest" wsaw:Action="urn:unregisterService"></wsdl:input>
-            <wsdl:output message="ns:unregisterServiceResponse" wsaw:Action="urn:unregisterServiceResponse"></wsdl:output>
-            <wsdl:fault message="ns:CloudControllerServiceUnregisteredClusterException" name="CloudControllerServiceUnregisteredClusterException" wsaw:Action="urn:unregisterServiceCloudControllerServiceUnregisteredClusterException"></wsdl:fault>
+            <wsdl:input message="ns:unregisterServiceRequest" wsaw:Action="urn:unregisterService"/>
+            <wsdl:output message="ns:unregisterServiceResponse" wsaw:Action="urn:unregisterServiceResponse"/>
+            <wsdl:fault message="ns:CloudControllerServiceUnregisteredClusterException" name="CloudControllerServiceUnregisteredClusterException" wsaw:Action="urn:unregisterServiceCloudControllerServiceUnregisteredClusterException"/>
         </wsdl:operation>
         <wsdl:operation name="undeployCartridgeDefinition">
-            <wsdl:input message="ns:undeployCartridgeDefinitionRequest" wsaw:Action="urn:undeployCartridgeDefinition"></wsdl:input>
-            <wsdl:output message="ns:undeployCartridgeDefinitionResponse" wsaw:Action="urn:undeployCartridgeDefinitionResponse"></wsdl:output>
-            <wsdl:fault message="ns:CloudControllerServiceInvalidCartridgeTypeException" name="CloudControllerServiceInvalidCartridgeTypeException" wsaw:Action="urn:undeployCartridgeDefinitionCloudControllerServiceInvalidCartridgeTypeException"></wsdl:fault>
+            <wsdl:input message="ns:undeployCartridgeDefinitionRequest" wsaw:Action="urn:undeployCartridgeDefinition"/>
+            <wsdl:output message="ns:undeployCartridgeDefinitionResponse" wsaw:Action="urn:undeployCartridgeDefinitionResponse"/>
+            <wsdl:fault message="ns:CloudControllerServiceInvalidCartridgeTypeException" name="CloudControllerServiceInvalidCartridgeTypeException" wsaw:Action="urn:undeployCartridgeDefinitionCloudControllerServiceInvalidCartridgeTypeException"/>
         </wsdl:operation>
         <wsdl:operation name="terminateAllInstances">
-            <wsdl:input message="ns:terminateAllInstancesRequest" wsaw:Action="urn:terminateAllInstances"></wsdl:input>
-            <wsdl:fault message="ns:CloudControllerServiceInvalidClusterException" name="CloudControllerServiceInvalidClusterException" wsaw:Action="urn:terminateAllInstancesCloudControllerServiceInvalidClusterException"></wsdl:fault>
+            <wsdl:input message="ns:terminateAllInstancesRequest" wsaw:Action="urn:terminateAllInstances"/>
+            <wsdl:fault message="ns:CloudControllerServiceInvalidClusterException" name="CloudControllerServiceInvalidClusterException" wsaw:Action="urn:terminateAllInstancesCloudControllerServiceInvalidClusterException"/>
         </wsdl:operation>
         <wsdl:operation name="unregisterDockerService">
-            <wsdl:input message="ns:unregisterDockerServiceRequest" wsaw:Action="urn:unregisterDockerService"></wsdl:input>
-            <wsdl:fault message="ns:CloudControllerServiceUnregisteredClusterException" name="CloudControllerServiceUnregisteredClusterException" wsaw:Action="urn:unregisterDockerServiceCloudControllerServiceUnregisteredClusterException"></wsdl:fault>
+            <wsdl:input message="ns:unregisterDockerServiceRequest" wsaw:Action="urn:unregisterDockerService"/>
+            <wsdl:fault message="ns:CloudControllerServiceUnregisteredClusterException" name="CloudControllerServiceUnregisteredClusterException" wsaw:Action="urn:unregisterDockerServiceCloudControllerServiceUnregisteredClusterException"/>
         </wsdl:operation>
         <wsdl:operation name="getRegisteredCartridges">
-            <wsdl:input message="ns:getRegisteredCartridgesRequest" wsaw:Action="urn:getRegisteredCartridges"></wsdl:input>
-            <wsdl:output message="ns:getRegisteredCartridgesResponse" wsaw:Action="urn:getRegisteredCartridgesResponse"></wsdl:output>
+            <wsdl:input message="ns:getRegisteredCartridgesRequest" wsaw:Action="urn:getRegisteredCartridges"/>
+            <wsdl:output message="ns:getRegisteredCartridgesResponse" wsaw:Action="urn:getRegisteredCartridgesResponse"/>
         </wsdl:operation>
         <wsdl:operation name="startInstance">
-            <wsdl:input message="ns:startInstanceRequest" wsaw:Action="urn:startInstance"></wsdl:input>
-            <wsdl:output message="ns:startInstanceResponse" wsaw:Action="urn:startInstanceResponse"></wsdl:output>
-            <wsdl:fault message="ns:CloudControllerServiceUnregisteredCartridgeException" name="CloudControllerServiceUnregisteredCartridgeException" wsaw:Action="urn:startInstanceCloudControllerServiceUnregisteredCartridgeException"></wsdl:fault>
-            <wsdl:fault message="ns:CloudControllerServiceInvalidIaasProviderException" name="CloudControllerServiceInvalidIaasProviderException" wsaw:Action="urn:startInstanceCloudControllerServiceInvalidIaasProviderException"></wsdl:fault>
+            <wsdl:input message="ns:startInstanceRequest" wsaw:Action="urn:startInstance"/>
+            <wsdl:output message="ns:startInstanceResponse" wsaw:Action="urn:startInstanceResponse"/>
+            <wsdl:fault message="ns:CloudControllerServiceUnregisteredCartridgeException" name="CloudControllerServiceUnregisteredCartridgeException" wsaw:Action="urn:startInstanceCloudControllerServiceUnregisteredCartridgeException"/>
+            <wsdl:fault message="ns:CloudControllerServiceInvalidIaasProviderException" name="CloudControllerServiceInvalidIaasProviderException" wsaw:Action="urn:startInstanceCloudControllerServiceInvalidIaasProviderException"/>
         </wsdl:operation>
-        <wsdl:operation name="getClusterContext">
-            <wsdl:input message="ns:getClusterContextRequest" wsaw:Action="urn:getClusterContext"></wsdl:input>
-            <wsdl:output message="ns:getClusterContextResponse" wsaw:Action="urn:getClusterContextResponse"></wsdl:output>
+        <wsdl:operation name="updateContainers">
+            <wsdl:input message="ns:updateContainersRequest" wsaw:Action="urn:updateContainers"/>
+            <wsdl:output message="ns:updateContainersResponse" wsaw:Action="urn:updateContainersResponse"/>
+            <wsdl:fault message="ns:CloudControllerServiceUnregisteredCartridgeException" name="CloudControllerServiceUnregisteredCartridgeException" wsaw:Action="urn:updateContainersCloudControllerServiceUnregisteredCartridgeException"/>
         </wsdl:operation>
-        <wsdl:operation name="updateKubernetesController">
-            <wsdl:input message="ns:updateKubernetesControllerRequest" wsaw:Action="urn:updateKubernetesController"></wsdl:input>
-            <wsdl:fault message="ns:CloudControllerServiceInvalidClusterException" name="CloudControllerServiceInvalidClusterException" wsaw:Action="urn:updateKubernetesControllerCloudControllerServiceInvalidClusterException"></wsdl:fault>
+        <wsdl:operation name="getClusterContext">
+            <wsdl:input message="ns:getClusterContextRequest" wsaw:Action="urn:getClusterContext"/>
+            <wsdl:output message="ns:getClusterContextResponse" wsaw:Action="urn:getClusterContextResponse"/>
         </wsdl:operation>
     </wsdl:portType>
     <wsdl:binding name="CloudControllerServiceSoap11Binding" type="ns:CloudControllerServicePortType">
-        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"></soap:binding>
+        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
         <wsdl:operation name="validatePartition">
-            <soap:operation soapAction="urn:validatePartition" style="document"></soap:operation>
+            <soap:operation soapAction="urn:validatePartition" style="document"/>
             <wsdl:input>
-                <soap:body use="literal"></soap:body>
+                <soap:body use="literal"/>
             </wsdl:input>
             <wsdl:output>
-                <soap:body use="literal"></soap:body>
+                <soap:body use="literal"/>
             </wsdl:output>
             <wsdl:fault name="CloudControllerServiceInvalidPartitionException">
-                <soap:fault use="literal" name="CloudControllerServiceInvalidPartitionException"></soap:fault>
+                <soap:fault use="literal" name="CloudControllerServiceInvalidPartitionException"/>
             </wsdl:fault>
         </wsdl:operation>
         <wsdl:operation name="validateDeploymentPolicy">
-            <soap:operation soapAction="urn:validateDeploymentPolicy" style="document"></soap:operation>
+            <soap:operation soapAction="urn:validateDeploymentPolicy" style="document"/>
             <wsdl:input>
-                <soap:body use="literal"></soap:body>
+                <soap:body use="literal"/>
             </wsdl:input>
             <wsdl:output>
-                <soap:body use="literal"></soap:body>
+                <soap:body use="literal"/>
             </wsdl:output>
             <wsdl:fault name="CloudControllerServiceInvalidPartitionException">
-                <soap:fault use="literal" name="CloudControllerServiceInvalidPartitionException"></soap:fault>
+                <soap:fault use="literal" name="CloudControllerServiceInvalidPartitionException"/>
             </wsdl:fault>
             <wsdl:fault name="CloudControllerServiceInvalidCartridgeTypeException">
-                <soap:fault use="literal" name="CloudControllerServiceInvalidCartridgeTypeException"></soap:fault>
+                <soap:fault use="literal" name="CloudControllerServiceInvalidCartridgeTypeException"/>
             </wsdl:fault>
         </wsdl:operation>
         <wsdl:operation name="terminateInstance">
-            <soap:operation soapAction="urn:terminateInstance" style="document"></soap:operation>
+            <soap:operation soapAction="urn:terminateInstance" style="document"/>
             <wsdl:input>
-                <soap:body use="literal"></soap:body>
+                <soap:body use="literal"/>
             </wsdl:input>
             <wsdl:fault name="CloudControllerServiceInvalidMemberException">
-                <soap:fault use="literal" name="CloudControllerServiceInvalidMemberException"></soap:fault>
+                <soap:fault use="literal" name="CloudControllerServiceInvalidMemberException"/>
             </wsdl:fault>
             <wsdl:fault name="CloudControllerServiceInvalidCartridgeTypeException">
-                <soap:fault use="literal" name="CloudControllerServiceInvalidCartridgeTypeException"></soap:fault>
+                <soap:fault use="literal" name="CloudControllerServiceInvalidCartridgeTypeException"/>
             </wsdl:fault>
         </wsdl:operation>
         <wsdl:operation name="startContainers">
-            <soap:operation soapAction="urn:startContainers" style="document"></soap:operation>
+            <soap:operation soapAction="urn:startContainers" style="document"/>
             <wsdl:input>
-                <soap:body use="literal"></soap:body>
+                <soap:body use="literal"/>
             </wsdl:input>
             <wsdl:output>
-                <soap:body use="literal"></soap:body>
+                <soap:body use="literal"/>
             </wsdl:output>
             <wsdl:fault name="CloudControllerServiceUnregisteredCartridgeException">
-                <soap:fault use="literal" name="CloudControllerServiceUnregisteredCartridgeException"></soap:fault>
+                <soap:fault use="literal" name="CloudControllerServiceUnregisteredCartridgeException"/>
             </wsdl:fault>
         </wsdl:operation>
         <wsdl:operation name="registerService">
-            <soap:operation soapAction="urn:registerService" style="document"></soap:operation>
+            <soap:operation soapAction="urn:registerService" style="document"/>
             <wsdl:input>
-                <soap:body use="literal"></soap:body>
+                <soap:body use="literal"/>
             </wsdl:input>
             <wsdl:output>
-                <soap:body use="literal"></soap:body>
+                <soap:body use="literal"/>
             </wsdl:output>
             <wsdl:fault name="CloudControllerServiceUnregisteredCartridgeException">
-                <soap:fault use="literal" name="CloudControllerServiceUnregisteredCartridgeException"></soap:fault>
+                <soap:fault use="literal" name="CloudControllerServiceUnregisteredCartridgeException"/>
             </wsdl:fault>
         </wsdl:operation>
         <wsdl:operation name="deployCartridgeDefinition">
-            <soap:operation soapAction="urn:deployCartridgeDefinition" style="document"></soap:operation>
+            <soap:operation soapAction="urn:deployCartridgeDefinition" style="document"/>
             <wsdl:input>
-                <soap:body use="literal"></soap:body>
+                <soap:body use="literal"/>
             </wsdl:input>
             <wsdl:output>
-                <soap:body use="literal"></soap:body>
+                <soap:body use="literal"/>
             </wsdl:output>
             <wsdl:fault name="CloudControllerServiceInvalidCartridgeDefinitionException">
-                <soap:fault use="literal" name="CloudControllerServiceInvalidCartridgeDefinitionException"></soap:fault>
+                <soap:fault use="literal" name="CloudControllerServiceInvalidCartridgeDefinitionException"/>
             </wsdl:fault>
             <wsdl:fault name="CloudControllerServiceInvalidIaasProviderException">
-                <soap:fault use="literal" name="CloudControllerServiceInvalidIaasProviderException"></soap:fault>
+                <soap:fault use="literal" name="CloudControllerServiceInvalidIaasProviderException"/>
             </wsdl:fault>
         </wsdl:operation>
         <wsdl:operation name="getCartridgeInfo">
-            <soap:operation soapAction="urn:getCartridgeInfo" style="document"></soap:operation>
+            <soap:operation soapAction="urn:getCartridgeInfo" style="document"/>
             <wsdl:input>
-                <soap:body use="literal"></soap:body>
+                <soap:body use="literal"/>
             </wsdl:input>
             <wsdl:output>
-                <soap:body use="literal"></soap:body>
+                <soap:body use="literal"/>
             </wsdl:output>
             <wsdl:fault name="CloudControllerServiceUnregisteredCartridgeException">
-                <soap:fault use="literal" name="CloudControllerServiceUnregisteredCartridgeException"></soap:fault>
+                <soap:fault use="literal" name="CloudControllerServiceUnregisteredCartridgeException"/>
             </wsdl:fault>
         </wsdl:operation>
         <wsdl:operation name="terminateAllContainers">
-            <soap:operation soapAction="urn:terminateAllContainers" style="document"></soap:operation>
+            <soap:operation soapAction="urn:terminateAllContainers" style="document"/>
             <wsdl:input>
-                <soap:body use="literal"></soap:body>
+                <soap:body use="literal"/>
             </wsdl:input>
             <wsdl:fault name="CloudControllerServiceInvalidClusterException">
-                <soap:fault use="literal" name="CloudControllerServiceInvalidClusterException"></soap:fault>
+                <soap:fault use="literal" name="CloudControllerServiceInvalidClusterException"/>
             </wsdl:fault>
         </wsdl:operation>
         <wsdl:operation name="unregisterService">
-            <soap:operation soapAction="urn:unregisterService" style="document"></soap:operation>
+            <soap:operation soapAction="urn:unregisterService" style="document"/>
             <wsdl:input>
-                <soap:body use="literal"></soap:body>
+                <soap:body use="literal"/>
             </wsdl:input>
             <wsdl:output>
-                <soap:body use="literal"></soap:body>
+                <soap:body use="literal"/>
             </wsdl:output>
             <wsdl:fault name="CloudControllerServiceUnregisteredClusterException">
-                <soap:fault use="literal" name="CloudControllerServiceUnregisteredClusterException"></soap:fault>
+                <soap:fault use="literal" name="CloudControllerServiceUnregisteredClusterException"/>
             </wsdl:fault>
         </wsdl:operation>
         <wsdl:operation name="undeployCartridgeDefinition">
-            <soap:operation soapAction="urn:undeployCartridgeDefinition" style="document"></soap:operation>
+            <soap:operation soapAction="urn:undeployCartridgeDefinition" style="document"/>
             <wsdl:input>
-                <soap:body use="literal"></soap:body>
+                <soap:body use="literal"/>
             </wsdl:input>
             <wsdl:output>
-                <soap:body use="literal"></soap:body>
+                <soap:body use="literal"/>
             </wsdl:output>
             <wsdl:fault name="CloudControllerServiceInvalidCartridgeTypeException">
-                <soap:fault use="literal" name="CloudControllerServiceInvalidCartridgeTypeException"></soap:fault>
+                <soap:fault use="literal" name="CloudControllerServiceInvalidCartridgeTypeException"/>
             </wsdl:fault>
         </wsdl:operation>
         <wsdl:operation name="terminateAllInstances">
-            <soap:operation soapAction="urn:terminateAllInstances" style="document"></soap:operation>
+            <soap:operation soapAction="urn:terminateAllInstances" style="document"/>
             <wsdl:input>
-                <soap:body use="literal"></soap:body>
+                <soap:body use="literal"/>
             </wsdl:input>
             <wsdl:fault name="CloudControllerServiceInvalidClusterException">
-                <soap:fault use="literal" name="CloudControllerServiceInvalidClusterException"></soap:fault>
+                <soap:fault use="literal" name="CloudControllerServiceInvalidClusterException"/>
             </wsdl:fault>
         </wsdl:operation>
         <wsdl:operation name="getRegisteredCartridges">
-            <soap:operation soapAction="urn:getRegisteredCartridges" style="document"></soap:operation>
+            <soap:operation soapAction="urn:getRegisteredCartridges" style="document"/>
             <wsdl:input>
-                <soap:body use="literal"></soap:body>
+                <soap:body use="literal"/>
             </wsdl:input>
             <wsdl:output>
-                <soap:body use="literal"></soap:body>
+                <soap:body use="literal"/>
             </wsdl:output>
         </wsdl:operation>
         <wsdl:operation name="unregisterDockerService">
-            <soap:operation soapAction="urn:unregisterDockerService" style="document"></soap:operation>
+            <soap:operation soapAction="urn:unregisterDockerService" style="document"/>
             <wsdl:input>
-                <soap:body use="literal"></soap:body>
+                <soap:body use="literal"/>
             </wsdl:input>
             <wsdl:fault name="CloudControllerServiceUnregisteredClusterException">
-                <soap:fault use="literal" name="CloudControllerServiceUnregisteredClusterException"></soap:fault>
+                <soap:fault use="literal" name="CloudControllerServiceUnregisteredClusterException"/>
             </wsdl:fault>
         </wsdl:operation>
         <wsdl:operation name="startInstance">
-            <soap:operation soapAction="urn:startInstance" style="document"></soap:operation>
+            <soap:operation soapAction="urn:startInstance" style="document"/>
             <wsdl:input>
-                <soap:body use="literal"></soap:body>
+                <soap:body use="literal"/>
             </wsdl:input>
             <wsdl:output>
-                <soap:body use="literal"></soap:body>
+                <soap:body use="literal"/>
             </wsdl:output>
             <wsdl:fault name="CloudControllerServiceInvalidIaasProviderException">
-                <soap:fault use="literal" name="CloudControllerServiceInvalidIaasProviderException"></soap:fault>
+                <soap:fault use="literal" name="CloudControllerServiceInvalidIaasProviderException"/>
             </wsdl:fault>
             <wsdl:fault name="CloudControllerServiceUnregisteredCartridgeException">
-                <soap:fault use="literal" name="CloudControllerServiceUnregisteredCartridgeException"></soap:fault>
+                <soap:fault use="literal" name="CloudControllerServiceUnregisteredCartridgeException"/>
             </wsdl:fault>
         </wsdl:operation>
         <wsdl:operation name="getClusterContext">
-            <soap:operation soapAction="urn:getClusterContext" style="document"></soap:operation>
+            <soap:operation soapAction="urn:getClusterContext" style="document"/>
             <wsdl:input>
-                <soap:body use="literal"></soap:body>
+                <soap:body use="literal"/>
             </wsdl:input>
             <wsdl:output>
-                <soap:body use="literal"></soap:body>
+                <so

<TRUNCATED>

[15/50] [abbrv] git commit: making drool files as arguments to AutoscalerRuleEvaluator

Posted by ni...@apache.org.
making drool files as arguments to AutoscalerRuleEvaluator


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

Branch: refs/heads/master
Commit: 7b0cf721b11037166033fbd998eb53cd3c63af23
Parents: 6e0eca9
Author: R-Rajkumar <rr...@gmail.com>
Authored: Thu Oct 9 10:55:15 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:56 2014 +0530

----------------------------------------------------------------------
 .../KubernetesServiceClusterMonitor.java        | 54 +++++++++++++++++++-
 .../autoscaler/monitor/VMLbClusterMonitor.java  |  6 ++-
 .../monitor/VMServiceClusterMonitor.java        |  5 +-
 .../rule/AutoscalerRuleEvaluator.java           | 24 +++++----
 4 files changed, 75 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/7b0cf721/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 6362fc4..d0d7668 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
@@ -52,7 +52,10 @@ public final class KubernetesServiceClusterMonitor extends KubernetesClusterMoni
                                            String serviceClusterID, String serviceId,
                                            AutoscalePolicy autoscalePolicy) {
         super(serviceClusterID, serviceId, kubernetesClusterCtxt,
-              new AutoscalerRuleEvaluator(), autoscalePolicy);
+              new AutoscalerRuleEvaluator(
+                      StratosConstants.CONTAINER_MIN_CHECK_DROOL_FILE,
+                      StratosConstants.CONTAINER_SCALE_CHECK_DROOL_FILE),
+              autoscalePolicy);
         readConfigurations();
     }
 
@@ -144,9 +147,56 @@ public final class KubernetesServiceClusterMonitor extends KubernetesClusterMoni
             } catch (InterruptedException ignored) {
             }
         }
+        
+        minCheck();
+        scaleCheck();
     }
 
-    @Override
+    private void scaleCheck() {
+        boolean rifReset = getKubernetesClusterCtxt().isRifReset();
+        boolean memoryConsumptionReset = getKubernetesClusterCtxt().isMemoryConsumptionReset();
+        boolean loadAverageReset = getKubernetesClusterCtxt().isLoadAverageReset();
+        if (log.isDebugEnabled()) {
+            log.debug("flag of rifReset : " + rifReset
+                      + " flag of memoryConsumptionReset : "
+                      + memoryConsumptionReset + " flag of loadAverageReset : "
+                      + loadAverageReset);
+        }
+        String kubernetesClusterID = getKubernetesClusterCtxt().getKubernetesClusterID();
+        String clusterId = getClusterId();
+        if (rifReset || memoryConsumptionReset || loadAverageReset) {
+            getScaleCheckKnowledgeSession().setGlobal("clusterId", clusterId);
+            getScaleCheckKnowledgeSession().setGlobal("autoscalePolicy", autoscalePolicy);
+            getScaleCheckKnowledgeSession().setGlobal("rifReset", rifReset);
+            getScaleCheckKnowledgeSession().setGlobal("mcReset", memoryConsumptionReset);
+            getScaleCheckKnowledgeSession().setGlobal("laReset", loadAverageReset);
+            if (log.isDebugEnabled()) {
+                log.debug(String.format(
+                        "Running scale check for kub-cluster %s ", kubernetesClusterID));
+            }
+            scaleCheckFactHandle = AutoscalerRuleEvaluator.evaluateScaleCheck(
+                    getScaleCheckKnowledgeSession(), scaleCheckFactHandle, getKubernetesClusterCtxt());
+            getKubernetesClusterCtxt().setRifReset(false);
+            getKubernetesClusterCtxt().setMemoryConsumptionReset(false);
+            getKubernetesClusterCtxt().setLoadAverageReset(false);
+        } else if (log.isDebugEnabled()) {
+            log.debug(String.format("Scale check will not run since none of the statistics have not received yet for "
+                                    + "[kub-cluster] %s [cluster] %s", kubernetesClusterID, clusterId));
+        }
+    }
+
+	private void minCheck() {
+		getMinCheckKnowledgeSession().setGlobal("clusterId", getClusterId());
+		if (log.isDebugEnabled()) {
+			log.debug(String.format("Running minimum check for cluster %s ",
+					getClusterId()));
+		}
+		minCheckFactHandle = AutoscalerRuleEvaluator.evaluateMinCheck(
+				getMinCheckKnowledgeSession(), minCheckFactHandle,
+				getKubernetesClusterCtxt());
+	}
+
+	@Override
     public void destroy() {
         getMinCheckKnowledgeSession().dispose();
         getScaleCheckKnowledgeSession().dispose();

http://git-wip-us.apache.org/repos/asf/stratos/blob/7b0cf721/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/VMLbClusterMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/VMLbClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/VMLbClusterMonitor.java
index 1c27380..8e7d0e1 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/VMLbClusterMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/VMLbClusterMonitor.java
@@ -34,6 +34,7 @@ import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy;
 import org.apache.stratos.autoscaler.rule.AutoscalerRuleEvaluator;
 import org.apache.stratos.autoscaler.util.AutoScalerConstants;
 import org.apache.stratos.autoscaler.util.ConfUtil;
+import org.apache.stratos.common.constants.StratosConstants;
 import org.apache.stratos.messaging.domain.topology.ClusterStatus;
 import org.apache.stratos.messaging.event.topology.ClusterRemovedEvent;
 
@@ -48,7 +49,10 @@ public class VMLbClusterMonitor extends VMClusterMonitor {
 
     public VMLbClusterMonitor(String clusterId, String serviceId, DeploymentPolicy deploymentPolicy,
                               AutoscalePolicy autoscalePolicy) {
-        super(clusterId, serviceId, new AutoscalerRuleEvaluator(),
+        super(clusterId, serviceId,
+              new AutoscalerRuleEvaluator(
+                      StratosConstants.VM_MIN_CHECK_DROOL_FILE,
+                      StratosConstants.VM_SCALE_CHECK_DROOL_FILE),
               deploymentPolicy, autoscalePolicy,
               new ConcurrentHashMap<String, NetworkPartitionContext>());
         readConfigurations();

http://git-wip-us.apache.org/repos/asf/stratos/blob/7b0cf721/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/VMServiceClusterMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/VMServiceClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/VMServiceClusterMonitor.java
index 6f9fb26..adf750d 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/VMServiceClusterMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/VMServiceClusterMonitor.java
@@ -35,6 +35,7 @@ import org.apache.stratos.autoscaler.util.ConfUtil;
 import org.apache.stratos.cloud.controller.stub.pojo.MemberContext;
 import org.apache.stratos.cloud.controller.stub.pojo.Properties;
 import org.apache.stratos.cloud.controller.stub.pojo.Property;
+import org.apache.stratos.common.constants.StratosConstants;
 import org.apache.stratos.messaging.domain.topology.ClusterStatus;
 
 /**
@@ -51,7 +52,9 @@ public class VMServiceClusterMonitor extends VMClusterMonitor {
     public VMServiceClusterMonitor(String clusterId, String serviceId,
                                    DeploymentPolicy deploymentPolicy,
                                    AutoscalePolicy autoscalePolicy) {
-        super(clusterId, serviceId, new AutoscalerRuleEvaluator(),
+        super(clusterId, serviceId,
+              new AutoscalerRuleEvaluator(StratosConstants.VM_MIN_CHECK_DROOL_FILE,
+                                          StratosConstants.VM_SCALE_CHECK_DROOL_FILE),
               deploymentPolicy, autoscalePolicy,
               new ConcurrentHashMap<String, NetworkPartitionContext>());
         readConfigurations();

http://git-wip-us.apache.org/repos/asf/stratos/blob/7b0cf721/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/AutoscalerRuleEvaluator.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/AutoscalerRuleEvaluator.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/AutoscalerRuleEvaluator.java
index 4bf9207..a402ab4 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/AutoscalerRuleEvaluator.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/AutoscalerRuleEvaluator.java
@@ -44,32 +44,36 @@ public class AutoscalerRuleEvaluator {
 	
 	private static final Log log = LogFactory.getLog(AutoscalerRuleEvaluator.class);
 
-	private static final String DRL_FILE_NAME = "mincheck.drl";
-	private static final String SCALING_DRL_FILE_NAME = "scaling.drl";
-	private static final String TERMINATE_ALL_DRL_FILE_NAME = "terminateall.drl";
+	//vm drool files as default
+	private String minCheckDroolFileName = "mincheck.drl";
+	private String scaleCheckDroolFileName = "scaling.drl";
+	private String terminateAllDroolFileName = "terminateall.drl";
 
 	private static KnowledgeBase minCheckKbase;
 	private static KnowledgeBase scaleCheckKbase;
 	@SuppressWarnings("unused")
 	private static KnowledgeBase terminateAllKbase;
 
-    public AutoscalerRuleEvaluator(){
+    public AutoscalerRuleEvaluator(String minCheckDroolFileName, String scaleCheckDroolFileName){
+    	
+    	this.minCheckDroolFileName = minCheckDroolFileName;
+    	this.scaleCheckDroolFileName = scaleCheckDroolFileName;
 
-        minCheckKbase = readKnowledgeBase(DRL_FILE_NAME);
+        minCheckKbase = readKnowledgeBase(this.minCheckDroolFileName);
 
         if (log.isDebugEnabled()) {
-            log.debug("Minimum check rule is parsed successfully");
+            log.debug("Minimum check rule is parsed successfully : " + this.minCheckDroolFileName);
         }
 
-        scaleCheckKbase = readKnowledgeBase(SCALING_DRL_FILE_NAME);
+        scaleCheckKbase = readKnowledgeBase(this.scaleCheckDroolFileName);
 
         if (log.isDebugEnabled()) {
-            log.debug("Scale check rule is parsed successfully");
+            log.debug("Scale check rule is parsed successfully : " + this.scaleCheckDroolFileName);
         }
-        terminateAllKbase = readKnowledgeBase(TERMINATE_ALL_DRL_FILE_NAME);
+        terminateAllKbase = readKnowledgeBase(this.terminateAllDroolFileName);
 
         if (log.isDebugEnabled()) {
-            log.debug("Terminate all rule is parsed successfully");
+            log.debug("Terminate all rule is parsed successfully : " + this.terminateAllDroolFileName);
         }
     }
 


[05/50] [abbrv] git commit: Setting init time for the Member.

Posted by ni...@apache.org.
Setting init time for the Member.


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

Branch: refs/heads/master
Commit: 5e4c7c191da59ae373721b35d0ef3eec484ce389
Parents: ee8a1b6
Author: Nirmal Fernando <ni...@gmail.com>
Authored: Wed Oct 8 18:54:48 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:55 2014 +0530

----------------------------------------------------------------------
 .../stratos/cloud/controller/functions/PodToMemberContext.java      | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/5e4c7c19/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/PodToMemberContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/PodToMemberContext.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/PodToMemberContext.java
index a1eb1a4..29987cc 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/PodToMemberContext.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/PodToMemberContext.java
@@ -38,6 +38,7 @@ public class PodToMemberContext implements Function<Pod, MemberContext> {
         memberContext.setMemberId(pod.getId());
         memberContext.setPrivateIpAddress(pod.getCurrentState().getHostIP());
         memberContext.setPublicIpAddress(pod.getCurrentState().getHostIP());
+        memberContext.setInitTime(System.currentTimeMillis());
         
         return memberContext;
     }


[33/50] [abbrv] git commit: Implement terminateContainer API passing a member ID.

Posted by ni...@apache.org.
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/6e0efc0c
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/6e0efc0c
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/6e0efc0c

Branch: refs/heads/master
Commit: 6e0efc0cda0e6b14c113e173ca7712ac91cf66a7
Parents: 98ccb70
Author: Nirmal Fernando <ni...@gmail.com>
Authored: Fri Oct 10 09:48:19 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:57 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/6e0efc0c/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/6e0efc0c/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/6e0efc0c/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.


[04/50] [abbrv] git commit: Bundling kubernetes client as an OSGi bundle to CC feature.

Posted by ni...@apache.org.
Bundling kubernetes client as an OSGi bundle to CC feature.


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

Branch: refs/heads/master
Commit: 6780187a90c64174419ad58402d036c4a4c3ec0d
Parents: b14a5c0
Author: Nirmal Fernando <ni...@gmail.com>
Authored: Wed Oct 8 19:06:37 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:55 2014 +0530

----------------------------------------------------------------------
 .../pom.xml                                      | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/6780187a/features/cloud-controller/org.apache.stratos.cloud.controller.feature/pom.xml
----------------------------------------------------------------------
diff --git a/features/cloud-controller/org.apache.stratos.cloud.controller.feature/pom.xml b/features/cloud-controller/org.apache.stratos.cloud.controller.feature/pom.xml
index c2e08af..253a8b9 100644
--- a/features/cloud-controller/org.apache.stratos.cloud.controller.feature/pom.xml
+++ b/features/cloud-controller/org.apache.stratos.cloud.controller.feature/pom.xml
@@ -38,6 +38,21 @@
             <artifactId>org.apache.stratos.cloud.controller</artifactId>
             <version>${project.version}</version>
         </dependency>
+	<dependency>
+            <groupId>org.apache.stratos</groupId>
+            <artifactId>org.apache.stratos.kubernetes.client</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+	<dependency>
+	   <groupId>org.apache.httpcomponents.wso2</groupId>
+			<artifactId>httpcore</artifactId>
+			<version>4.3.0.wso2v1</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.httpcomponents.wso2</groupId>
+			<artifactId>httpclient</artifactId>
+			<version>4.2.5.wso2v1</version>
+		</dependency>
         <dependency>
             <groupId>com.google.guava</groupId>
             <artifactId>guava</artifactId>
@@ -273,6 +288,8 @@
                             <bundles>
                                 <bundleDef>org.apache.stratos:org.apache.stratos.cloud.controller:${project.version}
                                 </bundleDef>
+                                <bundleDef>org.apache.stratos:org.apache.stratos.kubernetes.client:${project.version}
+                                </bundleDef>
                                 <bundleDef>org.apache.jclouds.driver:jclouds-bouncycastle:${jclouds.version}</bundleDef>
                                 <bundleDef>org.apache.jclouds.driver:jclouds-sshj:${jclouds.version}</bundleDef>
                                 <!--bundleDef>org.apache.jclouds.driver:jclouds-log4j:${jclouds.version}</bundleDef-->
@@ -327,6 +344,8 @@
                                 </bundleDef>
                                 <bundleDef>jdom.wso2:jdom:1.0.0.wso2v1</bundleDef>
                                 <bundleDef>org.json.wso2:json:1.0.0.wso2v1</bundleDef>
+                                <bundleDef>org.apache.httpcomponents.wso2:httpcore:4.3.0.wso2v1</bundleDef>
+                                <bundleDef>org.apache.httpcomponents.wso2:httpclient:4.2.5.wso2v1</bundleDef>
                                 <!--bundleDef>org.jaggeryjs:0.9.0.ALPHA2-wso2v2</bundleDef-->
                                 <bundleDef>org.apache.jclouds.api:sts:${jclouds.version}</bundleDef>
                                 <bundleDef>javax.ws.rs:jsr311-api:1.1.1</bundleDef>


[39/50] [abbrv] git commit: Changes to member context removal logic.

Posted by ni...@apache.org.
Changes to member context removal logic.


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

Branch: refs/heads/master
Commit: e3d528fba197536c62b076d51705f497f719ffc6
Parents: 8f9148d
Author: Nirmal Fernando <ni...@gmail.com>
Authored: Fri Oct 10 19:48:30 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:58 2014 +0530

----------------------------------------------------------------------
 .../runtime/FasterLookUpDataHolder.java         | 69 +++++++++++++++-----
 1 file changed, 51 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/e3d528fb/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/runtime/FasterLookUpDataHolder.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/runtime/FasterLookUpDataHolder.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/runtime/FasterLookUpDataHolder.java
index a8c47ce..2a83908 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/runtime/FasterLookUpDataHolder.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/runtime/FasterLookUpDataHolder.java
@@ -32,6 +32,7 @@ import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledFuture;
 
 /**
  * This object holds all runtime data and provides faster access. This is a Singleton class.
@@ -60,6 +61,12 @@ public class FasterLookUpDataHolder implements Serializable{
 	private Map<String, MemberContext> memberIdToContext = new ConcurrentHashMap<String, MemberContext>();
 	
 	/**
+     * Key - member id
+     * Value - ScheduledFuture task
+     */
+    private transient Map<String, ScheduledFuture<?>> memberIdToScheduledTask = new ConcurrentHashMap<String, ScheduledFuture<?>>();
+	
+	/**
 	 * Key - Kubernetes cluster id
 	 * Value - {@link KubernetesClusterContext}
 	 */
@@ -278,42 +285,60 @@ public class FasterLookUpDataHolder implements Serializable{
         }
     }
     
-    public void removeMemberContextsOfCluster(String clusterId) {
+    public void addScheduledFutureJob(String memberId, ScheduledFuture<?> job) {
+        memberIdToScheduledTask.put(memberId, job);
+    }
+    
+    public List<MemberContext> removeMemberContextsOfCluster(String clusterId) {
         List<MemberContext> ctxts = clusterIdToMemberContext.remove(clusterId);
         if(ctxts == null) {
-            return;
+            return new ArrayList<MemberContext>();
         }
         for (MemberContext memberContext : ctxts) {
             String memberId = memberContext.getMemberId();
             memberIdToContext.remove(memberId);
+            stopTask(memberIdToScheduledTask.remove(memberId));
         }
         if(log.isDebugEnabled()) {
         	
         	log.debug("Removed Member Context from the information model. "+ctxt);
         }
+        return ctxts;
     }
     
-    public void removeMemberContext(String memberId, String clusterId) {
-    	memberIdToContext.remove(memberId);
+    public MemberContext removeMemberContext(String memberId, String clusterId) {
+    	MemberContext returnedCtxt = memberIdToContext.remove(memberId);
         List<MemberContext> ctxts = clusterIdToMemberContext.get(clusterId);
-        if(ctxts == null) {
-            return;
+
+        if (ctxts != null) {
+            
+            List<MemberContext> newCtxts =  new ArrayList<MemberContext>(ctxts);
+            
+            for (Iterator<MemberContext> iterator = newCtxts.iterator(); iterator.hasNext();) {
+                MemberContext memberContext = (MemberContext) iterator.next();
+                if(memberId.equals(memberContext.getMemberId())) {
+                    if(log.isDebugEnabled()) {
+                        
+                        log.debug("MemberContext [id]: "+memberId+" removed from information model.");
+                    }
+                    iterator.remove();
+                }
+            }
+            
+            clusterIdToMemberContext.put(clusterId, newCtxts);
         }
         
-        List<MemberContext> newCtxts =  new ArrayList<MemberContext>(ctxts);
+        stopTask(memberIdToScheduledTask.remove(memberId));
         
-        for (Iterator<MemberContext> iterator = newCtxts.iterator(); iterator.hasNext();) {
-			MemberContext memberContext = (MemberContext) iterator.next();
-			if(memberId.equals(memberContext.getMemberId())) {
-				if(log.isDebugEnabled()) {
-					
-					log.debug("MemberContext [id]: "+memberId+" removed from information model.");
-				}
-            	iterator.remove();
-            }
-		}
+        return returnedCtxt;
         
-        clusterIdToMemberContext.put(clusterId, newCtxts);
+    }
+    
+    private void stopTask(ScheduledFuture<?> task) {
+        if (task != null) {
+            
+            task.cancel(true);
+        }
     }
     
     public MemberContext getMemberContextOfMemberId(String memberId) {
@@ -408,5 +433,13 @@ public class FasterLookUpDataHolder implements Serializable{
 			Map<String, KubernetesClusterContext> kubClusterIdToKubClusterContext) {
 		this.kubClusterIdToKubClusterContext = kubClusterIdToKubClusterContext;
 	}
+
+    public Map<String, ScheduledFuture<?>> getMemberIdToScheduledTask() {
+        return memberIdToScheduledTask;
+    }
+
+    public void setMemberIdToScheduledTask(Map<String, ScheduledFuture<?>> memberIdToScheduledTask) {
+        this.memberIdToScheduledTask = memberIdToScheduledTask;
+    }
 	
 }
\ No newline at end of file


[18/50] [abbrv] git commit: reading hostname from container for memberId

Posted by ni...@apache.org.
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/0e605f54
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/0e605f54
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/0e605f54

Branch: refs/heads/master
Commit: 0e605f5485706fa6d3d84d97ea8b138a5e11295b
Parents: d285423
Author: R-Rajkumar <rr...@gmail.com>
Authored: Thu Oct 9 17:11:53 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:56 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/0e605f54/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/0e605f54/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/0e605f54/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/0e605f54/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;
 	}


[38/50] [abbrv] git commit: Return terminated members when scaling down and also send member terminated event.

Posted by ni...@apache.org.
Return terminated members when scaling down and also send member terminated event.


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

Branch: refs/heads/master
Commit: b0fd7b61e518aadfdfb8548ebca1527920104fe6
Parents: 6cc484f
Author: Nirmal Fernando <ni...@gmail.com>
Authored: Sat Oct 11 07:50:29 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:58 2014 +0530

----------------------------------------------------------------------
 .../impl/CloudControllerServiceImpl.java        | 27 +++++++++++++++++---
 .../runtime/FasterLookUpDataHolder.java         |  1 +
 2 files changed, 25 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/b0fd7b61/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 a9a72cb..6717f74 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
@@ -21,7 +21,9 @@ package org.apache.stratos.cloud.controller.impl;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.net.InetAddresses;
 
+import org.apache.commons.collections.ListUtils;
 import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.cloud.controller.concurrent.PartitionValidatorCallable;
@@ -1674,6 +1676,12 @@ public class CloudControllerServiceImpl implements CloudControllerService {
             }
             
             KubernetesApiClient kubApi = kubClusterContext.getKubApi();
+            // create a label query
+            Label l = new Label();
+            l.setName(clusterId);
+            
+            // get the current pods - useful when scale down
+            Pod[] previousStatePods = kubApi.getSelectedPods(new Label[]{l});
             
             // update the replication controller - cluster id = replication controller id
             if (LOG.isDebugEnabled()) {
@@ -1688,9 +1696,6 @@ public class CloudControllerServiceImpl implements CloudControllerService {
                         + clusterId + " via Kubernetes layer.");
             }
             
-            // create a label query
-            Label l = new Label();
-            l.setName(clusterId);
             // execute the label query
             Pod[] allPods = new Pod[0];
             
@@ -1719,6 +1724,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
             // generate Member Contexts
             for (Pod pod : allPods) {
                 MemberContext context;
+                // if member context does not exist -> a new member (scale up)
                 if ((context = dataHolder.getMemberContextOfMemberId(pod.getId())) == null) {
                     
                     context = podToMemberContextFunc.apply(pod);
@@ -1737,6 +1743,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
                     dataHolder.addScheduledFutureJob(context.getMemberId(), exec.schedule(new PodActivationWatcher(pod.getId(), context, kubApi), 5000));
                     
                     memberContexts.add(context);
+                    
                 }
                 // publish data
                 // TODO
@@ -1744,6 +1751,20 @@ public class CloudControllerServiceImpl implements CloudControllerService {
                 
             }
             
+            if (memberContexts.isEmpty()) {
+                // terminated members
+                @SuppressWarnings("unchecked")
+                List<Pod> difference = ListUtils.subtract(Arrays.asList(previousStatePods), Arrays.asList(allPods));
+                for (Pod pod : difference) {
+                    if (pod != null) {
+                        MemberContext context = dataHolder.getMemberContextOfMemberId(pod.getId());
+                        logTermination(context);
+                        memberContexts.add(context);
+                    }
+                }
+            }
+            
+            
             // persist in registry
             persist();
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/b0fd7b61/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/runtime/FasterLookUpDataHolder.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/runtime/FasterLookUpDataHolder.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/runtime/FasterLookUpDataHolder.java
index 2a83908..199f9c8 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/runtime/FasterLookUpDataHolder.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/runtime/FasterLookUpDataHolder.java
@@ -338,6 +338,7 @@ public class FasterLookUpDataHolder implements Serializable{
         if (task != null) {
             
             task.cancel(true);
+            log.info("Scheduled Pod Activation Watcher task canceled.");
         }
     }
     


[07/50] [abbrv] git commit: Adding Kubernetes response handler and a kubernetes response class to handle http responses.

Posted by ni...@apache.org.
Adding Kubernetes response handler and a kubernetes response class to handle http responses.


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

Branch: refs/heads/master
Commit: 8635c6f261803268ab99b64c3fa274b9f95f59cf
Parents: 7d89126
Author: Nirmal Fernando <ni...@gmail.com>
Authored: Wed Oct 8 18:51:38 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:55 2014 +0530

----------------------------------------------------------------------
 .../client/rest/KubernetesResponse.java         | 56 +++++++++++++++
 .../client/rest/KubernetesResponseHandler.java  | 71 ++++++++++++++++++++
 2 files changed, 127 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/8635c6f2/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/rest/KubernetesResponse.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/rest/KubernetesResponse.java b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/rest/KubernetesResponse.java
new file mode 100644
index 0000000..e8f17c3
--- /dev/null
+++ b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/rest/KubernetesResponse.java
@@ -0,0 +1,56 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.stratos.kubernetes.client.rest;
+
+/**
+ * Holds the data extracted from a HttpResponse.
+ */
+public class KubernetesResponse {
+
+	private int statusCode;
+	private String content;
+	private String reason;
+	
+    public int getStatusCode() {
+        return statusCode;
+    }
+    public void setStatusCode(int statusCode) {
+        this.statusCode = statusCode;
+    }
+    public String getContent() {
+        return content;
+    }
+    public void setContent(String content) {
+        this.content = content;
+    }
+    public String getReason() {
+        return reason;
+    }
+    public void setReason(String reason) {
+        this.reason = reason;
+    }
+    @Override
+    public String toString() {
+        return "KubernetesResponse [statusCode=" + statusCode + ", content=" + content
+                + ", reason=" + reason + "]";
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/8635c6f2/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/rest/KubernetesResponseHandler.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/rest/KubernetesResponseHandler.java b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/rest/KubernetesResponseHandler.java
new file mode 100644
index 0000000..da6aa90
--- /dev/null
+++ b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/rest/KubernetesResponseHandler.java
@@ -0,0 +1,71 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.stratos.kubernetes.client.rest;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.StatusLine;
+import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.HttpResponseException;
+import org.apache.http.client.ResponseHandler;
+
+/**
+ * Handles a HttpResponse and returns a {@link KubernetesResponse}
+ */
+public class KubernetesResponseHandler implements ResponseHandler<KubernetesResponse>{
+
+    @Override
+    public KubernetesResponse handleResponse(HttpResponse response) throws ClientProtocolException,
+            IOException {
+        StatusLine statusLine = response.getStatusLine();
+        HttpEntity entity = response.getEntity();
+        if (statusLine.getStatusCode() >= 300) {
+            throw new HttpResponseException(
+                    statusLine.getStatusCode(),
+                    statusLine.getReasonPhrase());
+        }
+        if (entity == null) {
+            throw new ClientProtocolException("Response contains no content");
+        }
+        
+        BufferedReader reader = new BufferedReader(new InputStreamReader(
+                (response.getEntity().getContent())));
+
+        String output;
+        String result = "";
+
+        while ((output = reader.readLine()) != null) {
+            result += output;
+        }
+        
+        KubernetesResponse kubResponse = new KubernetesResponse();
+        kubResponse.setStatusCode(statusLine.getStatusCode());
+        kubResponse.setContent(result);
+        kubResponse.setReason(statusLine.getReasonPhrase());
+        
+        return kubResponse;
+    }
+
+
+}


[17/50] [abbrv] git commit: calling createContainers() from drool

Posted by ni...@apache.org.
calling createContainers() from drool


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

Branch: refs/heads/master
Commit: a7c013495692b0450a6509256af2f84919144840
Parents: 0e605f5
Author: R-Rajkumar <rr...@gmail.com>
Authored: Thu Oct 9 18:57:43 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:56 2014 +0530

----------------------------------------------------------------------
 .../KubernetesServiceClusterMonitor.java        | 50 +-------------------
 .../autoscaler/rule/RuleTasksDelegator.java     | 10 ++--
 .../src/main/conf/container-mincheck.drl        | 14 ++++--
 .../src/main/conf/container-scaling.drl         |  4 +-
 4 files changed, 19 insertions(+), 59 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/a7c01349/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 068f21e..fdff259 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
@@ -22,13 +22,10 @@ import org.apache.commons.configuration.XMLConfiguration;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.autoscaler.KubernetesClusterContext;
-import org.apache.stratos.autoscaler.client.cloud.controller.CloudControllerClient;
-import org.apache.stratos.autoscaler.exception.SpawningException;
 import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy;
 import org.apache.stratos.autoscaler.rule.AutoscalerRuleEvaluator;
 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.ClusterStatus;
 
@@ -75,51 +72,8 @@ public final class KubernetesServiceClusterMonitor extends KubernetesClusterMoni
 
     @Override
     protected void monitor() {
-
-        String kubernetesClusterId = getKubernetesClusterCtxt().getKubernetesClusterID();
-        int activeMembers = getKubernetesClusterCtxt().getActiveMembers().size();
-        int pendingMembers = getKubernetesClusterCtxt().getPendingMembers().size();
-        int nonTerminatedMembers = getKubernetesClusterCtxt().getNonTerminatedMemberCount();
-        log.info(KubernetesServiceClusterMonitor.class.getName()+" is running.... Active Members: "+activeMembers
-                + " Pending Members: "+pendingMembers);
-        
-        if (nonTerminatedMembers == 0) {
-            try {
-                CloudControllerClient ccClient = CloudControllerClient.getInstance();
-                MemberContext[] memberContexts = ccClient.createContainers(kubernetesClusterId,
-                        getClusterId());
-                for (MemberContext memberContext : memberContexts) {
-
-                    if (null != memberContext) {
-                        getKubernetesClusterCtxt().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 (SpawningException spawningException) {
-                if (log.isDebugEnabled()) {
-                    String message = "Cannot create containers, will retry in "
-                            + (getMonitorIntervalMilliseconds() / 1000) + "s";
-                    log.debug(message, spawningException);
-                }
-            } catch (Exception exception) {
-                if (log.isDebugEnabled()) {
-                    String message = "Error while creating containers, will retry in "
-                            + (getMonitorIntervalMilliseconds() / 1000) + "s";
-                    log.debug(message, exception);
-                }
-            }
-		} else {
-	        minCheck();
-	        scaleCheck();
-		}
+        minCheck();
+        scaleCheck();
     }
 
     private void scaleCheck() {

http://git-wip-us.apache.org/repos/asf/stratos/blob/a7c01349/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 b062913..416aa31 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
@@ -202,12 +202,11 @@ public class RuleTasksDelegator {
    	
    	public void delegateCreateContainers(KubernetesClusterContext  kubernetesClusterContext) {
         try {
+        	String kubernetesClusterId = kubernetesClusterContext.getKubernetesClusterID();
+        	String clusterId = kubernetesClusterContext.getClusterId();
             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()) {
@@ -221,12 +220,13 @@ public class RuleTasksDelegator {
                     }
                 }
             }
-        } catch (Exception e) {
+        } catch (Throwable e) {
             log.error("Cannot create containers ", e);
         }
    	}
 
-    public void delegateExpandCluster(String clusterId, int replicas) {
+    public void delegateExpandCluster(KubernetesClusterContext kubernetesClusterContext, int replicas) {
+    	String clusterId = kubernetesClusterContext.getClusterId();
         try {
             CloudControllerClient.getInstance().updateKubernetesController(clusterId, replicas);
         } catch (Throwable e) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/a7c01349/products/stratos/modules/distribution/src/main/conf/container-mincheck.drl
----------------------------------------------------------------------
diff --git a/products/stratos/modules/distribution/src/main/conf/container-mincheck.drl b/products/stratos/modules/distribution/src/main/conf/container-mincheck.drl
index edea3cf..9c3cf0f 100644
--- a/products/stratos/modules/distribution/src/main/conf/container-mincheck.drl
+++ b/products/stratos/modules/distribution/src/main/conf/container-mincheck.drl
@@ -39,10 +39,16 @@ dialect "mvel"
 				+ " [cluster] " + clusterId + " Non terminated member count: " + nonTerminatedReplicas))
 	   eval(log.debug("[min-check] [kub-cluster] " + kubernetesClusterId
 				+ " [cluster] " + clusterId + " Minimum member count: " + minReplicas))
-	   eval (nonTerminatedReplicas < minReplicas)
+	   eval(nonTerminatedReplicas < minReplicas)
        then
-           log.info("[min-check] [kub-cluster] " + kubernetesClusterId
-	        		+ " [cluster] " + clusterId + " : min-rule not satisfied, creating more containers")
-           $delegator.delegateExpandCluster($kubernetesClusterContext.getClusterId(), minReplicas);
+           if (nonTerminatedReplicas == 0) {
+             log.info("[min-check] [kub-cluster] " + kubernetesClusterId
+	        		+ " [cluster] " + clusterId + " : min-rule not satisfied, no containers created yet, creating minReplicas : " + minReplicas);
+             $delegator.delegateCreateContainers($kubernetesClusterContext);
+	   } else {
+             log.info("[min-check] [kub-cluster] " + kubernetesClusterId
+	        		+ " [cluster] " + clusterId + " : min-rule not satisfied, expanding cluster to minReplicas : " + minReplicas);
+             $delegator.delegateExpandCluster($kubernetesClusterContext, minReplicas);
+           }
 end
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/a7c01349/products/stratos/modules/distribution/src/main/conf/container-scaling.drl
----------------------------------------------------------------------
diff --git a/products/stratos/modules/distribution/src/main/conf/container-scaling.drl b/products/stratos/modules/distribution/src/main/conf/container-scaling.drl
index c773264..6f20274 100644
--- a/products/stratos/modules/distribution/src/main/conf/container-scaling.drl
+++ b/products/stratos/modules/distribution/src/main/conf/container-scaling.drl
@@ -136,11 +136,11 @@ dialect "mvel"
             }
             //expand the cluster
 	    log.info("[scaling] " + " [cluster] " + clusterId + " valid number of replicas to expand : " + requiredReplicas);
-	    $delegator.delegateExpandCluster(clusterId, requiredReplicas);
+	    $delegator.delegateExpandCluster($kubernetesClusterContext, requiredReplicas);
         } else if (scaleDown) {
             log.debug("[scale-down] Decided to scale down : [kub-cluster] " + kubernetesClusterId + " [cluster] " + clusterId);
             //shrink the cluster to minReplicas
-            $delegator.delegateExpandCluster(clusterId, minReplicas);
+            $delegator.delegateExpandCluster($kubernetesClusterContext, minReplicas);
         } else {
             log.debug("[scaling] No decision made to either scale up or down ... ");
         }


[48/50] [abbrv] git commit: Make pod activation error log to just print error message as it clutters the log due to the frequency, and print the full log on debug.

Posted by ni...@apache.org.
Make pod activation error log to just print error message as it clutters the log due to the frequency, and print the full log on debug.


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

Branch: refs/heads/master
Commit: edc243e9d1fc1a821c1887ee0e6e8432abc1a425
Parents: 06b1675
Author: Nirmal Fernando <ni...@gmail.com>
Authored: Sat Oct 11 09:10:38 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:58 2014 +0530

----------------------------------------------------------------------
 .../stratos/cloud/controller/util/PodActivationWatcher.java   | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/edc243e9/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/PodActivationWatcher.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/PodActivationWatcher.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/PodActivationWatcher.java
index 672cfeb..23924b4 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/PodActivationWatcher.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/PodActivationWatcher.java
@@ -67,7 +67,12 @@ public class PodActivationWatcher implements Runnable {
             }
             
         } catch (Exception e) {
-            LOG.error("Container Activation Watcher Failed.. ", e);
+            // not logging exception intentionally
+            LOG.error("Container Activation Watcher Failed.. Cause: "+e.getMessage());
+            
+            if (LOG.isDebugEnabled()) {
+                LOG.debug(e);
+            }
         }
         
     }


[32/50] [abbrv] git commit: Updating CC wsdl based on the latest API changes.

Posted by ni...@apache.org.
Updating CC wsdl based on the latest API changes.


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

Branch: refs/heads/master
Commit: 192228ede698a33626384463dd00b89ca2d5aa98
Parents: 63d5cec
Author: Nirmal Fernando <ni...@gmail.com>
Authored: Thu Oct 9 19:05:48 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:57 2014 +0530

----------------------------------------------------------------------
 .../main/resources/CloudControllerService.wsdl  | 890 ++++++++++---------
 1 file changed, 455 insertions(+), 435 deletions(-)
----------------------------------------------------------------------



[50/50] [abbrv] git commit: Fixing a build failure.

Posted by ni...@apache.org.
Fixing a build failure.


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

Branch: refs/heads/master
Commit: aa06b1a95e5d430ac3b7364d9359d58c188d3dfe
Parents: 530a166
Author: Nirmal Fernando <ni...@gmail.com>
Authored: Sat Oct 11 09:42:06 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:42:06 2014 +0530

----------------------------------------------------------------------
 .../main/java/org/apache/stratos/cli/StratosApplication.java   | 2 +-
 .../stratos/cli/commands/UnDeployKubernetesGroupCommand.java   | 6 +++---
 2 files changed, 4 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/aa06b1a9/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/StratosApplication.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/StratosApplication.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/StratosApplication.java
index b76edcb..349b334 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/StratosApplication.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/StratosApplication.java
@@ -195,7 +195,7 @@ public class StratosApplication extends CommandLineApplication<StratosCommandCon
         command = new DeployKubernetesHostCommand();
         commands.put(command.getName(), command);
 
-        command = new UndeployKubernetesGroupCommand();
+        command = new UnDeployKubernetesGroupCommand();
         commands.put(command.getName(), command);
 
         command = new UndeployKubernetesHostCommand();

http://git-wip-us.apache.org/repos/asf/stratos/blob/aa06b1a9/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UnDeployKubernetesGroupCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UnDeployKubernetesGroupCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UnDeployKubernetesGroupCommand.java
index ffa8be2..96b81e8 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UnDeployKubernetesGroupCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/UnDeployKubernetesGroupCommand.java
@@ -33,11 +33,11 @@ import java.io.IOException;
 /**
  * Un-deploy kubernetes group command.
  */
-public class UndeployKubernetesGroupCommand implements Command<StratosCommandContext> {
+public class UnDeployKubernetesGroupCommand implements Command<StratosCommandContext> {
 
-    private static final Logger logger = LoggerFactory.getLogger(UndeployKubernetesGroupCommand.class);
+    private static final Logger logger = LoggerFactory.getLogger(UnDeployKubernetesGroupCommand.class);
 
-    public UndeployKubernetesGroupCommand() {
+    public UnDeployKubernetesGroupCommand() {
     }
 
     @Override


[12/50] [abbrv] git commit: Excluding incorrect http client versions from stratos product and removing unused jars.

Posted by ni...@apache.org.
Excluding incorrect http client versions from stratos product and removing unused jars.


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

Branch: refs/heads/master
Commit: faf532ce4ee61fc7e1669860088a74ceb0d81c47
Parents: 6780187
Author: Nirmal Fernando <ni...@gmail.com>
Authored: Wed Oct 8 19:09:13 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:55 2014 +0530

----------------------------------------------------------------------
 products/stratos/modules/distribution/src/assembly/bin.xml | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/faf532ce/products/stratos/modules/distribution/src/assembly/bin.xml
----------------------------------------------------------------------
diff --git a/products/stratos/modules/distribution/src/assembly/bin.xml b/products/stratos/modules/distribution/src/assembly/bin.xml
index e244ea4..a318f5c 100755
--- a/products/stratos/modules/distribution/src/assembly/bin.xml
+++ b/products/stratos/modules/distribution/src/assembly/bin.xml
@@ -72,6 +72,8 @@
 		<exclude>**/marshalling_1.3.6.wso2v1.jar</exclude>
 		<exclude>**/jboss-transaction-api_1.1_spec-1.0.0.Final.jar</exclude>
 		<exclude>**/org.wso2.carbon.ui_4.2.0.jar</exclude>
+		<exclude>**/httpclient_4.1.1.wso2v1.jar</exclude>
+		<exclude>**/httpcore_4.1.0.wso2v1.jar</exclude>
 	    </excludes>
 	</fileSet>
 
@@ -605,10 +607,6 @@
                 <include>org.apache.geronimo.specs:geronimo-j2ee-management_1.1_spec:jar</include>
                 <include>org.fusesource.hawtbuf:hawtbuf:jar</include>
                 <include>org.eclipse.paho:mqtt-client:jar</include>
-  		<include>org.apache.stratos:org.apache.stratos.kubernetes.client:jar</include>
-		<include>org.jboss.resteasy:resteasy-jaxrs:jar</include>
-		<include>org.jboss.resteasy:resteasy-jaxb-provider:jar</include>
-		<include>org.jboss.resteasy:resteasy-jackson-provider:jar</include>
             </includes>
         </dependencySet>
         <dependencySet>


[03/50] [abbrv] git commit: Temporarily fixing Kubernetes cluster monitor to work with new CC APIs.

Posted by ni...@apache.org.
Temporarily fixing Kubernetes cluster monitor to work with new CC APIs.


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

Branch: refs/heads/master
Commit: c02907b7b172611d42dafaa2a149d7f0e7994b1a
Parents: faf532c
Author: Nirmal Fernando <ni...@gmail.com>
Authored: Wed Oct 8 19:11:43 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:55 2014 +0530

----------------------------------------------------------------------
 .../cloud/controller/CloudControllerClient.java |  2 +-
 .../KubernetesServiceClusterMonitor.java        | 61 +++++++++++---------
 2 files changed, 36 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/c02907b7/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
index 296182f..eaa80c4 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
@@ -238,7 +238,7 @@ public class CloudControllerClient {
      * @return
      * @throws SpawningException
      */
-    public synchronized MemberContext[] createContainer(String kubernetesClusterId, String clusterId) throws SpawningException {
+    public synchronized MemberContext[] createContainers(String kubernetesClusterId, String clusterId) throws SpawningException {
         try {
         	
         	KubernetesManager kubernetesManager = KubernetesManager.getInstance();

http://git-wip-us.apache.org/repos/asf/stratos/blob/c02907b7/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 6e14ce0..6362fc4 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
@@ -91,49 +91,58 @@ public final class KubernetesServiceClusterMonitor extends KubernetesClusterMoni
             TopologyManager.releaseReadLock();
         }
 
-        // is container created successfully?
-        boolean success = false;
         String kubernetesClusterId = getKubernetesClusterCtxt().getKubernetesClusterID();
         int activeMembers = getKubernetesClusterCtxt().getActiveMembers().size();
         int pendingMembers = getKubernetesClusterCtxt().getPendingMembers().size();
         int nonTerminatedMembers = activeMembers + pendingMembers;
+        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 {
+            try {
+                CloudControllerClient ccClient = CloudControllerClient.getInstance();
+                MemberContext[] memberContexts = ccClient.createContainers(kubernetesClusterId,
+                        getClusterId());
+                for (MemberContext memberContext : memberContexts) {
 
-        if (nonTerminatedMembers == 0) {
-            while (!success) {
-                try {
-                    CloudControllerClient ccClient = CloudControllerClient.getInstance();
-                    MemberContext memberContext = ccClient.createContainer(kubernetesClusterId, getClusterId());
                     if (null != memberContext) {
                         getKubernetesClusterCtxt().addPendingMember(memberContext);
-                        success = true;
-                        numberOfReplicasInServiceCluster = minReplicas;
                         if (log.isDebugEnabled()) {
-                            log.debug(String.format("Pending member added, [member] %s [kub cluster] %s",
-                                                    memberContext.getMemberId(), kubernetesClusterId));
+                            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 (SpawningException spawningException) {
-                    if (log.isDebugEnabled()) {
-                        String message = "Cannot create containers, will retry in "
-                                         + (retryInterval / 1000) + "s";
-                        log.debug(message, spawningException);
-                    }
-                } catch (Exception exception) {
-                    if (log.isDebugEnabled()) {
-                        String message = "Error while creating containers, will retry in "
-                                         + (retryInterval / 1000) + "s";
-                        log.debug(message, exception);
-                    }
                 }
-                try {
-                    Thread.sleep(retryInterval);
-                } catch (InterruptedException ignored) {
+            } catch (SpawningException spawningException) {
+                if (log.isDebugEnabled()) {
+                    String message = "Cannot create containers, will retry in "
+                            + (retryInterval / 1000) + "s";
+                    log.debug(message, spawningException);
+                }
+            } catch (Exception exception) {
+                if (log.isDebugEnabled()) {
+                    String message = "Error while creating containers, will retry in "
+                            + (retryInterval / 1000) + "s";
+                    log.debug(message, exception);
                 }
             }
+            try {
+                Thread.sleep(retryInterval);
+            } catch (InterruptedException ignored) {
+            }
         }
     }
 


[23/50] [abbrv] git commit: Few improvements; checking Pod creation & wait till pods getting created, terminate Pods forcefully to make sure Pods are not running.

Posted by ni...@apache.org.
Few improvements; checking Pod creation & wait till pods getting created, terminate Pods forcefully to make sure Pods are not running.


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

Branch: refs/heads/master
Commit: 742a08d787557982bac929e64e7ca27a346c5ca4
Parents: 78497e8
Author: Nirmal Fernando <ni...@gmail.com>
Authored: Wed Oct 8 22:21:05 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:56 2014 +0530

----------------------------------------------------------------------
 .../impl/CloudControllerServiceImpl.java        | 50 ++++++++++++++++----
 1 file changed, 42 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/742a08d7/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 4042140..da96ab0 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
@@ -1372,7 +1372,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
         }
 
         try {
-            validateProperty(StratosConstants.KUBERNETES_MIN_REPLICAS, ctxt);
+            String minReplicas = validateProperty(StratosConstants.KUBERNETES_MIN_REPLICAS, ctxt);
             String kubernetesClusterId = validateProperty(StratosConstants.KUBERNETES_CLUSTER_ID, ctxt);
             String kubernetesMasterIp = validateProperty(StratosConstants.KUBERNETES_MASTER_IP, containerClusterContext);
             String kubernetesPortRange = validateProperty(StratosConstants.KUBERNETES_PORT_RANGE, containerClusterContext);
@@ -1408,19 +1408,30 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 			
 			kubApi.createService(service);
 			
+			// set host port
+			ctxt.addProperty(StratosConstants.ALLOCATED_SERVICE_HOST_PORT, service.getPort());
+			
 			if (log.isDebugEnabled()) {
 				log.debug("Cloud Controller successfully started the service "
 						+ controller + " via Kubernetes layer.");
 			}
 			
-			// needs to wait few seconds before running label queries
-			Thread.sleep(3000);
-			
 			// create a label query
 			Label l = new Label();
 			l.setName(clusterId);
 			// execute the label query
-			Pod[] newlyCreatedPods = kubApi.getSelectedPods(new Label[]{l});
+			Pod[] newlyCreatedPods = new Pod[0];
+			int expectedCount = Integer.parseInt(minReplicas);
+			
+			for (int i = 0; i < expectedCount ; i++) {
+			    newlyCreatedPods = kubApi.getSelectedPods(new Label[]{l});
+			    
+			    log.info("Pods "+newlyCreatedPods.length);
+			    if(newlyCreatedPods.length == expectedCount) {
+			        break;
+			    }
+			    Thread.sleep(5000);
+            }
 			
 			if (log.isDebugEnabled()) {
 			    
@@ -1436,10 +1447,10 @@ public class CloudControllerServiceImpl implements CloudControllerService {
                 context.setCartridgeType(cartridgeType);
                 context.setClusterId(clusterId);
                 
-                context.setProperties(CloudControllerUtil.addProperty(containerClusterContext
+                context.setProperties(CloudControllerUtil.addProperty(context
                         .getProperties(), StratosConstants.ALLOCATED_SERVICE_HOST_PORT,
-                        CloudControllerUtil.getProperty(ctxt.getProperties(),
-                                StratosConstants.ALLOCATED_SERVICE_HOST_PORT)));
+                        String.valueOf(service.getPort())));
+                
                 dataHolder.addMemberContext(context);
                 
                 // trigger topology
@@ -1565,6 +1576,29 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 			// we're not going to throw this error, but proceed with other deletions
 			log.error("Failed to update Kubernetes Controller with id: "+clusterId, e);
 		}
+		
+		// delete pods forcefully
+        try {
+            // create a label query
+            Label l = new Label();
+            l.setName(clusterId);
+            // execute the label query
+            Pod[] pods = kubApi.getSelectedPods(new Label[]{l});
+            
+            for (Pod pod : pods) {
+                try {
+                    // delete pods forcefully
+                    kubApi.deletePod(pod.getId());
+                } catch (KubernetesClientException ignore) {
+                    // we can't do nothing here
+                    log.warn(String.format("Failed to delete Pod [%s] forcefully!", pod.getId()));
+                }
+            }
+        } catch (KubernetesClientException e) {
+            // we're not going to throw this error, but proceed with other deletions
+            log.error("Failed to delete pods forcefully for cluster: "+clusterId, e);
+        }
+		
 		// delete the replication controller.
 		try {
 			kubApi.deleteReplicationController(clusterId);


[29/50] [abbrv] git commit: Fixing a minor sonar issue - using all-caps for static final variables.

Posted by ni...@apache.org.
Fixing a minor sonar issue - using all-caps for static final variables.


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

Branch: refs/heads/master
Commit: afb9daa44a2e29defdabbe1604dac39e925150df
Parents: f5c34c0
Author: Nirmal Fernando <ni...@gmail.com>
Authored: Thu Oct 9 18:57:35 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:57 2014 +0530

----------------------------------------------------------------------
 .../internal/CloudControllerDSComponent.java    | 30 +++++++++-----------
 1 file changed, 13 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/afb9daa4/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/internal/CloudControllerDSComponent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/internal/CloudControllerDSComponent.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/internal/CloudControllerDSComponent.java
index 24ca75c..934788f 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/internal/CloudControllerDSComponent.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/internal/CloudControllerDSComponent.java
@@ -59,7 +59,7 @@ import org.wso2.carbon.utils.ConfigurationContextService;
  */
 public class CloudControllerDSComponent {
 
-	private static final Log log = LogFactory
+	private static final Log LOG = LogFactory
 			.getLog(CloudControllerDSComponent.class);
 
 	protected void activate(ComponentContext context) {
@@ -84,37 +84,35 @@ public class CloudControllerDSComponent {
 			bundleContext.registerService(CloudControllerService.class.getName(),
 			                              new CloudControllerServiceImpl(), null);
 
-			if (log.isInfoEnabled()) {
-				log.info("Scheduling tasks");
+			if (LOG.isInfoEnabled()) {
+				LOG.info("Scheduling tasks");
 			}
 
 			TopologySynchronizerTaskScheduler.schedule(ServiceReferenceHolder
 					                                           .getInstance().getTaskService());
 
 		} catch (Throwable e) {
-			log.error(
-					"******* Cloud Controller Service bundle is failed to activate ****",
-					e);
+			LOG.error("Cloud Controller Service bundle is failed to activate.", e);
 		}
 	}
 
 	protected void setTaskService(TaskService taskService) {
-		if (log.isDebugEnabled()) {
-			log.debug("Setting the Task Service");
+		if (LOG.isDebugEnabled()) {
+			LOG.debug("Setting the Task Service");
 		}
 		ServiceReferenceHolder.getInstance().setTaskService(taskService);
 	}
 
 	protected void unsetTaskService(TaskService taskService) {
-		if (log.isDebugEnabled()) {
-			log.debug("Unsetting the Task Service");
+		if (LOG.isDebugEnabled()) {
+			LOG.debug("Unsetting the Task Service");
 		}
 		ServiceReferenceHolder.getInstance().setTaskService(null);
 	}
 
 	protected void setRegistryService(RegistryService registryService) {
-		if (log.isDebugEnabled()) {
-			log.debug("Setting the Registry Service");
+		if (LOG.isDebugEnabled()) {
+			LOG.debug("Setting the Registry Service");
 		}
 
 		try {
@@ -123,14 +121,14 @@ public class CloudControllerDSComponent {
 			ServiceReferenceHolder.getInstance().setRegistry(registry);
 		} catch (RegistryException e) {
 			String msg = "Failed when retrieving Governance System Registry.";
-			log.error(msg, e);
+			LOG.error(msg, e);
 			throw new CloudControllerException(msg, e);
 		}
 	}
 
 	protected void unsetRegistryService(RegistryService registryService) {
-		if (log.isDebugEnabled()) {
-			log.debug("Unsetting the Registry Service");
+		if (LOG.isDebugEnabled()) {
+			LOG.debug("Unsetting the Registry Service");
 		}
 		ServiceReferenceHolder.getInstance().setRegistry(null);
 	}
@@ -147,8 +145,6 @@ public class CloudControllerDSComponent {
 	}
 
 	protected void deactivate(ComponentContext ctx) {
-		// Close event publisher connections to message broker
-		// EventPublisherPool.close(Constants.TOPOLOGY_TOPIC);
 	}
 
 }


[45/50] [abbrv] git commit: deleting the service if the pods are not created within a period

Posted by ni...@apache.org.
deleting the service if the pods are not created within a period


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

Branch: refs/heads/master
Commit: 6cc484f40e4334859dc71cf1618d331049157d1a
Parents: f8353a6
Author: R-Rajkumar <rr...@gmail.com>
Authored: Fri Oct 10 22:52:10 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:58 2014 +0530

----------------------------------------------------------------------
 .../cloud/controller/impl/CloudControllerServiceImpl.java | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/6cc484f4/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 5194a76..a9a72cb 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
@@ -1426,8 +1426,16 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 			    if(newlyCreatedPods.length == expectedCount) {
 			        break;
 			    }
-			    Thread.sleep(5000);
+			    Thread.sleep(10000);
             }
+
+			if (newlyCreatedPods.length == 0) {
+				if (LOG.isDebugEnabled()) {
+					LOG.debug(String.format("Pods are not created for cluster : %s, hence deleting the service", clusterId));
+				}
+				terminateAllContainers(clusterId);
+				return new MemberContext[0];
+			}
 			
 			if (LOG.isDebugEnabled()) {
 			    


[02/50] [abbrv] git commit: Removing unused imports

Posted by ni...@apache.org.
Removing unused imports


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

Branch: refs/heads/master
Commit: fb53d22370729969560f9c4f2d0a1132f5b83e97
Parents: c02907b
Author: Nirmal Fernando <ni...@gmail.com>
Authored: Wed Oct 8 22:18:29 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:55 2014 +0530

----------------------------------------------------------------------
 .../functions/ContainerClusterContextToKubernetesContainer.java    | 1 -
 .../functions/ContainerClusterContextToKubernetesService.java      | 2 --
 .../functions/ContainerClusterContextToReplicationController.java  | 1 -
 3 files changed, 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/fb53d223/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToKubernetesContainer.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToKubernetesContainer.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToKubernetesContainer.java
index 7b940d9..8837406 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToKubernetesContainer.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToKubernetesContainer.java
@@ -26,7 +26,6 @@ import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.cloud.controller.pojo.Cartridge;
 import org.apache.stratos.cloud.controller.pojo.ClusterContext;
 import org.apache.stratos.cloud.controller.pojo.ContainerClusterContext;
-import org.apache.stratos.cloud.controller.pojo.MemberContext;
 import org.apache.stratos.cloud.controller.pojo.PortMapping;
 import org.apache.stratos.cloud.controller.pojo.Property;
 import org.apache.stratos.cloud.controller.runtime.FasterLookUpDataHolder;

http://git-wip-us.apache.org/repos/asf/stratos/blob/fb53d223/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToKubernetesService.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToKubernetesService.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToKubernetesService.java
index c515a3b..61fe0ee 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToKubernetesService.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToKubernetesService.java
@@ -21,7 +21,6 @@ package org.apache.stratos.cloud.controller.functions;
 import org.apache.stratos.cloud.controller.pojo.ClusterContext;
 import org.apache.stratos.cloud.controller.pojo.ContainerClusterContext;
 import org.apache.stratos.cloud.controller.pojo.KubernetesClusterContext;
-import org.apache.stratos.cloud.controller.pojo.MemberContext;
 import org.apache.stratos.cloud.controller.runtime.FasterLookUpDataHolder;
 import org.apache.stratos.cloud.controller.util.CloudControllerUtil;
 import org.apache.stratos.common.constants.StratosConstants;
@@ -54,7 +53,6 @@ public class ContainerClusterContextToKubernetesService implements Function<Cont
         service.setId(CloudControllerUtil.getCompatibleId(clusterId));
         service.setKind("Service");
         int hostPort = kubClusterContext.getAnAvailableHostPort();
-        clusterContext.addProperty(StratosConstants.ALLOCATED_SERVICE_HOST_PORT, hostPort);
         service.setPort(hostPort);
         Selector selector = new Selector();
         selector.setName(clusterId);

http://git-wip-us.apache.org/repos/asf/stratos/blob/fb53d223/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToReplicationController.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToReplicationController.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToReplicationController.java
index 08b7ab5..a60fd5c 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToReplicationController.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToReplicationController.java
@@ -20,7 +20,6 @@ package org.apache.stratos.cloud.controller.functions;
 
 import org.apache.stratos.cloud.controller.pojo.ClusterContext;
 import org.apache.stratos.cloud.controller.pojo.ContainerClusterContext;
-import org.apache.stratos.cloud.controller.pojo.MemberContext;
 import org.apache.stratos.cloud.controller.runtime.FasterLookUpDataHolder;
 import org.apache.stratos.cloud.controller.util.CloudControllerUtil;
 import org.apache.stratos.common.constants.StratosConstants;


[25/50] [abbrv] git commit: fixing drools logic and adding comments

Posted by ni...@apache.org.
fixing drools logic and adding comments


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

Branch: refs/heads/master
Commit: 67313a1eca106fb310a2061b1e46f5fbb03e4c5f
Parents: 7c072a9
Author: R-Rajkumar <rr...@gmail.com>
Authored: Fri Oct 10 10:38:43 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:57 2014 +0530

----------------------------------------------------------------------
 .../autoscaler/KubernetesClusterContext.java    | 12 ++++
 .../cloud/controller/CloudControllerClient.java | 22 +++---
 .../KubernetesServiceClusterMonitor.java        | 13 ++--
 .../autoscaler/rule/RuleTasksDelegator.java     | 71 ++++++++++++++------
 .../src/main/conf/container-mincheck.drl        | 23 ++++---
 .../src/main/conf/container-scaling.drl         | 27 ++++++--
 6 files changed, 114 insertions(+), 54 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/67313a1e/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 b75c0cc..0dfea0c 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
@@ -50,6 +50,10 @@ public class KubernetesClusterContext implements Serializable {
     private int minReplicas;
     private int maxReplicas = 10;
     private int currentReplicas = 0;
+    
+    // it will tell whether the startContainers() method succeed or not for the 1st time
+    // we should call startContainers() only once
+    private boolean isServiceClusterCreated = false;
 
     // properties
     private Properties properties;
@@ -647,4 +651,12 @@ public class KubernetesClusterContext implements Serializable {
 	public void setClusterId(String clusterId) {
 		this.clusterId = clusterId;
 	}
+
+	public boolean isServiceClusterCreated() {
+		return isServiceClusterCreated;
+	}
+
+	public void setServiceClusterCreated(boolean isServiceClusterCreated) {
+		this.isServiceClusterCreated = isServiceClusterCreated;
+	}
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/67313a1e/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
index b7a476a..ce69875 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
@@ -244,7 +244,7 @@ public class CloudControllerClient {
      * @return
      * @throws SpawningException
      */
-    public synchronized MemberContext[] createContainers(String kubernetesClusterId, String clusterId) throws SpawningException {
+    public synchronized MemberContext[] startContainers(String kubernetesClusterId, String clusterId) throws SpawningException {
         try {
         	
         	KubernetesManager kubernetesManager = KubernetesManager.getInstance();
@@ -310,22 +310,22 @@ public class CloudControllerClient {
 		} 
     }
 
-    public synchronized void updateKubernetesController(String clusterId, int replicas)
-            throws SpawningException {
+    public synchronized MemberContext[] updateContainers(String clusterId, int replicas)
+    		throws SpawningException {
         try {
             log.info(String.format("Updating kubernetes replication controller via cloud controller: " +
                                    "[cluster] %s [replicas] %s", clusterId, replicas));
-            stub.updateKubernetesController(clusterId, replicas);
+            MemberContext[] memberContexts = stub.updateContainers(clusterId, replicas);
+            return memberContexts;
+        } catch (CloudControllerServiceUnregisteredCartridgeExceptionException e) {
+            String msg = "Error while updating kubernetes controller, cartridge not found for [cluster] " + clusterId;
+            log.error(msg, e);
+            throw new SpawningException(msg, e);
         } catch (RemoteException e) {
             String msg = "Error while updating kubernetes controller, cannot communicate with " +
                          "cloud controller service";
             log.error(msg, e);
-            throw new SpawningException(e.getMessage(), e);
-        } catch (CloudControllerServiceInvalidClusterExceptionException e) {
-            String msg = "Error while updating kubernetes controller, invalid clusterId";
-            log.error(msg, e);
-            throw new SpawningException(e.getMessage(), e);
-        }
+            throw new SpawningException(msg, e);
+        } 
     }
-
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/67313a1e/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 fdff259..8bfc1a8 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
@@ -96,7 +96,7 @@ public final class KubernetesServiceClusterMonitor extends KubernetesClusterMoni
             getScaleCheckKnowledgeSession().setGlobal("laReset", loadAverageReset);
             if (log.isDebugEnabled()) {
                 log.debug(String.format(
-                        "Running scale check for kub-cluster %s ", kubernetesClusterID));
+                        "Running scale check for [kub-cluster] : %s [cluster] : %s ", kubernetesClusterID, getClusterId()));
             }
             scaleCheckFactHandle = AutoscalerRuleEvaluator.evaluateScaleCheck(
                     getScaleCheckKnowledgeSession(), scaleCheckFactHandle, getKubernetesClusterCtxt());
@@ -105,16 +105,17 @@ public final class KubernetesServiceClusterMonitor extends KubernetesClusterMoni
             getKubernetesClusterCtxt().setLoadAverageReset(false);
         } else if (log.isDebugEnabled()) {
             log.debug(String.format("Scale check will not run since none of the statistics have not received yet for "
-                                    + "[kub-cluster] %s [cluster] %s", kubernetesClusterID, clusterId));
+                                    + "[kub-cluster] : %s [cluster] : %s", kubernetesClusterID, clusterId));
         }
     }
 
 	private void minCheck() {
 		getMinCheckKnowledgeSession().setGlobal("clusterId", getClusterId());
-		if (log.isDebugEnabled()) {
-			log.debug(String.format("Running minimum check for cluster %s ",
-					getClusterId()));
-		}
+		String kubernetesClusterID = getKubernetesClusterCtxt().getKubernetesClusterID();
+        if (log.isDebugEnabled()) {
+            log.debug(String.format(
+                    "Running min check for [kub-cluster] : %s [cluster] : %s ", kubernetesClusterID, getClusterId()));
+        }
 		minCheckFactHandle = AutoscalerRuleEvaluator.evaluateMinCheck(
 				getMinCheckKnowledgeSession(), minCheckFactHandle,
 				getKubernetesClusterCtxt());

http://git-wip-us.apache.org/repos/asf/stratos/blob/67313a1e/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 416aa31..9d3227a 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
@@ -199,36 +199,67 @@ public class RuleTasksDelegator {
                log.error("Cannot terminate instance", e);
            }
        }
-   	
-   	public void delegateCreateContainers(KubernetesClusterContext  kubernetesClusterContext) {
+
+    public void delegateStartContainers(KubernetesClusterContext kubernetesClusterContext) {
         try {
-        	String kubernetesClusterId = kubernetesClusterContext.getKubernetesClusterID();
-        	String clusterId = kubernetesClusterContext.getClusterId();
+            String kubernetesClusterId = kubernetesClusterContext.getKubernetesClusterID();
+            String clusterId = kubernetesClusterContext.getClusterId();
             CloudControllerClient ccClient = CloudControllerClient.getInstance();
-			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");
+            MemberContext[] memberContexts = ccClient.startContainers(kubernetesClusterId, clusterId);
+            if (null != memberContexts) {
+                for (MemberContext memberContext : memberContexts) {
+                    if (null != memberContext) {
+                        kubernetesClusterContext.addPendingMember(memberContext);
+                        kubernetesClusterContext.setServiceClusterCreated(true);
+                        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 any pending members");
+                        }
                     }
                 }
+            } else {
+                if (log.isDebugEnabled()) {
+                    log.debug("Returned member context is null, did not add to pending members");
+                }
             }
         } catch (Throwable e) {
             log.error("Cannot create containers ", e);
         }
-   	}
+    }
 
-    public void delegateExpandCluster(KubernetesClusterContext kubernetesClusterContext, int replicas) {
-    	String clusterId = kubernetesClusterContext.getClusterId();
+    public void delegateUpdateContainers(KubernetesClusterContext kubernetesClusterContext,
+                                         int replicas) {
+        String clusterId = kubernetesClusterContext.getClusterId();
         try {
-            CloudControllerClient.getInstance().updateKubernetesController(clusterId, replicas);
+            CloudControllerClient ccClient = CloudControllerClient.getInstance();
+            // getting newly created pods' member contexts
+            MemberContext[] memberContexts = ccClient.updateContainers(clusterId, replicas);
+            if (null != memberContexts) {
+                for (MemberContext memberContext : memberContexts) {
+                    if (null != memberContext) {
+                        kubernetesClusterContext.addPendingMember(memberContext);
+                        if (log.isDebugEnabled()) {
+                            String kubernetesClusterID = kubernetesClusterContext.getKubernetesClusterID();
+                            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 any pending members");
+                        }
+                    }
+                }
+            } else {
+                if (log.isDebugEnabled()) {
+                    log.debug("Returned array of member context is null, did not add to pending members");
+                }
+            }
         } catch (Throwable e) {
             log.error("Cannot update kubernetes controller ", e);
         }

http://git-wip-us.apache.org/repos/asf/stratos/blob/67313a1e/products/stratos/modules/distribution/src/main/conf/container-mincheck.drl
----------------------------------------------------------------------
diff --git a/products/stratos/modules/distribution/src/main/conf/container-mincheck.drl b/products/stratos/modules/distribution/src/main/conf/container-mincheck.drl
index 9c3cf0f..605c553 100644
--- a/products/stratos/modules/distribution/src/main/conf/container-mincheck.drl
+++ b/products/stratos/modules/distribution/src/main/conf/container-mincheck.drl
@@ -33,22 +33,23 @@ dialect "mvel"
 	   kubernetesClusterId : String() from $kubernetesClusterContext.getKubernetesClusterID()
            minReplicas : Integer() from $kubernetesClusterContext.getMinReplicas()
            nonTerminatedReplicas : Integer() from $kubernetesClusterContext.getNonTerminatedMemberCount()
+           isServiceClusterCreated : Boolean() from $kubernetesClusterContext.isServiceClusterCreated()
 	   
            eval(log.debug("Running minimum rule: [kub-cluster] " +kubernetesClusterId + " [cluster] " + clusterId))
-	   eval(log.debug("[min-check] [kub-cluster] " + kubernetesClusterId 
-				+ " [cluster] " + clusterId + " Non terminated member count: " + nonTerminatedReplicas))
-	   eval(log.debug("[min-check] [kub-cluster] " + kubernetesClusterId
-				+ " [cluster] " + clusterId + " Minimum member count: " + minReplicas))
+           eval(log.debug("[min-check] " + " [cluster] " + clusterId + " [Replicas] nonTerminated : " + nonTerminatedReplicas))
+	   eval(log.debug("[min-check] " + " [cluster] " + clusterId + " [Replicas] minReplicas : " + minReplicas))
 	   eval(nonTerminatedReplicas < minReplicas)
        then
-           if (nonTerminatedReplicas == 0) {
-             log.info("[min-check] [kub-cluster] " + kubernetesClusterId
-	        		+ " [cluster] " + clusterId + " : min-rule not satisfied, no containers created yet, creating minReplicas : " + minReplicas);
-             $delegator.delegateCreateContainers($kubernetesClusterContext);
+           if (isServiceClusterCreated) {
+             // we suceeded calling startContainer() once, can't call it again
+              log.info("[min-check] Decided to scale-up : [cluster] " + clusterId);
+ 	      log.info("[min-check] " + " [cluster] " + clusterId + " min-rule not satisfied, expanding cluster to minReplicas : " + minReplicas);
+              $delegator.delegateUpdateContainers($kubernetesClusterContext, minReplicas);
 	   } else {
-             log.info("[min-check] [kub-cluster] " + kubernetesClusterId
-	        		+ " [cluster] " + clusterId + " : min-rule not satisfied, expanding cluster to minReplicas : " + minReplicas);
-             $delegator.delegateExpandCluster($kubernetesClusterContext, minReplicas);
+             // we should call startContainer
+              log.info("[min-check] Decided to create the cluster : [cluster] " + clusterId);
+ 	      log.info("[min-check] " + " [cluster] " + clusterId + " : min-rule not satisfied, no containers created yet, creating minReplicas : " + minReplicas);
+              $delegator.delegateStartContainers($kubernetesClusterContext);
            }
 end
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/67313a1e/products/stratos/modules/distribution/src/main/conf/container-scaling.drl
----------------------------------------------------------------------
diff --git a/products/stratos/modules/distribution/src/main/conf/container-scaling.drl b/products/stratos/modules/distribution/src/main/conf/container-scaling.drl
index 6f20274..398049b 100644
--- a/products/stratos/modules/distribution/src/main/conf/container-scaling.drl
+++ b/products/stratos/modules/distribution/src/main/conf/container-scaling.drl
@@ -38,6 +38,7 @@ dialect "mvel"
 	kubernetesClusterId : String() from $kubernetesClusterContext.getKubernetesClusterID()
 	minReplicas : Integer() from $kubernetesClusterContext.getMinReplicas()
         maxReplicas : Integer() from $kubernetesClusterContext.getMaxReplicas()
+        nonTerminatedReplicas : Integer() from $kubernetesClusterContext.getNonTerminatedMemberCount()
 
         eval(log.debug("Running scaling rule : [kub-cluster] " + kubernetesClusterId + " [cluster] " + clusterId))
 	
@@ -78,6 +79,7 @@ dialect "mvel"
         scaleUp : Boolean() from (scaleUpForRif || scaleUpForMc || scaleUpForLa)
         scaleDown : Boolean() from (scaleDownForRif && scaleDownForMc &&  scaleDownForLa)
 
+        eval(log.debug("[scaling] " + " [cluster] " + clusterId + " [Replicas] nonTerminated : " + nonTerminatedReplicas))
 	eval(log.debug("[scaling] " + " [cluster] " + clusterId + " [Replicas] minReplicas : " + minReplicas))
 	eval(log.debug("[scaling] " + " [cluster] " + clusterId + " [Replicas] maxReplicas : " + maxReplicas))
 
@@ -101,7 +103,6 @@ dialect "mvel"
 
 	then
         if (scaleUp) {
-	    log.info("[scale-up] Decided to scale up : [kub-cluster] " + kubernetesClusterId + " [cluster] " + clusterId);
 	    int requiredReplicas = 0;
 	    if (scaleUpForRif) {
               int predictedReplicasForRif = $delegator.getPredictedReplicasForStat(minReplicas, rifUpperLimit, rifPredictedValue);
@@ -135,14 +136,28 @@ dialect "mvel"
               requiredReplicas = minReplicas;
             }
             //expand the cluster
-	    log.info("[scaling] " + " [cluster] " + clusterId + " valid number of replicas to expand : " + requiredReplicas);
-	    $delegator.delegateExpandCluster($kubernetesClusterContext, requiredReplicas);
+            if (requiredReplicas > nonTerminatedReplicas) {
+              log.info("[scaling] Decided to scale-up : [cluster] " + clusterId);
+ 	      log.info("[scaling-up] " + " [cluster] " + clusterId + " valid number of replicas to expand : " + requiredReplicas);
+	      $delegator.delegateUpdateContainers($kubernetesClusterContext, requiredReplicas);
+            }
+            //shrink the cluster
+            if (requiredReplicas < nonTerminatedReplicas) {
+              log.info("[scaling] Decided to scale-down : [cluster] " + clusterId);
+ 	      log.info("[scaling-down] " + " [cluster] " + clusterId + " valid number of replicas to shrink : " + requiredReplicas);
+	      $delegator.delegateUpdateContainers($kubernetesClusterContext, requiredReplicas);
+            }
+            if (requiredReplicas == nonTerminatedReplicas) {
+ 	      log.info("[scaling] " + " [cluster] " + clusterId + "non terminated replicas and predicted replicas are same");
+            }
+            
         } else if (scaleDown) {
-            log.debug("[scale-down] Decided to scale down : [kub-cluster] " + kubernetesClusterId + " [cluster] " + clusterId);
+            log.info("[scaling] Decided to scale-down : [cluster] " + clusterId);
+            log.info("[scaling-down] " + " [cluster] " + clusterId + " shrink the cluster to minReplicas : " + minReplicas);
             //shrink the cluster to minReplicas
-            $delegator.delegateExpandCluster($kubernetesClusterContext, minReplicas);
+            $delegator.delegateUpdateContainers($kubernetesClusterContext, minReplicas);
         } else {
-            log.debug("[scaling] No decision made to either scale up or down ... ");
+            log.info("[scaling] No decision made to either scale up or down ... ");
         }
 end
 


[34/50] [abbrv] git commit: Introducing a new exception to throw when member termination fails.

Posted by ni...@apache.org.
Introducing a new exception to throw when member termination fails.


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

Branch: refs/heads/master
Commit: 98ccb707a74f9ff9e38220aaf217babd5e4a73f0
Parents: 192228e
Author: Nirmal Fernando <ni...@gmail.com>
Authored: Fri Oct 10 09:47:40 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:57 2014 +0530

----------------------------------------------------------------------
 .../MemberTerminationFailedException.java       | 48 ++++++++++++++++++++
 1 file changed, 48 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/98ccb707/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/MemberTerminationFailedException.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/MemberTerminationFailedException.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/MemberTerminationFailedException.java
new file mode 100644
index 0000000..1db68b5
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/MemberTerminationFailedException.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one 
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
+ * KIND, either express or implied.  See the License for the 
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.stratos.cloud.controller.exception;
+
+
+/**
+ * Throws when a member termination fails.
+ *
+ */
+public class MemberTerminationFailedException extends Exception {
+
+    private static final long serialVersionUID = -7883324379272628566L;
+    private String message;
+    
+    public MemberTerminationFailedException(String msg) {
+        super(msg);
+        this.setMessage(msg);
+    }
+    
+    public MemberTerminationFailedException(String msg, Exception ex) {
+        super(msg, ex);
+        this.setMessage(msg);
+    }
+
+	public String getMessage() {
+		return message;
+	}
+
+	public void setMessage(String message) {
+		this.message = message;
+	}
+}


[46/50] [abbrv] git commit: Return member contexts from termination related APIs and allocate IPs in a scheduled executor task.

Posted by ni...@apache.org.
Return member contexts from termination related APIs and allocate IPs in a scheduled executor task.


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

Branch: refs/heads/master
Commit: 7373d86c8ee71f78fb9833da06989872f4e2535e
Parents: e3d528f
Author: Nirmal Fernando <ni...@gmail.com>
Authored: Fri Oct 10 19:50:15 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:58 2014 +0530

----------------------------------------------------------------------
 .../impl/CloudControllerServiceImpl.java        | 378 +++++++++----------
 .../interfaces/CloudControllerService.java      |   8 +-
 .../jcloud/ComputeServiceBuilderUtil.java       |   1 -
 3 files changed, 190 insertions(+), 197 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/7373d86c/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 be8702b..25e19ce 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
@@ -25,6 +25,7 @@ import org.apache.commons.lang.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.cloud.controller.concurrent.PartitionValidatorCallable;
+import org.apache.stratos.cloud.controller.concurrent.ScheduledThreadExecutor;
 import org.apache.stratos.cloud.controller.concurrent.ThreadExecutor;
 import org.apache.stratos.cloud.controller.deployment.partition.Partition;
 import org.apache.stratos.cloud.controller.exception.*;
@@ -42,6 +43,7 @@ import org.apache.stratos.cloud.controller.topology.TopologyBuilder;
 import org.apache.stratos.cloud.controller.topology.TopologyManager;
 import org.apache.stratos.cloud.controller.util.CloudControllerConstants;
 import org.apache.stratos.cloud.controller.util.CloudControllerUtil;
+import org.apache.stratos.cloud.controller.util.PodActivationWatcher;
 import org.apache.stratos.cloud.controller.validate.interfaces.PartitionValidator;
 import org.apache.stratos.common.constants.StratosConstants;
 import org.apache.stratos.kubernetes.client.KubernetesApiClient;
@@ -74,7 +76,7 @@ import java.util.concurrent.Future;
  */
 public class CloudControllerServiceImpl implements CloudControllerService {
 
-	private static final Log log = LogFactory
+	private static final Log LOG = LogFactory
 			.getLog(CloudControllerServiceImpl.class);
 	private FasterLookUpDataHolder dataHolder = FasterLookUpDataHolder
 			.getInstance();
@@ -103,20 +105,20 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 					currentData.setCartridges(serializedObj.getCartridges());
 					currentData.setKubClusterIdToKubClusterContext(serializedObj.getKubClusterIdToKubClusterContext());
 
-					if(log.isDebugEnabled()) {
+					if(LOG.isDebugEnabled()) {
 					    
-					    log.debug("Cloud Controller Data is retrieved from registry.");
+					    LOG.debug("Cloud Controller Data is retrieved from registry.");
 					}
 				} else {
-				    if(log.isDebugEnabled()) {
+				    if(LOG.isDebugEnabled()) {
 				        
-				        log.debug("Cloud Controller Data cannot be found in registry.");
+				        LOG.debug("Cloud Controller Data cannot be found in registry.");
 				    }
 				}
 			} catch (Exception e) {
 
 				String msg = "Unable to acquire data from Registry. Hence, any historical data will not get reflected.";
-				log.warn(msg, e);
+				LOG.warn(msg, e);
 			}
 
 		}
@@ -124,26 +126,23 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 
     public void deployCartridgeDefinition(CartridgeConfig cartridgeConfig) throws InvalidCartridgeDefinitionException, 
     InvalidIaasProviderException {
-        if (cartridgeConfig == null) {
-            String msg = "Invalid Cartridge Definition: Definition is null.";
-            log.error(msg);
-            throw new IllegalArgumentException(msg);
-
-        }
+        
+        handleNullObject(cartridgeConfig, "Invalid Cartridge Definition: Definition is null.");
 
-        if(log.isDebugEnabled()){
-            log.debug("Cartridge definition: " + cartridgeConfig.toString());
+        if(LOG.isDebugEnabled()){
+            LOG.debug("Cartridge definition: " + cartridgeConfig.toString());
         }
 
         Cartridge cartridge = null;
         try {
+            // cartridge can never be null
             cartridge = CloudControllerUtil.toCartridge(cartridgeConfig);
         } catch (Exception e) {
             String msg =
                          "Invalid Cartridge Definition: Cartridge Type: " +
                                  cartridgeConfig.getType()+
                                  ". Cause: Cannot instantiate a Cartridge Instance with the given Config. "+e.getMessage();
-            log.error(msg, e);
+            LOG.error(msg, e);
             throw new InvalidCartridgeDefinitionException(msg, e);
         }
 
@@ -154,7 +153,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 				String msg = "Invalid Cartridge Definition: Cartridge Type: "
 						+ cartridgeConfig.getType()
 						+ ". Cause: Iaases of this Cartridge is null or empty.";
-				log.error(msg);
+				LOG.error(msg);
 				throw new InvalidCartridgeDefinitionException(msg);
 			}
 
@@ -187,7 +186,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
         TopologyBuilder.handleServiceCreated(cartridgeList);
         // transaction ends
         
-        log.info("Successfully deployed the Cartridge definition: " + cartridgeType);
+        LOG.info("Successfully deployed the Cartridge definition: " + cartridgeType);
     }
 
     private void populateNewCartridge(Cartridge cartridge,
@@ -203,8 +202,8 @@ public class CloudControllerServiceImpl implements CloudControllerService {
     	    String partitionId = entry.getKey();
 			IaasProvider oldIaasProvider = entry.getValue();
 			if (newIaasProviders.contains(oldIaasProvider)) {
-				if (log.isDebugEnabled()) {
-					log.debug("Copying a partition from the Cartridge that is undeployed, to the new Cartridge. "
+				if (LOG.isDebugEnabled()) {
+					LOG.debug("Copying a partition from the Cartridge that is undeployed, to the new Cartridge. "
 							+ "[partition id] : "+partitionId+" [cartridge type] "+cartridge.getType() );
 				}
 				cartridge.addIaasProvider(partitionId, newIaasProviders.get(newIaasProviders.indexOf(oldIaasProvider)));
@@ -221,8 +220,8 @@ public class CloudControllerServiceImpl implements CloudControllerService {
             	// invalidate partition validation cache
             	dataHolder.removeFromCartridgeTypeToPartitionIds(cartridgeType);
             	
-            	if (log.isDebugEnabled()) {
-            		log.debug("Partition cache invalidated for cartridge "+cartridgeType);
+            	if (LOG.isDebugEnabled()) {
+            		LOG.debug("Partition cache invalidated for cartridge "+cartridgeType);
             	}
             	
                 persist();
@@ -232,14 +231,14 @@ public class CloudControllerServiceImpl implements CloudControllerService {
                 cartridgeList.add(cartridge);
                 TopologyBuilder.handleServiceRemoved(cartridgeList);
                 
-                if(log.isInfoEnabled()) {
-                    log.info("Successfully undeployed the Cartridge definition: " + cartridgeType);
+                if(LOG.isInfoEnabled()) {
+                    LOG.info("Successfully undeployed the Cartridge definition: " + cartridgeType);
                 }
                 return;
             }
         }
         String msg = "Cartridge [type] "+cartridgeType+" is not a deployed Cartridge type.";
-        log.error(msg);
+        LOG.error(msg);
         throw new InvalidCartridgeTypeException(msg);
     }
     
@@ -247,41 +246,28 @@ public class CloudControllerServiceImpl implements CloudControllerService {
     public MemberContext startInstance(MemberContext memberContext) throws
         UnregisteredCartridgeException, InvalidIaasProviderException {
 
-    	if(log.isDebugEnabled()) {
-    		log.debug("CloudControllerServiceImpl:startInstance");
+    	if(LOG.isDebugEnabled()) {
+    		LOG.debug("CloudControllerServiceImpl:startInstance");
     	}
 
-        if (memberContext == null) {
-            String msg = "Instance start-up failed. Member is null.";
-            log.error(msg);
-            throw new IllegalArgumentException(msg);
-        }
+    	handleNullObject(memberContext, "Instance start-up failed. Member is null.");
 
         String clusterId = memberContext.getClusterId();
         Partition partition = memberContext.getPartition();
 
-        if(log.isDebugEnabled()) {
-        	log.debug("Received an instance spawn request : " + memberContext.toString());
+        if(LOG.isDebugEnabled()) {
+        	LOG.debug("Received an instance spawn request : " + memberContext);
         }
 
         Template template = null;
 
-        if (partition == null) {
-            String msg =
-                         "Instance start-up failed. Specified Partition is null. " +
-                                 memberContext.toString();
-            log.error(msg);
-            throw new IllegalArgumentException(msg);
-        }
+        handleNullObject(partition, "Instance start-up failed. Specified Partition is null. " +
+                                 memberContext);
 
         String partitionId = partition.getId();
         ClusterContext ctxt = dataHolder.getClusterContext(clusterId);
 
-        if (ctxt == null) {
-            String msg = "Instance start-up failed. Invalid cluster id. " + memberContext.toString();
-            log.error(msg);
-            throw new IllegalArgumentException(msg);
-        }
+        handleNullObject(ctxt, "Instance start-up failed. Invalid cluster id. " + memberContext);
 
         String cartridgeType = ctxt.getCartridgeType();
 
@@ -291,7 +277,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
             String msg =
                          "Instance start-up failed. No matching Cartridge found [type] "+cartridgeType +". "+
                                  memberContext.toString();
-            log.error(msg);
+            LOG.error(msg);
             throw new UnregisteredCartridgeException(msg);
         }
 
@@ -300,8 +286,8 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 
         IaasProvider iaasProvider = cartridge.getIaasProviderOfPartition(partitionId);
         if (iaasProvider == null) {
-        	if (log.isDebugEnabled()) {
-        		log.debug("IaasToPartitionMap "+cartridge.hashCode()
+        	if (LOG.isDebugEnabled()) {
+        		LOG.debug("IaasToPartitionMap "+cartridge.hashCode()
         				+ " for cartridge "+cartridgeType+ " and for partition: "+partitionId);
         	}
 			String msg = "Instance start-up failed. "
@@ -314,7 +300,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 					+ cartridge.getPartitionToIaasProvider().keySet()
 							.toString() + ". " + memberContext.toString()
 					+ ". ";
-            log.fatal(msg);
+            LOG.fatal(msg);
             throw new InvalidIaasProviderException(msg);
         }
         String type = iaasProvider.getType();
@@ -339,20 +325,20 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 
             Iaas iaas = iaasProvider.getIaas();
             
-            if (log.isDebugEnabled()) {
-                log.debug("Payload: " + payload.toString());
+            if (LOG.isDebugEnabled()) {
+                LOG.debug("Payload: " + payload.toString());
             }
             
             if (iaas == null) {
-                if(log.isDebugEnabled()) {
-                    log.debug("Iaas is null of Iaas Provider: "+type+". Trying to build IaaS...");
+                if(LOG.isDebugEnabled()) {
+                    LOG.debug("Iaas is null of Iaas Provider: "+type+". Trying to build IaaS...");
                 }
                 try {
                     iaas = CloudControllerUtil.getIaas(iaasProvider);
                 } catch (InvalidIaasProviderException e) {
                     String msg ="Instance start up failed. "+memberContext.toString()+
                             "Unable to build Iaas of this IaasProvider [Provider] : " + type+". Cause: "+e.getMessage();
-                    log.error(msg, e);
+                    LOG.error(msg, e);
                     throw new InvalidIaasProviderException(msg, e);
                 }
                 
@@ -383,24 +369,24 @@ public class CloudControllerServiceImpl implements CloudControllerService {
                              "Failed to start an instance. " +
                                      memberContext.toString() +
                                      ". Reason : Jclouds Template is null for iaas provider [type]: "+iaasProvider.getType();
-                log.error(msg);
+                LOG.error(msg);
                 throw new InvalidIaasProviderException(msg);
             }
 
             //Start instance start up in a new thread
             ThreadExecutor exec = ThreadExecutor.getInstance();
-            if (log.isDebugEnabled()) {
-            	log.debug("Cloud Controller is starting the instance start up thread.");
+            if (LOG.isDebugEnabled()) {
+            	LOG.debug("Cloud Controller is starting the instance start up thread.");
 			}
             exec.execute(new JcloudsInstanceCreator(memberContext, iaasProvider, cartridgeType));
 
-            log.info("Instance is successfully starting up. "+memberContext.toString());
+            LOG.info("Instance is successfully starting up. "+memberContext.toString());
 
             return memberContext;
 
         } catch (Exception e) {
             String msg = "Failed to start an instance. " + memberContext.toString()+" Cause: "+e.getMessage();
-            log.error(msg, e);
+            LOG.error(msg, e);
             throw new IllegalStateException(msg, e);
         }
 
@@ -414,8 +400,8 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 		String snapshotId =  volume.getSnapshotId();
         if(StringUtils.isNotEmpty(volume.getVolumeId())){
             // volumeID is specified, so not creating additional volumes
-            if(log.isDebugEnabled()){
-                log.debug("Volume creation is skipping since a volume ID is specified. [Volume ID]" + volume.getVolumeId());
+            if(LOG.isDebugEnabled()){
+                LOG.debug("Volume creation is skipping since a volume ID is specified. [Volume ID]" + volume.getVolumeId());
             }
             volume.setId(volume.getVolumeId());
         }else{
@@ -431,8 +417,8 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 		StringBuilder persistencePayload = new StringBuilder();
 		if(isPersistenceMappingAvailable(ctx)){
 			for(Volume volume : ctx.getVolumes()){
-				if(log.isDebugEnabled()){
-					log.debug("Adding persistence mapping " + volume.toString());
+				if(LOG.isDebugEnabled()){
+					LOG.debug("Adding persistence mapping " + volume.toString());
 				}
                 if(persistencePayload.length() != 0) {
                    persistencePayload.append("|");
@@ -445,8 +431,8 @@ public class CloudControllerServiceImpl implements CloudControllerService {
                 persistencePayload.append(volume.getMappingPath());
 			}
 		}
-        if(log.isDebugEnabled()){
-            log.debug("Persistence payload is" + persistencePayload.toString());
+        if(LOG.isDebugEnabled()){
+            LOG.debug("Persistence payload is" + persistencePayload.toString());
         }
 		return persistencePayload;
 	}
@@ -470,7 +456,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 		} catch (RegistryException e) {
 
 			String msg = "Failed to persist the Cloud Controller data in registry. Further, transaction roll back also failed.";
-			log.fatal(msg);
+			LOG.fatal(msg);
 			throw new CloudControllerException(msg, e);
 		}
 	}
@@ -486,7 +472,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 
         if(memberId == null) {
             String msg = "Termination failed. Null member id.";
-            log.error(msg);
+            LOG.error(msg);
             throw new IllegalArgumentException(msg);
         }
         
@@ -494,7 +480,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
         
         if(ctxt == null) {
             String msg = "Termination failed. Invalid Member Id: "+memberId;
-            log.error(msg);
+            LOG.error(msg);
             throw new InvalidMemberException(msg);
         }
         
@@ -524,7 +510,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
                 // these will never be null, since we do not add null values for these.
                 Cartridge cartridge = dataHolder.getCartridge(cartridgeType);
 
-                log.info("Starting to terminate an instance with member id : " + memberId +
+                LOG.info("Starting to terminate an instance with member id : " + memberId +
                          " in partition id: " + partitionId + " of cluster id: " + clusterId +
                          " and of cartridge type: " + cartridgeType);
 
@@ -533,7 +519,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
                                  "Termination of Member Id: " + memberId + " failed. " +
                                          "Cannot find a matching Cartridge for type: " +
                                          cartridgeType;
-                    log.error(msg);
+                    LOG.error(msg);
                     throw new InvalidCartridgeTypeException(msg);
                 }
 
@@ -543,7 +529,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
                     String msg =
                                  "Termination failed. Cannot find a node id for Member Id: " +
                                          memberId;
-                    log.error(msg);
+                    LOG.error(msg);
                     throw new InvalidMemberException(msg);
                 }
 
@@ -558,7 +544,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
             } catch (Exception e) {
                 String msg =
                              "Instance termination failed. "+ctxt.toString();
-                log.error(msg, e);
+                LOG.error(msg, e);
                 throw new CloudControllerException(msg, e);
             }
 
@@ -600,23 +586,23 @@ public class CloudControllerServiceImpl implements CloudControllerService {
             			.getComputeService();
             	Template template = iaasProvider.getTemplate();
             	
-            	if (log.isDebugEnabled()) {
-            		log.debug("Cloud Controller is delegating request to start an instance for "
+            	if (LOG.isDebugEnabled()) {
+            		LOG.debug("Cloud Controller is delegating request to start an instance for "
             				+ memberContext + " to Jclouds layer.");
             	}
             	// create and start a node
             	Set<? extends NodeMetadata> nodes = computeService
             			.createNodesInGroup(group, 1, template);
             	node = nodes.iterator().next();
-            	if (log.isDebugEnabled()) {
-            		log.debug("Cloud Controller received a response for the request to start "
+            	if (LOG.isDebugEnabled()) {
+            		LOG.debug("Cloud Controller received a response for the request to start "
             				+ memberContext + " from Jclouds layer.");
             	}
             	
             	if (node == null) {
             	    String msg = "Null response received for instance start-up request to Jclouds.\n"
                             + memberContext.toString();
-                    log.error(msg);
+                    LOG.error(msg);
                     throw new IllegalStateException(msg);
             	}
             	
@@ -625,13 +611,13 @@ public class CloudControllerServiceImpl implements CloudControllerService {
             	if (nodeId == null) {
             		String msg = "Node id of the starting instance is null.\n"
             				+ memberContext.toString();
-            		log.fatal(msg);
+            		LOG.fatal(msg);
             		throw new IllegalStateException(msg);
             	}
             	
             	memberContext.setNodeId(nodeId);
-            	if (log.isDebugEnabled()) {
-            		log.debug("Node id was set. " + memberContext.toString());
+            	if (LOG.isDebugEnabled()) {
+            		LOG.debug("Node id was set. " + memberContext.toString());
             	}
             	
             	// attach volumes
@@ -649,7 +635,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
             						} catch (Exception e) {
             							// continue without throwing an exception, since
             							// there is an instance already running
-            							log.error("Attaching Volume to Instance [ "
+            							LOG.error("Attaching Volume to Instance [ "
             									+ instanceId + " ] failed!", e);
             						}
             					}
@@ -658,13 +644,13 @@ public class CloudControllerServiceImpl implements CloudControllerService {
             	
             } catch (Exception e) {
             	String msg = "Failed to start an instance. " + memberContext.toString()+" Cause: "+e.getMessage();
-            	log.error(msg, e);
+            	LOG.error(msg, e);
             	throw new IllegalStateException(msg, e);
             }
 
             try{
-            	if (log.isDebugEnabled()) {
-    				log.debug("IP allocation process started for "+memberContext);
+            	if (LOG.isDebugEnabled()) {
+    				LOG.debug("IP allocation process started for "+memberContext);
     			}
                 String autoAssignIpProp =
                                           iaasProvider.getProperty(CloudControllerConstants.AUTO_ASSIGN_IP_PROPERTY);
@@ -682,8 +668,8 @@ public class CloudControllerServiceImpl implements CloudControllerService {
                     	// check if floating ip is well defined in cartridge definition
                     	if (pre_defined_ip != null) {
                     		if (isValidIpAddress(pre_defined_ip)) {
-                    			if(log.isDebugEnabled()) {
-                    				log.debug("CloudControllerServiceImpl:IpAllocator:pre_defined_ip: invoking associatePredefinedAddress" + pre_defined_ip);
+                    			if(LOG.isDebugEnabled()) {
+                    				LOG.debug("CloudControllerServiceImpl:IpAllocator:pre_defined_ip: invoking associatePredefinedAddress" + pre_defined_ip);
                     			}
 	    	                	ip = iaas.associatePredefinedAddress(node, pre_defined_ip);
 	    	       
@@ -692,7 +678,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 	       	                		String msg = "Error occurred while allocating predefined floating ip address: " + pre_defined_ip + 
 	       	                					 " / allocated ip:" + ip + 
 	       	                				     " - terminating node:"  + memberContext.toString();
-	    	                        log.error(msg);
+	    	                        LOG.error(msg);
 	    	                		// terminate instance
 	    	                        terminate(iaasProvider, 
 	    	                    			node.getId(), memberContext);
@@ -701,7 +687,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
                     		} else {
                     			String msg = "Invalid floating ip address configured: " + pre_defined_ip +  
   	                				     " - terminating node:"  + memberContext.toString();
-                    			log.error(msg);
+                    			LOG.error(msg);
                     			// terminate instance
                     			terminate(iaasProvider, 
 	                    			node.getId(), memberContext);
@@ -709,8 +695,8 @@ public class CloudControllerServiceImpl implements CloudControllerService {
                     		}
 	    	                	
                         } else {
-                        	if(log.isDebugEnabled()) {
-                        		log.debug("CloudControllerServiceImpl:IpAllocator:no (valid) predefined floating ip configured, "
+                        	if(LOG.isDebugEnabled()) {
+                        		LOG.debug("CloudControllerServiceImpl:IpAllocator:no (valid) predefined floating ip configured, "
                         		        + "selecting available one from pool");
                         	}
                             // allocate an IP address - manual IP assigning mode
@@ -718,7 +704,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
                             
     						if (ip != null) {
     							memberContext.setAllocatedIpAddress(ip);
-    							log.info("Allocated an ip address: "
+    							LOG.info("Allocated an ip address: "
     									+ memberContext.toString());
     						}
                         }       
@@ -735,7 +721,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
                         ip = node.getPublicAddresses().iterator().next();
                         publicIp = ip;
                         memberContext.setPublicIpAddress(ip);
-                        log.info("Retrieving Public IP Address : " + memberContext.toString());
+                        LOG.info("Retrieving Public IP Address : " + memberContext.toString());
                     }
 
                     // private IP
@@ -743,7 +729,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
                         node.getPrivateAddresses().iterator().hasNext()) {
                         ip = node.getPrivateAddresses().iterator().next();
                         memberContext.setPrivateIpAddress(ip);
-                        log.info("Retrieving Private IP Address. " + memberContext.toString());
+                        LOG.info("Retrieving Private IP Address. " + memberContext.toString());
                     }
 
                     dataHolder.addMemberContext(memberContext);
@@ -767,17 +753,17 @@ public class CloudControllerServiceImpl implements CloudControllerService {
                                                         cartridgeType,
                                                         MemberStatus.Created.toString(),
                                                         node);
-                    if (log.isDebugEnabled()) {
-                        log.debug("Node details: " + node.toString());
+                    if (LOG.isDebugEnabled()) {
+                        LOG.debug("Node details: " + node.toString());
                     }
                     
-                    if (log.isDebugEnabled()) {
-        				log.debug("IP allocation process ended for "+memberContext);
+                    if (LOG.isDebugEnabled()) {
+        				LOG.debug("IP allocation process ended for "+memberContext);
         			}
 
             } catch (Exception e) {
                 String msg = "Error occurred while allocating an ip address. " + memberContext.toString();
-                log.error(msg, e);
+                LOG.error(msg, e);
                 throw new CloudControllerException(msg, e);
             } 
 
@@ -793,12 +779,12 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 	@Override
 	public void terminateAllInstances(String clusterId) throws InvalidClusterException {
 
-		log.info("Starting to terminate all instances of cluster : "
+		LOG.info("Starting to terminate all instances of cluster : "
 				+ clusterId);
 		
 		if(clusterId == null) {
 		    String msg = "Instance termination failed. Cluster id is null.";
-		    log.error(msg);
+		    LOG.error(msg);
 		    throw new IllegalArgumentException(msg);
 		}
 		
@@ -806,7 +792,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 		
 		if(ctxts == null) {
 		    String msg = "Instance termination failed. No members found for cluster id: "+clusterId;
-		    log.warn(msg);
+		    LOG.warn(msg);
             return;
 		}
 		
@@ -836,7 +822,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 	            String msg =
 	                    "Instance termination failed. " +ctxt.toString()  +
 	                    ". Cause: Unable to build Iaas of this " + iaasProvider.toString();
-	            log.error(msg, e);
+	            LOG.error(msg, e);
 	            throw new CloudControllerException(msg, e);
 	        }
 	        
@@ -853,7 +839,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
             iaas.releaseAddress(ctxt.getAllocatedIpAddress());
 		}
 		
-		log.info("Member is terminated: "+ctxt.toString());
+		LOG.info("Member is terminated: "+ctxt.toString());
 		return iaasProvider;
 	}
 
@@ -870,8 +856,8 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 					Iaas iaas = iaasProvider.getIaas();
 					iaas.detachVolume(ctxt.getInstanceId(), volumeId);
 				} catch (ResourceNotFoundException ignore) {
-					if(log.isDebugEnabled()) {
-						log.debug(ignore);
+					if(LOG.isDebugEnabled()) {
+						LOG.debug(ignore);
 					}
 				}
 			}
@@ -914,7 +900,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
         if(cartridgeType == null || clusterId == null || payload == null || hostName == null) {
 	        String msg = "Null Argument/s detected: Cartridge type: "+cartridgeType+", " +
 	                "Cluster Id: "+clusterId+", Payload: "+payload+", Host name: "+hostName;
-	        log.error(msg);
+	        LOG.error(msg);
 	        throw new IllegalArgumentException(msg);
 	    }
 	    
@@ -923,7 +909,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 
             String msg = "Registration of cluster: "+clusterId+
                     " failed. - Unregistered Cartridge type: " + cartridgeType;
-            log.error(msg);
+            LOG.error(msg);
             throw new UnregisteredCartridgeException(msg);
         }
         
@@ -940,7 +926,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 	    
 	    persist();
 	    
-	    log.info("Successfully registered: "+registrant);
+	    LOG.info("Successfully registered: "+registrant);
 	    
 		return true;
 	}
@@ -1050,7 +1036,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 
 		String msg = "Cannot find a Cartridge having a type of "
 				+ cartridgeType + ". Hence unable to find information.";
-		log.error(msg);
+		LOG.error(msg);
 		throw new UnregisteredCartridgeException(msg);
 	}
 
@@ -1062,7 +1048,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 
         if (ctxt == null) {
             String msg = "Instance start-up failed. Invalid cluster id. " + clusterId;
-            log.error(msg);
+            LOG.error(msg);
             throw new IllegalArgumentException(msg);
         }
         
@@ -1073,7 +1059,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
         if (cartridge == null) {
             String msg =
                          "Instance start-up failed. No matching Cartridge found [type] "+cartridgeType +". ";
-            log.error(msg);
+            LOG.error(msg);
             throw new UnregisteredClusterException(msg);
         }
         
@@ -1091,7 +1077,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 	                ClusterContext ctxt = dataHolder.getClusterContext(clusterId_);
 	                 if(ctxt == null) {
 	                     String msg = "Unregistration of service cluster failed. Cluster not found: " + clusterId_;
-	                     log.error(msg);
+	                     LOG.error(msg);
 	                 }
 	                 Collection<Member> members = TopologyManager.getTopology().
 	                         getService(ctxt.getCartridgeType()).getCluster(clusterId_).getMembers();
@@ -1118,7 +1104,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 	                            terminateInstance(member.getMemberId());
 	                        } catch (Exception e) {
 	                            // we are not gonna stop the execution due to errors.
-	                            log.warn("Instance termination failed of member [id] " + member.getMemberId(), e);
+	                            LOG.warn("Instance termination failed of member [id] " + member.getMemberId(), e);
 	                        }
 	                    }
 	                 }
@@ -1129,7 +1115,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 	                 ClusterContext ctxt = dataHolder.getClusterContext(clusterId_);
 	                 if(ctxt == null) {
 	                     String msg = "Unregistration of service cluster failed. Cluster not found: " + clusterId_;
-	                     log.error(msg);
+	                     LOG.error(msg);
 	                 }
 	                 Collection<Member> members = TopologyManager.getTopology().
 	                         getService(ctxt.getCartridgeType()).getCluster(clusterId_).getMembers();
@@ -1141,7 +1127,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 	                    CloudControllerUtil.sleep(1000);
 	                 }
 	
-	                 log.info("Unregistration of service cluster: " + clusterId_);
+	                 LOG.info("Unregistration of service cluster: " + clusterId_);
 	                 deleteVolumes(ctxt);
 	                 onClusterRemoval(clusterId_);
 	             }
@@ -1164,8 +1150,8 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 	                                        volume.setId(null);
 	                                    }
 	                                    } catch(Exception ignore) {
-	                                        if(log.isErrorEnabled()) {
-	                                            log.error("Error while deleting volume [id] "+ volume.getId(), ignore);
+	                                        if(LOG.isErrorEnabled()) {
+	                                            LOG.error("Error while deleting volume [id] "+ volume.getId(), ignore);
 	                                        }
 	                                    }
 	                                }
@@ -1190,7 +1176,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 			terminateAllContainers(clusterId);
 		} catch (InvalidClusterException e) {
 			String msg = "Docker instance termination fails for cluster: "+clusterId;
-			log.error(msg, e);
+			LOG.error(msg, e);
 			throw new UnregisteredClusterException(msg, e);
 		}
     	// send cluster removal notifications and update the state
@@ -1209,8 +1195,8 @@ public class CloudControllerServiceImpl implements CloudControllerService {
     		// cache hit for this cartridge
     		// get list of partitions
     		validatedPartitions = validatedCache.get(cartridgeType);
-    		if (log.isDebugEnabled()) {
-    			log.debug("Partition validation cache hit for cartridge type: "+cartridgeType);
+    		if (LOG.isDebugEnabled()) {
+    			LOG.debug("Partition validation cache hit for cartridge type: "+cartridgeType);
     		}
     		
     	}
@@ -1218,15 +1204,15 @@ public class CloudControllerServiceImpl implements CloudControllerService {
         Map<String, IaasProvider> partitionToIaasProviders =
                                                              new ConcurrentHashMap<String, IaasProvider>();
         
-        if (log.isDebugEnabled()) {
-			log.debug("Deployment policy validation started for cartridge type: "+cartridgeType);
+        if (LOG.isDebugEnabled()) {
+			LOG.debug("Deployment policy validation started for cartridge type: "+cartridgeType);
 		}
 
         Cartridge cartridge = dataHolder.getCartridge(cartridgeType);
 
         if (cartridge == null) {
             String msg = "Invalid Cartridge Type: " + cartridgeType;
-            log.error(msg);
+            LOG.error(msg);
             throw new InvalidCartridgeTypeException(msg);
         }
         
@@ -1260,11 +1246,11 @@ public class CloudControllerServiceImpl implements CloudControllerService {
             	// add to cache
             	this.dataHolder.addToCartridgeTypeToPartitionIdMap(cartridgeType, partitionId);
             	
-				if (log.isDebugEnabled()) {
-					log.debug("Partition "+partitionId+" added to the cache against cartridge type: "+cartridgeType);
+				if (LOG.isDebugEnabled()) {
+					LOG.debug("Partition "+partitionId+" added to the cache against cartridge type: "+cartridgeType);
 				}
             } catch (Exception e) {
-                log.error(e.getMessage(), e);
+                LOG.error(e.getMessage(), e);
                 throw new InvalidPartitionException(e.getMessage(), e);
             } 
         }
@@ -1275,7 +1261,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
         // persist data
         persist();
         
-        log.info("All partitions "+CloudControllerUtil.getPartitionIds(partitions)+
+        LOG.info("All partitions "+CloudControllerUtil.getPartitionIds(partitions)+
         		" were validated successfully, against the Cartridge: "+cartridgeType);
         
         return true;
@@ -1299,7 +1285,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
             String msg =
                          "Invalid Partition - " + partition.toString()+". Cause: Iaas Provider " +
                                  "is null for Partition Provider: "+provider;
-            log.error(msg);
+            LOG.error(msg);
             throw new InvalidPartitionException(msg);
         }
         
@@ -1313,7 +1299,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
                 String msg =
                         "Invalid Partition - " + partition.toString() +
                         ". Cause: Unable to build Iaas of this IaasProvider [Provider] : " + provider+". "+e.getMessage();
-                log.error(msg, e);
+                LOG.error(msg, e);
                 throw new InvalidPartitionException(msg, e);
             }
             
@@ -1336,26 +1322,26 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 	public MemberContext[] startContainers(ContainerClusterContext containerClusterContext)
 			throws UnregisteredCartridgeException {
 		
-		if(log.isDebugEnabled()) {
-    		log.debug("CloudControllerServiceImpl:startContainers");
+		if(LOG.isDebugEnabled()) {
+    		LOG.debug("CloudControllerServiceImpl:startContainers");
     	}
 
         if (containerClusterContext == null) {
             String msg = "Instance start-up failed. ContainerClusterContext is null.";
-            log.error(msg);
+            LOG.error(msg);
             throw new IllegalArgumentException(msg);
         }
 
         String clusterId = containerClusterContext.getClusterId();
-        if(log.isDebugEnabled()) {
-        	log.debug("Received an instance spawn request : " + containerClusterContext.toString());
+        if(LOG.isDebugEnabled()) {
+        	LOG.debug("Received an instance spawn request : " + containerClusterContext.toString());
         }
 
         ClusterContext ctxt = dataHolder.getClusterContext(clusterId);
 
         if (ctxt == null) {
             String msg = "Instance start-up failed. Invalid cluster id. " + containerClusterContext.toString();
-            log.error(msg);
+            LOG.error(msg);
             throw new IllegalArgumentException(msg);
         }
         
@@ -1367,7 +1353,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
             String msg =
                          "Instance start-up failed. No matching Cartridge found [type] "+cartridgeType +". "+
                                  containerClusterContext.toString();
-            log.error(msg);
+            LOG.error(msg);
             throw new UnregisteredCartridgeException(msg);
         }
 
@@ -1385,15 +1371,15 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 			ContainerClusterContextToReplicationController controllerFunction = new ContainerClusterContextToReplicationController();
 			ReplicationController controller = controllerFunction.apply(containerClusterContext);
 			
-			if (log.isDebugEnabled()) {
-				log.debug("Cloud Controller is delegating request to start a replication controller "+controller+
+			if (LOG.isDebugEnabled()) {
+				LOG.debug("Cloud Controller is delegating request to start a replication controller "+controller+
 						" for "+ containerClusterContext + " to Kubernetes layer.");
 			}
 			
 			kubApi.createReplicationController(controller);
 			
-			if (log.isDebugEnabled()) {
-				log.debug("Cloud Controller successfully started the controller "
+			if (LOG.isDebugEnabled()) {
+				LOG.debug("Cloud Controller successfully started the controller "
 						+ controller + " via Kubernetes layer.");
 			}
 			
@@ -1401,8 +1387,8 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 			ContainerClusterContextToKubernetesService serviceFunction = new ContainerClusterContextToKubernetesService();
 			Service service = serviceFunction.apply(containerClusterContext);
 			
-			if (log.isDebugEnabled()) {
-				log.debug("Cloud Controller is delegating request to start a service "+service+
+			if (LOG.isDebugEnabled()) {
+				LOG.debug("Cloud Controller is delegating request to start a service "+service+
 						" for "+ containerClusterContext + " to Kubernetes layer.");
 			}
 			
@@ -1412,8 +1398,8 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 			ctxt.addProperty(StratosConstants.ALLOCATED_SERVICE_HOST_PORT, service.getPort());
 			dataHolder.addClusterContext(ctxt);
 			
-			if (log.isDebugEnabled()) {
-				log.debug("Cloud Controller successfully started the service "
+			if (LOG.isDebugEnabled()) {
+				LOG.debug("Cloud Controller successfully started the service "
 						+ controller + " via Kubernetes layer.");
 			}
 			
@@ -1427,9 +1413,9 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 			for (int i = 0; i < expectedCount ; i++) {
 			    newlyCreatedPods = kubApi.getSelectedPods(new Label[]{l});
 			    
-			    if (log.isDebugEnabled()) {
+			    if (LOG.isDebugEnabled()) {
 			        
-			        log.debug("Pods Count: "+newlyCreatedPods.length+" for cluster: "+clusterId);
+			        LOG.debug("Pods Count: "+newlyCreatedPods.length+" for cluster: "+clusterId);
 			    }
 			    if(newlyCreatedPods.length == expectedCount) {
 			        break;
@@ -1437,9 +1423,9 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 			    Thread.sleep(5000);
             }
 			
-			if (log.isDebugEnabled()) {
+			if (LOG.isDebugEnabled()) {
 			    
-			    log.debug(String.format("Pods created : %s for cluster : %s",newlyCreatedPods.length, clusterId));
+			    LOG.debug(String.format("Pods created : %s for cluster : %s",newlyCreatedPods.length, clusterId));
 			}
 			
 			List<MemberContext> memberContexts = new ArrayList<MemberContext>();
@@ -1455,15 +1441,12 @@ public class CloudControllerServiceImpl implements CloudControllerService {
                         .getProperties(), StratosConstants.ALLOCATED_SERVICE_HOST_PORT,
                         String.valueOf(service.getPort())));
                 
-                dataHolder.addMemberContext(context);
-                
-                // trigger topology
-                // update the topology with the newly spawned member
-                TopologyBuilder.handleMemberSpawned(cartridgeType, clusterId, null,
-                        pod.getCurrentState().getPodIP(), pod.getCurrentState().getHostIP(), context);
-                // publish data
-                // TODO
-//                CartridgeInstanceDataPublisher.publish(context.getMemberId(), null, null, context.getClusterId(), cartridgeType, MemberStatus.Created.toString(), node);
+                // wait till Pod status turns to running and send member spawned.
+                ScheduledThreadExecutor exec = ScheduledThreadExecutor.getInstance();
+                if (LOG.isDebugEnabled()) {
+                    LOG.debug("Cloud Controller is starting the instance start up thread.");
+                }
+                dataHolder.addScheduledFutureJob(context.getMemberId(), exec.schedule(new PodActivationWatcher(pod.getId(), context, kubApi), 5000));
                 
                 memberContexts.add(context);
             }
@@ -1471,13 +1454,13 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 			// persist in registry
 			persist();
 
-            log.info("Kubernetes entities are successfully starting up. "+memberContexts);
+            LOG.info("Kubernetes entities are successfully starting up. "+memberContexts);
 
             return memberContexts.toArray(new MemberContext[0]);
 
         } catch (Exception e) {
             String msg = "Failed to start an instance. " + containerClusterContext.toString()+" Cause: "+e.getMessage();
-            log.error(msg, e);
+            LOG.error(msg, e);
             throw new IllegalStateException(msg, e);
         }
 	}
@@ -1489,7 +1472,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
         if (propVal == null) {
             String msg = "Instance start-up failed. Cannot find '"+
                     StratosConstants.KUBERNETES_MIN_REPLICAS+"' in " + ctxt;
-            log.error(msg);
+            LOG.error(msg);
             throw new IllegalArgumentException(msg);
         }
         
@@ -1503,7 +1486,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
         if (propVal == null) {
             String msg = "Instance start-up failed. Cannot find '"+
                     StratosConstants.KUBERNETES_MIN_REPLICAS+"' in " + ctxt;
-            log.error(msg);
+            LOG.error(msg);
             throw new IllegalArgumentException(msg);
         }
         
@@ -1534,14 +1517,14 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 	}
 
 	@Override
-	public void terminateAllContainers(String clusterId)
+	public MemberContext[] terminateAllContainers(String clusterId)
 			throws InvalidClusterException {
 		
 		ClusterContext ctxt = dataHolder.getClusterContext(clusterId);
 
         if (ctxt == null) {
             String msg = "Kubernetes units temrination failed. Invalid cluster id. "+clusterId;
-            log.error(msg);
+            LOG.error(msg);
             throw new IllegalArgumentException(msg);
         }
         
@@ -1551,7 +1534,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 		if (kubernetesClusterId == null) {
 			String msg = "Kubernetes units termination failed. Cannot find '"+
 					StratosConstants.KUBERNETES_CLUSTER_ID+"'. " + ctxt;
-			log.error(msg);
+			LOG.error(msg);
 			throw new IllegalArgumentException(msg);
 		}
         
@@ -1560,7 +1543,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 		if (kubClusterContext == null) {
 			String msg = "Kubernetes units termination failed. Cannot find a matching Kubernetes Cluster for cluster id: " 
 							+kubernetesClusterId;
-			log.error(msg);
+			LOG.error(msg);
 			throw new IllegalArgumentException(msg);
 		}
 
@@ -1570,7 +1553,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 			kubApi.deleteService(CloudControllerUtil.getCompatibleId(clusterId));
 		} catch (KubernetesClientException e) {
 			// we're not going to throw this error, but proceed with other deletions
-			log.error("Failed to delete Kubernetes service with id: "+clusterId, e);
+			LOG.error("Failed to delete Kubernetes service with id: "+clusterId, e);
 		}
 		
 		// set replicas=0 for the replication controller
@@ -1578,7 +1561,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 			kubApi.updateReplicationController(clusterId, 0);
 		} catch (KubernetesClientException e) {
 			// we're not going to throw this error, but proceed with other deletions
-			log.error("Failed to update Kubernetes Controller with id: "+clusterId, e);
+			LOG.error("Failed to update Kubernetes Controller with id: "+clusterId, e);
 		}
 		
 		// delete pods forcefully
@@ -1595,12 +1578,12 @@ public class CloudControllerServiceImpl implements CloudControllerService {
                     kubApi.deletePod(pod.getId());
                 } catch (KubernetesClientException ignore) {
                     // we can't do nothing here
-                    log.warn(String.format("Failed to delete Pod [%s] forcefully!", pod.getId()));
+                    LOG.warn(String.format("Failed to delete Pod [%s] forcefully!", pod.getId()));
                 }
             }
         } catch (KubernetesClientException e) {
             // we're not going to throw this error, but proceed with other deletions
-            log.error("Failed to delete pods forcefully for cluster: "+clusterId, e);
+            LOG.error("Failed to delete pods forcefully for cluster: "+clusterId, e);
         }
 		
 		// delete the replication controller.
@@ -1608,7 +1591,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 			kubApi.deleteReplicationController(clusterId);
 		} catch (KubernetesClientException e) {
 			String msg = "Failed to delete Kubernetes Controller with id: "+clusterId;
-			log.error(msg, e);
+			LOG.error(msg, e);
 			throw new InvalidClusterException(msg, e);
 		}
 		
@@ -1619,29 +1602,35 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 			kubClusterContext.deallocateHostPort(Integer
 					.parseInt(allocatedPort));
 		} else {
-			log.warn("Host port dealloacation failed due to a missing property: "
+			LOG.warn("Host port dealloacation failed due to a missing property: "
 					+ StratosConstants.ALLOCATED_SERVICE_HOST_PORT);
 		}
 		
-		dataHolder.removeMemberContextsOfCluster(clusterId);
+		List<MemberContext> removedMembers = dataHolder.removeMemberContextsOfCluster(clusterId);
+		
+		for (MemberContext memberContext : removedMembers) {
+            logTermination(memberContext);
+        }
 		
 		// persist
 		persist();
+		
+		return removedMembers.toArray(new MemberContext[0]);
 	}
 
 	@Override
 	public MemberContext[] updateContainers(String clusterId, int replicas)
 			throws UnregisteredCartridgeException {
 		
-	    if(log.isDebugEnabled()) {
-            log.debug("CloudControllerServiceImpl:updateContainers for cluster : "+clusterId);
+	    if(LOG.isDebugEnabled()) {
+            LOG.debug("CloudControllerServiceImpl:updateContainers for cluster : "+clusterId);
         }
 
         ClusterContext ctxt = dataHolder.getClusterContext(clusterId);
 
         if (ctxt == null) {
             String msg = "Instance start-up failed. Invalid cluster id. " + clusterId;
-            log.error(msg);
+            LOG.error(msg);
             throw new IllegalArgumentException(msg);
         }
         
@@ -1653,7 +1642,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
             String msg =
                          "Instance start-up failed. No matching Cartridge found [type] "+cartridgeType 
                              +". [cluster id] "+ clusterId;
-            log.error(msg);
+            LOG.error(msg);
             throw new UnregisteredCartridgeException(msg);
         }
 
@@ -1666,22 +1655,22 @@ public class CloudControllerServiceImpl implements CloudControllerService {
                 String msg =
                              "Instance start-up failed. No matching Kubernetes Context Found for [id] "+kubernetesClusterId 
                              +". [cluster id] "+ clusterId;
-                log.error(msg);
+                LOG.error(msg);
                 throw new UnregisteredCartridgeException(msg);
             }
             
             KubernetesApiClient kubApi = kubClusterContext.getKubApi();
             
             // update the replication controller - cluster id = replication controller id
-            if (log.isDebugEnabled()) {
-                log.debug("Cloud Controller is delegating request to update a replication controller "+clusterId+
+            if (LOG.isDebugEnabled()) {
+                LOG.debug("Cloud Controller is delegating request to update a replication controller "+clusterId+
                         " to Kubernetes layer.");
             }
             
             kubApi.updateReplicationController(clusterId, replicas);
             
-            if (log.isDebugEnabled()) {
-                log.debug("Cloud Controller successfully updated the controller "
+            if (LOG.isDebugEnabled()) {
+                LOG.debug("Cloud Controller successfully updated the controller "
                         + clusterId + " via Kubernetes layer.");
             }
             
@@ -1695,9 +1684,9 @@ public class CloudControllerServiceImpl implements CloudControllerService {
             for (int i = 0; i < replicas ; i++) {
                 allPods = kubApi.getSelectedPods(new Label[]{l});
                 
-                if (log.isDebugEnabled()) {
+                if (LOG.isDebugEnabled()) {
                     
-                    log.debug("Pods Count: "+allPods.length+" for cluster: "+clusterId);
+                    LOG.debug("Pods Count: "+allPods.length+" for cluster: "+clusterId);
                 }
                 if(allPods.length == replicas) {
                     break;
@@ -1705,9 +1694,9 @@ public class CloudControllerServiceImpl implements CloudControllerService {
                 Thread.sleep(5000);
             }
             
-            if (log.isDebugEnabled()) {
+            if (LOG.isDebugEnabled()) {
                 
-                log.debug(String.format("Pods created : %s for cluster : %s",allPods.length, clusterId));
+                LOG.debug(String.format("Pods created : %s for cluster : %s",allPods.length, clusterId));
             }
             
             List<MemberContext> memberContexts = new ArrayList<MemberContext>();
@@ -1744,19 +1733,19 @@ public class CloudControllerServiceImpl implements CloudControllerService {
             // persist in registry
             persist();
 
-            log.info("Kubernetes entities are successfully starting up. "+memberContexts);
+            LOG.info("Kubernetes entities are successfully starting up. "+memberContexts);
 
             return memberContexts.toArray(new MemberContext[0]);
 
         } catch (Exception e) {
             String msg = "Failed to update containers belong to cluster " + clusterId+". Cause: "+e.getMessage();
-            log.error(msg, e);
+            LOG.error(msg, e);
             throw new IllegalStateException(msg, e);
         }
 	}
 
     @Override
-    public void terminateContainer(String memberId) throws MemberTerminationFailedException {
+    public MemberContext terminateContainer(String memberId) throws MemberTerminationFailedException {
 
         handleNullObject(memberId, "Failed to terminate member. Invalid Member id. [Member id] " + memberId);
 
@@ -1789,19 +1778,22 @@ public class CloudControllerServiceImpl implements CloudControllerService {
             // member id = pod id
             kubApi.deletePod(memberId);
             
-            dataHolder.removeMemberContext(memberId, clusterId);
-            // persist
-            persist();
+            MemberContext removedMemberContext = dataHolder.removeMemberContext(memberId, clusterId);
+            
+            logTermination(removedMemberContext);
+            
+            return removedMemberContext;
+            
         } catch (KubernetesClientException e) {
             String msg = String.format("Failed to terminate member [Member id] %s", memberId);
-            log.error(msg, e);
+            LOG.error(msg, e);
             throw new MemberTerminationFailedException(msg, e);
         }
     }
     
     private void handleNullObject(Object obj, String errorMsg) {
         if (obj == null) {
-            log.error(errorMsg);
+            LOG.error(errorMsg);
             throw new IllegalArgumentException(errorMsg);
         }
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/7373d86c/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 398467c..d81eab7 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
@@ -133,22 +133,24 @@ public interface CloudControllerService {
     /**
      * Terminate all containers of the given cluster.
      * @param clusterId id of the subjected cluster.
+     * @return terminated {@link MemberContext}s
      * @throws InvalidClusterException
      */
-    void terminateAllContainers(String clusterId) throws InvalidClusterException;
+    MemberContext[] terminateAllContainers(String clusterId) throws InvalidClusterException;
     
     /**
      * Terminate a given member/Kubernetes Pod.
      * @param memberId member/Pod id to be terminated.
+     * @return terminated {@link MemberContext}
      * @throws MemberTerminationFailedException
      */
-    void terminateContainer(String memberId) throws MemberTerminationFailedException;
+    MemberContext 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.
-     * @return newly created Members if any.
+     * @return newly created Members if any / terminated {@link MemberContext} in scale down scenario.
      * @throws InvalidClusterException
      */
     MemberContext[] updateContainers(String clusterId, int replicas) throws UnregisteredCartridgeException;

http://git-wip-us.apache.org/repos/asf/stratos/blob/7373d86c/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/jcloud/ComputeServiceBuilderUtil.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/jcloud/ComputeServiceBuilderUtil.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/jcloud/ComputeServiceBuilderUtil.java
index ac30f01..d8bda9e 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/jcloud/ComputeServiceBuilderUtil.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/jcloud/ComputeServiceBuilderUtil.java
@@ -47,7 +47,6 @@ public class ComputeServiceBuilderUtil {
     private static final Log log = LogFactory.getLog(ComputeServiceBuilderUtil.class);
     
     public static byte[] getUserData(String payloadFileName) {
-        // String userData = null;
         byte[] bytes = null;
         try {
             File file = new File(payloadFileName);


[42/50] [abbrv] git commit: Scheduled executor service pool to schedule tasks in CC.

Posted by ni...@apache.org.
Scheduled executor service pool to schedule tasks in CC.


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

Branch: refs/heads/master
Commit: 8f9148dd81e98f0c4987c795fe381a60f184469e
Parents: 652d398
Author: Nirmal Fernando <ni...@gmail.com>
Authored: Fri Oct 10 19:47:37 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:58 2014 +0530

----------------------------------------------------------------------
 .../concurrent/ScheduledThreadExecutor.java     | 78 ++++++++++++++++++++
 1 file changed, 78 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/8f9148dd/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/concurrent/ScheduledThreadExecutor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/concurrent/ScheduledThreadExecutor.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/concurrent/ScheduledThreadExecutor.java
new file mode 100644
index 0000000..56f2a2c
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/concurrent/ScheduledThreadExecutor.java
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one 
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
+ * KIND, either express or implied.  See the License for the 
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.stratos.cloud.controller.concurrent;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * This class can be used to create a scheduled executor pool, and hand over new jobs to the pool.
+ */
+public class ScheduledThreadExecutor {
+    private ScheduledExecutorService executor;
+
+    private static class Holder {
+        private static final ScheduledThreadExecutor INSTANCE = new ScheduledThreadExecutor();
+    }
+    
+    public static ScheduledThreadExecutor getInstance() {
+        return Holder.INSTANCE;
+    }
+    
+    private ScheduledThreadExecutor() {
+        executor = Executors.newScheduledThreadPool(50);
+    }
+    
+    public ScheduledFuture<?> schedule(Runnable job, int interval){
+        return executor.scheduleAtFixedRate(job, 0, interval, TimeUnit.MILLISECONDS);
+    }
+    
+    public List<ScheduledFuture<?>> scheduleAll(Runnable[] jobs, int interval){
+        List<ScheduledFuture<?>> list = new ArrayList<ScheduledFuture<?>>();
+        for (Runnable job : jobs) {
+            
+            list.add(this.schedule(job, interval));
+        }
+        return list;
+    }
+    
+    public void shutdown() {
+        executor.shutdown(); // Disable new tasks from being submitted
+        try {
+          // Wait a while for existing tasks to terminate
+          if (!executor.awaitTermination(60, TimeUnit.SECONDS)) {
+            executor.shutdownNow(); // Cancel currently executing tasks
+            // Wait a while for tasks to respond to being cancelled
+            if (!executor.awaitTermination(60, TimeUnit.SECONDS))
+                System.err.println("Pool did not terminate");
+          }
+        } catch (InterruptedException ie) {
+          // (Re-)Cancel if current thread also interrupted
+          executor.shutdownNow();
+          // Preserve interrupt status
+          Thread.currentThread().interrupt();
+        }
+    }
+    
+    
+}


[28/50] [abbrv] git commit: RestClient now using a ConnectionManager pool.

Posted by ni...@apache.org.
RestClient now using a ConnectionManager pool.


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

Branch: refs/heads/master
Commit: 6679d0630ea5a3c356fb9f7febcbd78b7728da25
Parents: 9e25fcd
Author: Nirmal Fernando <ni...@gmail.com>
Authored: Fri Oct 10 19:42:49 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:57 2014 +0530

----------------------------------------------------------------------
 .../kubernetes/client/rest/RestClient.java      | 47 +++++++++++++-------
 1 file changed, 30 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/6679d063/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/rest/RestClient.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/rest/RestClient.java b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/rest/RestClient.java
index 061c6d6..7d55c70 100644
--- a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/rest/RestClient.java
+++ b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/rest/RestClient.java
@@ -18,23 +18,30 @@
  */
 package org.apache.stratos.kubernetes.client.rest;
 
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.net.SocketException;
 import java.net.URI;
 
-import org.apache.http.HttpResponse;
 import org.apache.http.client.methods.HttpDelete;
 import org.apache.http.client.methods.HttpGet;
 import org.apache.http.client.methods.HttpPost;
 import org.apache.http.client.methods.HttpPut;
+import org.apache.http.client.methods.HttpRequestBase;
 import org.apache.http.entity.StringEntity;
 import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.impl.conn.PoolingClientConnectionManager;
 
 public class RestClient {
 
     private DefaultHttpClient httpClient;
+    
+    public RestClient() {
+        PoolingClientConnectionManager cm = new PoolingClientConnectionManager();
+        // Increase max total connection to 200
+        cm.setMaxTotal(200);
+        // Increase default max connection per route to 50
+        cm.setDefaultMaxPerRoute(50);
+        
+        httpClient = new DefaultHttpClient(cm);
+    }
 
 	/**
      * Handle http post request. Return String
@@ -54,9 +61,9 @@ public class RestClient {
      *             if any errors occur when executing the request
      */
     public KubernetesResponse doPost(URI resourcePath, String jsonParamString) throws Exception{
+        HttpPost postRequest = null;
         try {
-        	httpClient = new DefaultHttpClient();
-            HttpPost postRequest = new HttpPost(resourcePath);
+            postRequest = new HttpPost(resourcePath);
 
             StringEntity input = new StringEntity(jsonParamString);
             input.setContentType("application/json");
@@ -66,7 +73,7 @@ public class RestClient {
 
             return response;
         } finally {
-        	 httpClient.getConnectionManager().shutdown();
+            releaseConnection(postRequest);
         }
     }
 
@@ -86,22 +93,22 @@ public class RestClient {
      *             if any errors occur when executing the request
      */
     public KubernetesResponse doGet(URI resourcePath) throws Exception{
+        HttpGet getRequest = null;
         try {
-        	httpClient = new DefaultHttpClient();
-            HttpGet getRequest = new HttpGet(resourcePath);
+            getRequest = new HttpGet(resourcePath);
             getRequest.addHeader("Content-Type", "application/json");
 
             KubernetesResponse response = httpClient.execute(getRequest, new KubernetesResponseHandler());
             return response;
         } finally {
-        	 httpClient.getConnectionManager().shutdown();
+            releaseConnection(getRequest);
         }
     }
     
     public KubernetesResponse doDelete(URI resourcePath) throws Exception {
+        HttpDelete httpDelete = null;
         try {
-        	httpClient = new DefaultHttpClient();
-            HttpDelete httpDelete = new HttpDelete(resourcePath);
+            httpDelete = new HttpDelete(resourcePath);
             httpDelete.addHeader("Content-Type", "application/json");
 
             KubernetesResponse response = httpClient.execute(httpDelete, new KubernetesResponseHandler());
@@ -109,15 +116,15 @@ public class RestClient {
             return  response;
 
         } finally {
-        	 httpClient.getConnectionManager().shutdown();
+        	 releaseConnection(httpDelete);
         }
     }
 
     public KubernetesResponse doPut(URI resourcePath, String jsonParamString) throws Exception {
 
+        HttpPut putRequest = null;
 		try {
-			httpClient = new DefaultHttpClient();
-			HttpPut putRequest = new HttpPut(resourcePath);
+			putRequest = new HttpPut(resourcePath);
 
 			StringEntity input = new StringEntity(jsonParamString);
 			input.setContentType("application/json");
@@ -128,8 +135,14 @@ public class RestClient {
 			return response;
 		
 		} finally {
-			httpClient.getConnectionManager().shutdown();
+			releaseConnection(putRequest);
 		}
     }
+    
+    private void releaseConnection(HttpRequestBase request) {
+        if (request != null) {
+            request.releaseConnection();
+        }
+    }
 
 }
\ No newline at end of file


[37/50] [abbrv] git commit: adding terminateContainer logic to AS and refactoring drools logging

Posted by ni...@apache.org.
adding terminateContainer logic to AS and refactoring drools logging


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

Branch: refs/heads/master
Commit: 4aa518df76532a9fdc8aeeeb0f5e54af3db5338f
Parents: 67313a1
Author: R-Rajkumar <rr...@gmail.com>
Authored: Fri Oct 10 16:38:52 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:57 2014 +0530

----------------------------------------------------------------------
 .../cloud/controller/CloudControllerClient.java | 16 ++++++
 .../monitor/KubernetesClusterMonitor.java       | 33 +++++++++--
 .../autoscaler/rule/RuleTasksDelegator.java     |  9 +++
 .../src/main/conf/container-mincheck.drl        | 31 +++++++---
 .../src/main/conf/container-scaling.drl         | 60 ++++++++++----------
 5 files changed, 107 insertions(+), 42 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/4aa518df/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
index ce69875..8ec9f8e 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
@@ -38,6 +38,7 @@ import org.apache.stratos.cloud.controller.stub.CloudControllerServiceInvalidClu
 import org.apache.stratos.cloud.controller.stub.CloudControllerServiceInvalidIaasProviderExceptionException;
 import org.apache.stratos.cloud.controller.stub.CloudControllerServiceInvalidMemberExceptionException;
 import org.apache.stratos.cloud.controller.stub.CloudControllerServiceInvalidPartitionExceptionException;
+import org.apache.stratos.cloud.controller.stub.CloudControllerServiceMemberTerminationFailedExceptionException;
 import org.apache.stratos.cloud.controller.stub.CloudControllerServiceStub;
 import org.apache.stratos.cloud.controller.stub.CloudControllerServiceUnregisteredCartridgeExceptionException;
 import org.apache.stratos.cloud.controller.stub.deployment.partition.Partition;
@@ -328,4 +329,19 @@ public class CloudControllerClient {
             throw new SpawningException(msg, e);
         } 
     }
+    
+    public synchronized void terminateContainer(String memberId) throws TerminationException{
+    	try {
+			stub.terminateContainer(memberId);
+		} catch (RemoteException e) {
+            String msg = "Error while updating kubernetes controller, cannot communicate with " +
+                    "cloud controller service";
+            log.error(msg, e);
+            throw new TerminationException(msg, e);
+		} catch (CloudControllerServiceMemberTerminationFailedExceptionException e) {
+            String msg = "Error while terminating container, member not valid for member id : " + memberId;
+            log.error(msg, e);
+            throw new TerminationException(msg, e);
+		}
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/4aa518df/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/KubernetesClusterMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/KubernetesClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/KubernetesClusterMonitor.java
index d90e0b6..9375a8e 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/KubernetesClusterMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/KubernetesClusterMonitor.java
@@ -381,7 +381,7 @@ public abstract class KubernetesClusterMonitor extends AbstractClusterMonitor {
 
         // no need to do anything here
         // we will not be receiving this event for containers
-        // because we just kill the containers
+        // we will only receive member terminated event
     }
 
     @Override
@@ -390,16 +390,39 @@ public abstract class KubernetesClusterMonitor extends AbstractClusterMonitor {
 
         // no need to do anything here
         // we will not be receiving this event for containers
-        // because we just kill the containers
+    	// we will only receive member terminated event
     }
 
     @Override
     public void handleMemberTerminatedEvent(
             MemberTerminatedEvent memberTerminatedEvent) {
 
-        // no need to do anything here
-        // we will not be receiving this event for containers
-        // because we just kill the containers
+        String memberId = memberTerminatedEvent.getMemberId();
+        if (getKubernetesClusterCtxt().removeTerminationPendingMember(memberId)) {
+            if (log.isDebugEnabled()) {
+                log.debug(String.format("Member is removed from termination pending members list: "
+                                        + "[member] %s", memberId));
+            }
+        } else if (getKubernetesClusterCtxt().removePendingMember(memberId)) {
+            if (log.isDebugEnabled()) {
+                log.debug(String.format("Member is removed from pending members list: "
+                                        + "[member] %s", memberId));
+            }
+        } else if (getKubernetesClusterCtxt().removeActiveMemberById(memberId)) {
+            log.warn(String.format("Member is in the wrong list and it is removed from "
+                                   + "active members list", memberId));
+        } else if (getKubernetesClusterCtxt().removeObsoleteMember(memberId)) {
+            log.warn(String.format("Member's obsolated timeout has been expired and "
+                                   + "it is removed from obsolated members list", memberId));
+        } else {
+            log.warn(String.format("Member is not available in any of the list active, "
+                                   + "pending and termination pending", memberId));
+        }
+
+        if (log.isInfoEnabled()) {
+            log.info(String.format("Member stat context has been removed successfully: "
+                                   + "[member] %s", memberId));
+        }
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/stratos/blob/4aa518df/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 9d3227a..0a9bde3 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
@@ -264,6 +264,15 @@ public class RuleTasksDelegator {
             log.error("Cannot update kubernetes controller ", e);
         }
     }
+    
+    public void delegateTerminateContainer(KubernetesClusterContext kubernetesClusterContext, String memberId) {
+    	try {
+    		CloudControllerClient ccClient = CloudControllerClient.getInstance();
+    		ccClient.terminateContainer(memberId);
+    	} catch (Throwable e) {
+    		log.error("Cannot delete container ", e);
+    	}
+    }
 
     public int getPredictedReplicasForStat(int minReplicas, float statUpperLimit, float statPredictedValue) {
         if (statUpperLimit == 0) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/4aa518df/products/stratos/modules/distribution/src/main/conf/container-mincheck.drl
----------------------------------------------------------------------
diff --git a/products/stratos/modules/distribution/src/main/conf/container-mincheck.drl b/products/stratos/modules/distribution/src/main/conf/container-mincheck.drl
index 605c553..9798852 100644
--- a/products/stratos/modules/distribution/src/main/conf/container-mincheck.drl
+++ b/products/stratos/modules/distribution/src/main/conf/container-mincheck.drl
@@ -26,7 +26,7 @@ global org.apache.stratos.autoscaler.rule.RuleLog log;
 global org.apache.stratos.autoscaler.rule.RuleTasksDelegator $delegator;
 global java.lang.String clusterId;
  
-rule "Minimum Rule"
+rule "Container Minimum Rule"
 dialect "mvel"
 	when
            $kubernetesClusterContext : KubernetesClusterContext ()
@@ -36,20 +36,37 @@ dialect "mvel"
            isServiceClusterCreated : Boolean() from $kubernetesClusterContext.isServiceClusterCreated()
 	   
            eval(log.debug("Running minimum rule: [kub-cluster] " +kubernetesClusterId + " [cluster] " + clusterId))
-           eval(log.debug("[min-check] " + " [cluster] " + clusterId + " [Replicas] nonTerminated : " + nonTerminatedReplicas))
-	   eval(log.debug("[min-check] " + " [cluster] " + clusterId + " [Replicas] minReplicas : " + minReplicas))
+           eval(log.debug("[min-check] " + " [cluster] : " + clusterId + " [Replicas] nonTerminated : " + nonTerminatedReplicas))
+	   eval(log.debug("[min-check] " + " [cluster] : " + clusterId + " [Replicas] minReplicas : " + minReplicas))
 	   eval(nonTerminatedReplicas < minReplicas)
        then
            if (isServiceClusterCreated) {
              // we suceeded calling startContainer() once, can't call it again
-              log.info("[min-check] Decided to scale-up : [cluster] " + clusterId);
- 	      log.info("[min-check] " + " [cluster] " + clusterId + " min-rule not satisfied, expanding cluster to minReplicas : " + minReplicas);
+              log.info("[min-check] Decided to scale-up : [cluster] : " + clusterId);
+ 	      log.info("[min-check] " + " [cluster] : " + clusterId + " ; min-rule not satisfied, expanding cluster to minReplicas : " + minReplicas);
               $delegator.delegateUpdateContainers($kubernetesClusterContext, minReplicas);
 	   } else {
              // we should call startContainer
-              log.info("[min-check] Decided to create the cluster : [cluster] " + clusterId);
- 	      log.info("[min-check] " + " [cluster] " + clusterId + " : min-rule not satisfied, no containers created yet, creating minReplicas : " + minReplicas);
+              log.info("[min-check] Decided to create the cluster : [cluster] : " + clusterId);
+ 	      log.info("[min-check] " + " [cluster] : " + clusterId + " ; min-rule not satisfied, no containers created yet, creating minReplicas : " + minReplicas);
               $delegator.delegateStartContainers($kubernetesClusterContext);
            }
 end
 
+rule "Terminate Obsoleted Containers"
+dialect "mvel"
+        when
+           $kubernetesClusterContext : KubernetesClusterContext ()
+           kubernetesClusterId : String() from $kubernetesClusterContext.getKubernetesClusterID()
+           obsoleteReplicas : Integer() from $kubernetesClusterContext.getObsoletedMembers().size()
+
+           eval(log.debug("Running obsolete containers rule [kub-cluster] : " + kubernetesClusterId + " [cluster] : " + clusterId))
+           eval(log.debug("[obsolete-check] " + "[cluster] : " + clusterId + " [Replicas] obsoleteReplicas : " + obsoleteReplicas))
+           eval($kubernetesClusterContext.getObsoletedMembers().keySet().size() > 0)
+           memberId : String() from $kubernetesClusterContext.getObsoletedMembers().keySet()
+           eval(log.debug("[obsolete-check] [kub-cluster] : " + kubernetesClusterId + " [cluster] : " + clusterId + " Member id : " + memberId))
+        then
+           $delegator.delegateTerminateContainer($kubernetesClusterContext, memberId);
+end
+
+

http://git-wip-us.apache.org/repos/asf/stratos/blob/4aa518df/products/stratos/modules/distribution/src/main/conf/container-scaling.drl
----------------------------------------------------------------------
diff --git a/products/stratos/modules/distribution/src/main/conf/container-scaling.drl b/products/stratos/modules/distribution/src/main/conf/container-scaling.drl
index 398049b..46d9aeb 100644
--- a/products/stratos/modules/distribution/src/main/conf/container-scaling.drl
+++ b/products/stratos/modules/distribution/src/main/conf/container-scaling.drl
@@ -40,7 +40,7 @@ dialect "mvel"
         maxReplicas : Integer() from $kubernetesClusterContext.getMaxReplicas()
         nonTerminatedReplicas : Integer() from $kubernetesClusterContext.getNonTerminatedMemberCount()
 
-        eval(log.debug("Running scaling rule : [kub-cluster] " + kubernetesClusterId + " [cluster] " + clusterId))
+        eval(log.debug("Running scaling rule [kub-cluster] : " + kubernetesClusterId + " [cluster] : " + clusterId))
 	
 	$loadThresholds : LoadThresholds() from  autoscalePolicy.getLoadThresholds()
 
@@ -79,81 +79,81 @@ dialect "mvel"
         scaleUp : Boolean() from (scaleUpForRif || scaleUpForMc || scaleUpForLa)
         scaleDown : Boolean() from (scaleDownForRif && scaleDownForMc &&  scaleDownForLa)
 
-        eval(log.debug("[scaling] " + " [cluster] " + clusterId + " [Replicas] nonTerminated : " + nonTerminatedReplicas))
-	eval(log.debug("[scaling] " + " [cluster] " + clusterId + " [Replicas] minReplicas : " + minReplicas))
-	eval(log.debug("[scaling] " + " [cluster] " + clusterId + " [Replicas] maxReplicas : " + maxReplicas))
+        eval(log.debug("[scaling] " + " [cluster] : " + clusterId + " [Replicas] nonTerminated : " + nonTerminatedReplicas))
+	eval(log.debug("[scaling] " + " [cluster] : " + clusterId + " [Replicas] minReplicas : " + minReplicas))
+	eval(log.debug("[scaling] " + " [cluster] : " + clusterId + " [Replicas] maxReplicas : " + maxReplicas))
 
-        eval(log.debug("[scaling] " + " [cluster] " + clusterId + " [RequestInFlight] resetted ? : " + rifReset))
-        eval(log.debug("[scaling] " + " [cluster] " + clusterId + " [RequestInFlight] predicted value : " + rifPredictedValue))
-        eval(log.debug("[scaling] " + " [cluster] " + clusterId + " [RequestInFlight] upper limit : " + rifUpperLimit))
-        eval(log.debug("[scaling] " + " [cluster] " + clusterId + " [RequestInFlight] lower limit : " + rifLowerLimit))
+        eval(log.debug("[scaling] " + " [cluster] : " + clusterId + " [RequestInFlight] resetted ? : " + rifReset))
+        eval(log.debug("[scaling] " + " [cluster] : " + clusterId + " [RequestInFlight] predicted value : " + rifPredictedValue))
+        eval(log.debug("[scaling] " + " [cluster] : " + clusterId + " [RequestInFlight] upper limit : " + rifUpperLimit))
+        eval(log.debug("[scaling] " + " [cluster] : " + clusterId + " [RequestInFlight] lower limit : " + rifLowerLimit))
 
-	eval(log.debug("[scaling] " + " [cluster] " + clusterId + " [MemoryConsumption] resetted ? : " + mcReset))
-        eval(log.debug("[scaling] " + " [cluster] " + clusterId + " [MemoryConsumption] predicted value : " + mcPredictedValue))
-        eval(log.debug("[scaling] " + " [cluster] " + clusterId + " [MemoryConsumption] upper limit : " + mcUpperLimit))
-        eval(log.debug("[scaling] " + " [cluster] " + clusterId + " [MemoryConsumption] lower limit : " + mcLowerLimit))
+	eval(log.debug("[scaling] " + " [cluster] : " + clusterId + " [MemoryConsumption] resetted ? : " + mcReset))
+        eval(log.debug("[scaling] " + " [cluster] : " + clusterId + " [MemoryConsumption] predicted value : " + mcPredictedValue))
+        eval(log.debug("[scaling] " + " [cluster] : " + clusterId + " [MemoryConsumption] upper limit : " + mcUpperLimit))
+        eval(log.debug("[scaling] " + " [cluster] : " + clusterId + " [MemoryConsumption] lower limit : " + mcLowerLimit))
 
-	eval(log.debug("[scaling] " + " [cluster] " + clusterId + " [LoadAverage] resetted ? : " + laReset))
-        eval(log.debug("[scaling] " + " [cluster] " + clusterId + " [LoadAverage] predicted value : " + laPredictedValue))
-        eval(log.debug("[scaling] " + " [cluster] " + clusterId + " [LoadAverage] upper limit : " + laUpperLimit))
-        eval(log.debug("[scaling] " + " [cluster] " + clusterId + " [LoadAverage] lower limit : " + laLowerLimit))
+	eval(log.debug("[scaling] " + " [cluster] : " + clusterId + " [LoadAverage] resetted ? : " + laReset))
+        eval(log.debug("[scaling] " + " [cluster] : " + clusterId + " [LoadAverage] predicted value : " + laPredictedValue))
+        eval(log.debug("[scaling] " + " [cluster] : " + clusterId + " [LoadAverage] upper limit : " + laUpperLimit))
+        eval(log.debug("[scaling] " + " [cluster] : " + clusterId + " [LoadAverage] lower limit : " + laLowerLimit))
 
-        eval(log.debug("[scaling] " + " [cluster] " + clusterId + " Scale-up action : " + scaleUp))
-        eval(log.debug("[scaling] " + " [cluster] " + clusterId + " Scale-down action : " + scaleDown))
+        eval(log.debug("[scaling] " + " [cluster] : " + clusterId + " scale-up action : " + scaleUp))
+        eval(log.debug("[scaling] " + " [cluster] : " + clusterId + " scale-down action : " + scaleDown))
 
 	then
         if (scaleUp) {
 	    int requiredReplicas = 0;
 	    if (scaleUpForRif) {
               int predictedReplicasForRif = $delegator.getPredictedReplicasForStat(minReplicas, rifUpperLimit, rifPredictedValue);
-	      log.info("[scaling] " + " [cluster] " + clusterId + " [RequestInFlight] predicted replicas : " + predictedReplicasForRif);
+	      log.info("[scaling] " + " [cluster] : " + clusterId + " [RequestInFlight] predicted replicas : " + predictedReplicasForRif);
               if (predictedReplicasForRif > requiredReplicas ) {
                 requiredReplicas = predictedReplicasForRif;
               }
 	    } 
 	    if (scaleUpForMc) {
               int predictedReplicasForMc = $delegator.getPredictedReplicasForStat(minReplicas, mcUpperLimit, mcPredictedValue);
-              log.info("[scaling] " + " [cluster] " + clusterId + " [MemoryConsumption] predicted replicas : " + predictedReplicasForMc);
+              log.info("[scaling] " + " [cluster] : " + clusterId + " [MemoryConsumption] predicted replicas : " + predictedReplicasForMc);
               if (predictedReplicasForMc > requiredReplicas ) {
                 requiredReplicas = predictedReplicasForMc;
               }
             }
             if (scaleUpForLa) {
               int predictedReplicasForLa = $delegator.getPredictedReplicasForStat(minReplicas, laUpperLimit, laPredictedValue);
-              log.info("[scaling] " + " [cluster] " + clusterId + " [LoadAverage] predicted replicas : " + predictedReplicasForLa);
+              log.info("[scaling] " + " [cluster] : " + clusterId + " [LoadAverage] predicted replicas : " + predictedReplicasForLa);
               if (predictedReplicasForLa > requiredReplicas ) {
                 requiredReplicas = predictedReplicasForLa;
               }
             }
 	    //max-check
 	    if (requiredReplicas > maxReplicas) {
-	      log.info("[scaling] " + " [cluster] " + clusterId + " predicted replicas > max replicas : ");
+	      log.info("[scaling] " + " [cluster] : " + clusterId + " predicted replicas > max replicas : ");
               requiredReplicas = maxReplicas;
             }
 	    //min-check
 	    if (requiredReplicas < minReplicas) {
-	      log.info("[scaling] " + " [cluster] " + clusterId + " predicted replicas < min replicas : ");
+	      log.info("[scaling] " + " [cluster] : " + clusterId + " predicted replicas < min replicas : ");
               requiredReplicas = minReplicas;
             }
             //expand the cluster
             if (requiredReplicas > nonTerminatedReplicas) {
-              log.info("[scaling] Decided to scale-up : [cluster] " + clusterId);
- 	      log.info("[scaling-up] " + " [cluster] " + clusterId + " valid number of replicas to expand : " + requiredReplicas);
+              log.info("[scaling] Decided to scale-up : [cluster] : " + clusterId);
+ 	      log.info("[scaling-up] " + " [cluster] : " + clusterId + " valid number of replicas to expand : " + requiredReplicas);
 	      $delegator.delegateUpdateContainers($kubernetesClusterContext, requiredReplicas);
             }
             //shrink the cluster
             if (requiredReplicas < nonTerminatedReplicas) {
-              log.info("[scaling] Decided to scale-down : [cluster] " + clusterId);
- 	      log.info("[scaling-down] " + " [cluster] " + clusterId + " valid number of replicas to shrink : " + requiredReplicas);
+              log.info("[scaling] Decided to scale-down : [cluster] : " + clusterId);
+ 	      log.info("[scaling-down] " + " [cluster] : " + clusterId + " valid number of replicas to shrink : " + requiredReplicas);
 	      $delegator.delegateUpdateContainers($kubernetesClusterContext, requiredReplicas);
             }
             if (requiredReplicas == nonTerminatedReplicas) {
- 	      log.info("[scaling] " + " [cluster] " + clusterId + "non terminated replicas and predicted replicas are same");
+ 	      log.info("[scaling] " + " [cluster] : " + clusterId + "non terminated replicas and predicted replicas are same");
             }
             
         } else if (scaleDown) {
-            log.info("[scaling] Decided to scale-down : [cluster] " + clusterId);
-            log.info("[scaling-down] " + " [cluster] " + clusterId + " shrink the cluster to minReplicas : " + minReplicas);
+            log.info("[scaling] Decided to scale-down [cluster] : " + clusterId);
+            log.info("[scaling-down] " + " [cluster] : " + clusterId + " shrink the cluster to minReplicas : " + minReplicas);
             //shrink the cluster to minReplicas
             $delegator.delegateUpdateContainers($kubernetesClusterContext, minReplicas);
         } else {


[19/50] [abbrv] git commit: Fixing a minor sonar issue - using all-caps for static final variables.

Posted by ni...@apache.org.
Fixing a minor sonar issue - using all-caps for static final variables.


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

Branch: refs/heads/master
Commit: f5c34c0eb9cc878b035030fe5576a7354a4ea0c7
Parents: a7c0134
Author: Nirmal Fernando <ni...@gmail.com>
Authored: Thu Oct 9 18:55:46 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:56 2014 +0530

----------------------------------------------------------------------
 .../controller/axiom/AxiomXpathParserUtil.java  | 20 +++++++++++---------
 1 file changed, 11 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/f5c34c0e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/AxiomXpathParserUtil.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/AxiomXpathParserUtil.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/AxiomXpathParserUtil.java
index f10e4cc..62eec5f 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/AxiomXpathParserUtil.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/AxiomXpathParserUtil.java
@@ -56,7 +56,9 @@ import java.util.*;
  */
 public class AxiomXpathParserUtil {
 
-    private static final Log log = LogFactory.getLog(AxiomXpathParserUtil.class);
+    private static final Log LOG = LogFactory.getLog(AxiomXpathParserUtil.class);
+    
+    private AxiomXpathParserUtil(){}
     
     public static OMElement parse(File xmlSource) throws MalformedConfigurationFileException,
         IllegalArgumentException {
@@ -65,7 +67,7 @@ public class AxiomXpathParserUtil {
 
         if (xmlSource == null) {
             String msg = "File is null.";
-            log.error(msg);
+            LOG.error(msg);
             throw new IllegalArgumentException(msg);
         }
 
@@ -75,11 +77,11 @@ public class AxiomXpathParserUtil {
 
         } catch (XMLStreamException e) {
             String msg = "Failed to parse the configuration file : " + xmlSource.getPath();
-            log.error(msg, e);
+            LOG.error(msg, e);
             throw new MalformedConfigurationFileException(msg, e);
         } catch (FileNotFoundException e) {
             String msg = "Configuration file cannot be found : " + xmlSource.getPath();
-            log.error(msg);
+            LOG.error(msg);
             throw new MalformedConfigurationFileException(msg);
         }
 
@@ -134,13 +136,13 @@ public class AxiomXpathParserUtil {
 
     private static void neglectingWarn(final String fileName, final String elt, final int size) {
         if (size > 1) {
-            log.warn(fileName + " contains more than one " + elt + " elements!" +
+            LOG.warn(fileName + " contains more than one " + elt + " elements!" +
                      " Elements other than the first will be neglected.");
         }
     }
 
     public static void plainTextWarn(final String elt) {
-        log.warn("Unable to find a value for " + elt + " element from Secure Vault." +
+        LOG.warn("Unable to find a value for " + elt + " element from Secure Vault." +
                  "Hence we will try to assign the plain text value (if specified).");
     }
 
@@ -162,7 +164,7 @@ public class AxiomXpathParserUtil {
             return nodeList.isEmpty() ?  null : nodeList.get(0);
         } catch (JaxenException e) {
             String msg = "Error occurred while reading the Xpath (" + xpath + ")";
-            log.error(msg, e);
+            LOG.error(msg, e);
             throw new MalformedConfigurationFileException(msg, e);
         }
 
@@ -184,7 +186,7 @@ public class AxiomXpathParserUtil {
             return nodeList;
         } catch (JaxenException e) {
             String msg = "Error occurred while reading the Xpath (" + xpath + ")";
-            log.error(msg, e);
+            LOG.error(msg, e);
             throw new MalformedConfigurationFileException(msg, e);
         }
 
@@ -208,7 +210,7 @@ public class AxiomXpathParserUtil {
             return nodeList;
         } catch (JaxenException e) {
             String msg = "Error occurred while reading the Xpath (" + xpath + ")";
-            log.error(msg, e);
+            LOG.error(msg, e);
             throw new MalformedConfigurationFileException(msg, e);
         }
 


[44/50] [abbrv] git commit: Handling NPE in docker case.

Posted by ni...@apache.org.
Handling NPE in docker case.


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

Branch: refs/heads/master
Commit: 848f23c0d66f05f23699ddfb02c51434b5bbc29b
Parents: d7fc233
Author: Nirmal Fernando <ni...@gmail.com>
Authored: Fri Oct 10 20:30:21 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:58 2014 +0530

----------------------------------------------------------------------
 .../cloud/controller/impl/CloudControllerServiceImpl.java | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/848f23c0/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 25e19ce..5acb86c 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
@@ -866,14 +866,20 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 
 	private void logTermination(MemberContext memberContext) {
 
+	    if (memberContext == null) {
+	        return;
+	    }
+	    
+	    String partitionId = memberContext.getPartition() == null ? null : memberContext.getPartition().getId();
+	    
         //updating the topology
         TopologyBuilder.handleMemberTerminated(memberContext.getCartridgeType(), 
         		memberContext.getClusterId(), memberContext.getNetworkPartitionId(), 
-        		memberContext.getPartition().getId(), memberContext.getMemberId());
+        		partitionId, memberContext.getMemberId());
 
         //publishing data
         CartridgeInstanceDataPublisher.publish(memberContext.getMemberId(),
-                                                        memberContext.getPartition().getId(),
+                                                        partitionId,
                                                         memberContext.getNetworkPartitionId(),
                                                         memberContext.getClusterId(),
                                                         memberContext.getCartridgeType(),


[21/50] [abbrv] git commit: adding container drool files

Posted by ni...@apache.org.
adding container drool files


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

Branch: refs/heads/master
Commit: 36c40b0055eb4287aa55e4d5e027fbf06a35a45c
Parents: 742a08d
Author: R-Rajkumar <rr...@gmail.com>
Authored: Thu Oct 9 10:50:08 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:56 2014 +0530

----------------------------------------------------------------------
 .../modules/distribution/src/assembly/bin.xml   |  16 +-
 .../src/main/conf/container-mincheck.drl        |  48 ++++++
 .../src/main/conf/container-scaling.drl         | 148 +++++++++++++++++++
 3 files changed, 211 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/36c40b00/products/stratos/modules/distribution/src/assembly/bin.xml
----------------------------------------------------------------------
diff --git a/products/stratos/modules/distribution/src/assembly/bin.xml b/products/stratos/modules/distribution/src/assembly/bin.xml
index a318f5c..4295576 100755
--- a/products/stratos/modules/distribution/src/assembly/bin.xml
+++ b/products/stratos/modules/distribution/src/assembly/bin.xml
@@ -660,7 +660,7 @@
             <filtered>true</filtered>
             <fileMode>755</fileMode>
         </file>
-		<file>
+	<file>
             <source>src/main/conf/mincheck.drl</source>
             <outputDirectory>${pom.artifactId}-${pom.version}/repository/conf</outputDirectory>
             <filtered>true</filtered>
@@ -678,6 +678,20 @@
             <filtered>true</filtered>
             <fileMode>755</fileMode>
         </file>
+                <!-- container-drools files -->
+        <file>
+            <source>src/main/conf/container-mincheck.drl</source>
+            <outputDirectory>${pom.artifactId}-${pom.version}/repository/conf</outputDirectory>
+            <filtered>true</filtered>
+            <fileMode>755</fileMode>
+        </file>
+        <file>
+            <source>src/main/conf/container-scaling.drl</source>
+            <outputDirectory>${pom.artifactId}-${pom.version}/repository/conf</outputDirectory>
+            <filtered>true</filtered>
+            <fileMode>755</fileMode>
+        </file>
+		<!-- container-drools files -->
 		<!-- autoscaler -->
         <file>
             <source>${project.basedir}/INSTALL.txt</source>

http://git-wip-us.apache.org/repos/asf/stratos/blob/36c40b00/products/stratos/modules/distribution/src/main/conf/container-mincheck.drl
----------------------------------------------------------------------
diff --git a/products/stratos/modules/distribution/src/main/conf/container-mincheck.drl b/products/stratos/modules/distribution/src/main/conf/container-mincheck.drl
new file mode 100644
index 0000000..edea3cf
--- /dev/null
+++ b/products/stratos/modules/distribution/src/main/conf/container-mincheck.drl
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one 
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
+ * KIND, either express or implied.  See the License for the 
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.autoscaler.rule;
+
+import org.apache.commons.logging.Log;
+import org.apache.stratos.autoscaler.KubernetesClusterContext;
+
+global org.apache.stratos.autoscaler.rule.RuleLog log;
+global org.apache.stratos.autoscaler.rule.RuleTasksDelegator $delegator;
+global java.lang.String clusterId;
+ 
+rule "Minimum Rule"
+dialect "mvel"
+	when
+           $kubernetesClusterContext : KubernetesClusterContext ()
+	   kubernetesClusterId : String() from $kubernetesClusterContext.getKubernetesClusterID()
+           minReplicas : Integer() from $kubernetesClusterContext.getMinReplicas()
+           nonTerminatedReplicas : Integer() from $kubernetesClusterContext.getNonTerminatedMemberCount()
+	   
+           eval(log.debug("Running minimum rule: [kub-cluster] " +kubernetesClusterId + " [cluster] " + clusterId))
+	   eval(log.debug("[min-check] [kub-cluster] " + kubernetesClusterId 
+				+ " [cluster] " + clusterId + " Non terminated member count: " + nonTerminatedReplicas))
+	   eval(log.debug("[min-check] [kub-cluster] " + kubernetesClusterId
+				+ " [cluster] " + clusterId + " Minimum member count: " + minReplicas))
+	   eval (nonTerminatedReplicas < minReplicas)
+       then
+           log.info("[min-check] [kub-cluster] " + kubernetesClusterId
+	        		+ " [cluster] " + clusterId + " : min-rule not satisfied, creating more containers")
+           $delegator.delegateExpandCluster($kubernetesClusterContext.getClusterId(), minReplicas);
+end
+

http://git-wip-us.apache.org/repos/asf/stratos/blob/36c40b00/products/stratos/modules/distribution/src/main/conf/container-scaling.drl
----------------------------------------------------------------------
diff --git a/products/stratos/modules/distribution/src/main/conf/container-scaling.drl b/products/stratos/modules/distribution/src/main/conf/container-scaling.drl
new file mode 100644
index 0000000..c773264
--- /dev/null
+++ b/products/stratos/modules/distribution/src/main/conf/container-scaling.drl
@@ -0,0 +1,148 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.autoscaler.rule;
+
+import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy;
+import org.apache.stratos.autoscaler.policy.model.LoadThresholds;
+import org.apache.stratos.autoscaler.KubernetesClusterContext;
+
+global org.apache.stratos.autoscaler.rule.RuleLog log;
+global org.apache.stratos.autoscaler.rule.RuleTasksDelegator $delegator;
+global org.apache.stratos.autoscaler.policy.model.AutoscalePolicy autoscalePolicy;
+global java.lang.String clusterId;
+global java.lang.Boolean rifReset;
+global java.lang.Boolean mcReset;
+global java.lang.Boolean laReset;
+
+rule "Scaling Rule"
+dialect "mvel"
+	when
+        $kubernetesClusterContext : KubernetesClusterContext ()
+	kubernetesClusterId : String() from $kubernetesClusterContext.getKubernetesClusterID()
+	minReplicas : Integer() from $kubernetesClusterContext.getMinReplicas()
+        maxReplicas : Integer() from $kubernetesClusterContext.getMaxReplicas()
+
+        eval(log.debug("Running scaling rule : [kub-cluster] " + kubernetesClusterId + " [cluster] " + clusterId))
+	
+	$loadThresholds : LoadThresholds() from  autoscalePolicy.getLoadThresholds()
+
+        rifUpperLimit : Float() from  $loadThresholds.getRequestsInFlight().getUpperLimit()
+        rifLowerLimit : Float() from  $loadThresholds.getRequestsInFlight().getLowerLimit()
+
+        rifAverage : Float() from  $kubernetesClusterContext.getAverageRequestsInFlight()
+        rifGradient : Float() from  $kubernetesClusterContext.getRequestsInFlightGradient()
+        rifSecondDerivative : Float() from  $kubernetesClusterContext.getRequestsInFlightSecondDerivative()
+	rifPredictedValue : Double() from $delegator.getPredictedValueForNextMinute(rifAverage, rifGradient, rifSecondDerivative, 1)
+
+        mcUpperLimit : Float() from  $loadThresholds.getMemoryConsumption().getUpperLimit()
+        mcLowerLimit : Float() from  $loadThresholds.getMemoryConsumption().getLowerLimit()
+
+        memoryConsumptionAverage : Float() from  $kubernetesClusterContext.getAverageMemoryConsumption()
+        memoryConsumptionGradient : Float() from  $kubernetesClusterContext.getMemoryConsumptionGradient()
+        memoryConsumptionSecondDerivative : Float() from  $kubernetesClusterContext.getMemoryConsumptionSecondDerivative()
+	mcPredictedValue : Double() from $delegator.getPredictedValueForNextMinute(memoryConsumptionAverage, memoryConsumptionGradient, memoryConsumptionSecondDerivative, 1)
+
+        laUpperLimit : Float() from  $loadThresholds.getLoadAverage().getUpperLimit()
+        laLowerLimit : Float() from  $loadThresholds.getLoadAverage().getLowerLimit()
+
+        loadAverageAverage : Float() from  $kubernetesClusterContext.getAverageLoadAverage()
+        loadAverageGradient : Float() from  $kubernetesClusterContext.getLoadAverageGradient()
+        loadAverageSecondDerivative : Float() from  $kubernetesClusterContext.getLoadAverageSecondDerivative()
+	laPredictedValue : Double() from $delegator.getPredictedValueForNextMinute(loadAverageAverage, loadAverageGradient, loadAverageSecondDerivative, 1)
+
+        scaleUpForRif : Boolean() from (rifReset && (rifPredictedValue > rifUpperLimit))
+        scaleUpForMc : Boolean() from (mcReset && (mcPredictedValue > mcUpperLimit))
+        scaleUpForLa : Boolean() from (laReset && (laPredictedValue > laUpperLimit))
+
+	scaleDownForRif : Boolean() from (rifReset && (rifPredictedValue < rifLowerLimit))
+        scaleDownForMc : Boolean() from (mcReset && (mcPredictedValue < mcLowerLimit)) 
+        scaleDownForLa : Boolean() from (laReset && (laPredictedValue < laLowerLimit))
+
+        scaleUp : Boolean() from (scaleUpForRif || scaleUpForMc || scaleUpForLa)
+        scaleDown : Boolean() from (scaleDownForRif && scaleDownForMc &&  scaleDownForLa)
+
+	eval(log.debug("[scaling] " + " [cluster] " + clusterId + " [Replicas] minReplicas : " + minReplicas))
+	eval(log.debug("[scaling] " + " [cluster] " + clusterId + " [Replicas] maxReplicas : " + maxReplicas))
+
+        eval(log.debug("[scaling] " + " [cluster] " + clusterId + " [RequestInFlight] resetted ? : " + rifReset))
+        eval(log.debug("[scaling] " + " [cluster] " + clusterId + " [RequestInFlight] predicted value : " + rifPredictedValue))
+        eval(log.debug("[scaling] " + " [cluster] " + clusterId + " [RequestInFlight] upper limit : " + rifUpperLimit))
+        eval(log.debug("[scaling] " + " [cluster] " + clusterId + " [RequestInFlight] lower limit : " + rifLowerLimit))
+
+	eval(log.debug("[scaling] " + " [cluster] " + clusterId + " [MemoryConsumption] resetted ? : " + mcReset))
+        eval(log.debug("[scaling] " + " [cluster] " + clusterId + " [MemoryConsumption] predicted value : " + mcPredictedValue))
+        eval(log.debug("[scaling] " + " [cluster] " + clusterId + " [MemoryConsumption] upper limit : " + mcUpperLimit))
+        eval(log.debug("[scaling] " + " [cluster] " + clusterId + " [MemoryConsumption] lower limit : " + mcLowerLimit))
+
+	eval(log.debug("[scaling] " + " [cluster] " + clusterId + " [LoadAverage] resetted ? : " + laReset))
+        eval(log.debug("[scaling] " + " [cluster] " + clusterId + " [LoadAverage] predicted value : " + laPredictedValue))
+        eval(log.debug("[scaling] " + " [cluster] " + clusterId + " [LoadAverage] upper limit : " + laUpperLimit))
+        eval(log.debug("[scaling] " + " [cluster] " + clusterId + " [LoadAverage] lower limit : " + laLowerLimit))
+
+        eval(log.debug("[scaling] " + " [cluster] " + clusterId + " Scale-up action : " + scaleUp))
+        eval(log.debug("[scaling] " + " [cluster] " + clusterId + " Scale-down action : " + scaleDown))
+
+	then
+        if (scaleUp) {
+	    log.info("[scale-up] Decided to scale up : [kub-cluster] " + kubernetesClusterId + " [cluster] " + clusterId);
+	    int requiredReplicas = 0;
+	    if (scaleUpForRif) {
+              int predictedReplicasForRif = $delegator.getPredictedReplicasForStat(minReplicas, rifUpperLimit, rifPredictedValue);
+	      log.info("[scaling] " + " [cluster] " + clusterId + " [RequestInFlight] predicted replicas : " + predictedReplicasForRif);
+              if (predictedReplicasForRif > requiredReplicas ) {
+                requiredReplicas = predictedReplicasForRif;
+              }
+	    } 
+	    if (scaleUpForMc) {
+              int predictedReplicasForMc = $delegator.getPredictedReplicasForStat(minReplicas, mcUpperLimit, mcPredictedValue);
+              log.info("[scaling] " + " [cluster] " + clusterId + " [MemoryConsumption] predicted replicas : " + predictedReplicasForMc);
+              if (predictedReplicasForMc > requiredReplicas ) {
+                requiredReplicas = predictedReplicasForMc;
+              }
+            }
+            if (scaleUpForLa) {
+              int predictedReplicasForLa = $delegator.getPredictedReplicasForStat(minReplicas, laUpperLimit, laPredictedValue);
+              log.info("[scaling] " + " [cluster] " + clusterId + " [LoadAverage] predicted replicas : " + predictedReplicasForLa);
+              if (predictedReplicasForLa > requiredReplicas ) {
+                requiredReplicas = predictedReplicasForLa;
+              }
+            }
+	    //max-check
+	    if (requiredReplicas > maxReplicas) {
+	      log.info("[scaling] " + " [cluster] " + clusterId + " predicted replicas > max replicas : ");
+              requiredReplicas = maxReplicas;
+            }
+	    //min-check
+	    if (requiredReplicas < minReplicas) {
+	      log.info("[scaling] " + " [cluster] " + clusterId + " predicted replicas < min replicas : ");
+              requiredReplicas = minReplicas;
+            }
+            //expand the cluster
+	    log.info("[scaling] " + " [cluster] " + clusterId + " valid number of replicas to expand : " + requiredReplicas);
+	    $delegator.delegateExpandCluster(clusterId, requiredReplicas);
+        } else if (scaleDown) {
+            log.debug("[scale-down] Decided to scale down : [kub-cluster] " + kubernetesClusterId + " [cluster] " + clusterId);
+            //shrink the cluster to minReplicas
+            $delegator.delegateExpandCluster(clusterId, minReplicas);
+        } else {
+            log.debug("[scaling] No decision made to either scale up or down ... ");
+        }
+end
+


[30/50] [abbrv] git commit: Implementing updateContainers method and fixing a minor sonar issue (removing redundant public modifier )

Posted by ni...@apache.org.
Implementing updateContainers method and fixing a minor sonar issue (removing redundant public modifier )


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

Branch: refs/heads/master
Commit: 63d5cecff4690452c07cf3bbf60cd312bb6b48e1
Parents: afb9daa
Author: Nirmal Fernando <ni...@gmail.com>
Authored: Thu Oct 9 19:01:17 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:57 2014 +0530

----------------------------------------------------------------------
 .../impl/CloudControllerServiceImpl.java        | 135 ++++++++++++++++++-
 .../interfaces/CloudControllerService.java      |  33 ++---
 2 files changed, 146 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/63d5cecf/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 da96ab0..a3fed80 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
@@ -1408,8 +1408,9 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 			
 			kubApi.createService(service);
 			
-			// set host port
+			// set host port and update
 			ctxt.addProperty(StratosConstants.ALLOCATED_SERVICE_HOST_PORT, service.getPort());
+			dataHolder.addClusterContext(ctxt);
 			
 			if (log.isDebugEnabled()) {
 				log.debug("Cloud Controller successfully started the service "
@@ -1426,7 +1427,10 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 			for (int i = 0; i < expectedCount ; i++) {
 			    newlyCreatedPods = kubApi.getSelectedPods(new Label[]{l});
 			    
-			    log.info("Pods "+newlyCreatedPods.length);
+			    if (log.isDebugEnabled()) {
+			        
+			        log.debug("Pods Count: "+newlyCreatedPods.length+" for cluster: "+clusterId);
+			    }
 			    if(newlyCreatedPods.length == expectedCount) {
 			        break;
 			    }
@@ -1456,7 +1460,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
                 // trigger topology
                 // update the topology with the newly spawned member
                 TopologyBuilder.handleMemberSpawned(cartridgeType, clusterId, null,
-                        kubernetesMasterIp, kubernetesMasterIp, context);
+                        pod.getCurrentState().getPodIP(), pod.getCurrentState().getHostIP(), context);
                 // publish data
                 // TODO
 //                CartridgeInstanceDataPublisher.publish(context.getMemberId(), null, null, context.getClusterId(), cartridgeType, MemberStatus.Created.toString(), node);
@@ -1626,10 +1630,129 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 	}
 
 	@Override
-	public void updateKubernetesController(String clusterId, int replicas)
-			throws InvalidClusterException {
-		// TODO Auto-generated method stub
+	public MemberContext[] updateContainers(String clusterId, int replicas)
+			throws UnregisteredCartridgeException {
 		
+	    if(log.isDebugEnabled()) {
+            log.debug("CloudControllerServiceImpl:updateContainers for cluster : "+clusterId);
+        }
+
+        ClusterContext ctxt = dataHolder.getClusterContext(clusterId);
+
+        if (ctxt == null) {
+            String msg = "Instance start-up failed. Invalid cluster id. " + clusterId;
+            log.error(msg);
+            throw new IllegalArgumentException(msg);
+        }
+        
+        String cartridgeType = ctxt.getCartridgeType();
+
+        Cartridge cartridge = dataHolder.getCartridge(cartridgeType);
+
+        if (cartridge == null) {
+            String msg =
+                         "Instance start-up failed. No matching Cartridge found [type] "+cartridgeType 
+                             +". [cluster id] "+ clusterId;
+            log.error(msg);
+            throw new UnregisteredCartridgeException(msg);
+        }
+
+        try {
+            String kubernetesClusterId = validateProperty(StratosConstants.KUBERNETES_CLUSTER_ID, ctxt);
+            
+            KubernetesClusterContext kubClusterContext = dataHolder.getKubernetesClusterContext(kubernetesClusterId);
+            
+            if (kubClusterContext == null) {
+                String msg =
+                             "Instance start-up failed. No matching Kubernetes Context Found for [id] "+kubernetesClusterId 
+                             +". [cluster id] "+ clusterId;
+                log.error(msg);
+                throw new UnregisteredCartridgeException(msg);
+            }
+            
+            KubernetesApiClient kubApi = kubClusterContext.getKubApi();
+            
+            // update the replication controller - cluster id = replication controller id
+            if (log.isDebugEnabled()) {
+                log.debug("Cloud Controller is delegating request to update a replication controller "+clusterId+
+                        " to Kubernetes layer.");
+            }
+            
+            kubApi.updateReplicationController(clusterId, replicas);
+            
+            if (log.isDebugEnabled()) {
+                log.debug("Cloud Controller successfully updated the controller "
+                        + clusterId + " via Kubernetes layer.");
+            }
+            
+            // create a label query
+            Label l = new Label();
+            l.setName(clusterId);
+            // execute the label query
+            Pod[] allPods = new Pod[0];
+            
+            // wait replicas*5s time in the worst case ; best case = 0s
+            for (int i = 0; i < replicas ; i++) {
+                allPods = kubApi.getSelectedPods(new Label[]{l});
+                
+                if (log.isDebugEnabled()) {
+                    
+                    log.debug("Pods Count: "+allPods.length+" for cluster: "+clusterId);
+                }
+                if(allPods.length == replicas) {
+                    break;
+                }
+                Thread.sleep(5000);
+            }
+            
+            if (log.isDebugEnabled()) {
+                
+                log.debug(String.format("Pods created : %s for cluster : %s",allPods.length, clusterId));
+            }
+            
+            List<MemberContext> memberContexts = new ArrayList<MemberContext>();
+            
+            PodToMemberContext podToMemberContextFunc = new PodToMemberContext();
+            // generate Member Contexts
+            for (Pod pod : allPods) {
+                MemberContext context;
+                if ((context = dataHolder.getMemberContextOfMemberId(pod.getId())) == null) {
+                    
+                    context = podToMemberContextFunc.apply(pod);
+                    context.setCartridgeType(cartridgeType);
+                    context.setClusterId(clusterId);
+                    
+                    context.setProperties(CloudControllerUtil.addProperty(context
+                            .getProperties(), StratosConstants.ALLOCATED_SERVICE_HOST_PORT,
+                            ctxt.getProperties().getProperty(StratosConstants.ALLOCATED_SERVICE_HOST_PORT)));
+                    
+                    dataHolder.addMemberContext(context);
+                    
+                    // trigger topology
+                    // update the topology with the newly spawned member
+                    TopologyBuilder.handleMemberSpawned(cartridgeType, clusterId, null,
+                            pod.getCurrentState().getPodIP(), pod.getCurrentState().getHostIP(), context);
+                    
+                    memberContexts.add(context);
+                }
+                // publish data
+                // TODO
+//                CartridgeInstanceDataPublisher.publish(context.getMemberId(), null, null, context.getClusterId(), cartridgeType, MemberStatus.Created.toString(), node);
+                
+            }
+            
+            // persist in registry
+            persist();
+
+            log.info("Kubernetes entities are successfully starting up. "+memberContexts);
+
+            return memberContexts.toArray(new MemberContext[0]);
+
+        } catch (Exception e) {
+            String msg = "Failed to update containers belong to cluster " + clusterId+". Cause: "+e.getMessage();
+            log.error(msg, e);
+            throw new IllegalStateException(msg, e);
+        }
 	}
 
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/63d5cecf/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 5725a2a..7117c1c 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
@@ -43,7 +43,7 @@ public interface CloudControllerService {
 	 * @throws InvalidIaasProviderException if the iaas providers configured are not valid.
 	 * @throws IllegalArgumentException  if the provided argument is not valid.
 	 */
-    public void deployCartridgeDefinition(CartridgeConfig cartridgeConfig) 
+    void deployCartridgeDefinition(CartridgeConfig cartridgeConfig) 
             throws InvalidCartridgeDefinitionException, InvalidIaasProviderException;
     
     /**
@@ -51,7 +51,7 @@ public interface CloudControllerService {
      * @param cartridgeType type of the cartridge to be undeployed.
      * @throws InvalidCartridgeTypeException if the cartridge type specified is not a deployed cartridge.
      */
-    public void undeployCartridgeDefinition(String cartridgeType) throws InvalidCartridgeTypeException;
+    void undeployCartridgeDefinition(String cartridgeType) throws InvalidCartridgeTypeException;
 
     /**
      * Validate a given {@link Partition} for basic property existence.
@@ -59,7 +59,7 @@ public interface CloudControllerService {
      * @return whether the partition is a valid one.
      * @throws InvalidPartitionException if the partition is invalid.
      */
-    public boolean validatePartition(Partition partition) throws InvalidPartitionException;
+    boolean validatePartition(Partition partition) throws InvalidPartitionException;
     
     /**
      * Validate a given {@link DeploymentPolicy} against a Cartridge.
@@ -69,7 +69,7 @@ public interface CloudControllerService {
      * @throws InvalidPartitionException if the policy contains at least one invalid partition.
      * @throws InvalidCartridgeTypeException if the given Cartridge type is not a valid one.
      */
-    public boolean validateDeploymentPolicy(String cartridgeType, Partition[] partitions) 
+     boolean validateDeploymentPolicy(String cartridgeType, Partition[] partitions) 
             throws InvalidPartitionException, InvalidCartridgeTypeException;
 
     /**
@@ -85,7 +85,7 @@ public interface CloudControllerService {
      *             when the cartridge type requested by this service is
      *             not a registered one.
      */
-    public boolean registerService(Registrant registrant) throws UnregisteredCartridgeException;
+    boolean registerService(Registrant registrant) throws UnregisteredCartridgeException;
 
     /**
      * Calling this method will result in an instance startup, which is belong
@@ -97,7 +97,7 @@ public interface CloudControllerService {
      * @throws UnregisteredCartridgeException if the requested Cartridge type is not a registered one.
      * @throws InvalidIaasProviderException if the iaas requested is not valid.
      */
-    public MemberContext startInstance(MemberContext member) throws UnregisteredCartridgeException, InvalidIaasProviderException;
+    MemberContext startInstance(MemberContext member) throws UnregisteredCartridgeException, InvalidIaasProviderException;
     
     /**
      * Create a container cluster.
@@ -105,7 +105,7 @@ public interface CloudControllerService {
      * @return a list of {@link MemberContext}s correspond to each Pod created.
      * @throws UnregisteredCartridgeException if the requested Cartridge type is not a registered one.
      */
-    public MemberContext[] startContainers(ContainerClusterContext clusterContext) throws UnregisteredCartridgeException;
+    MemberContext[] startContainers(ContainerClusterContext clusterContext) throws UnregisteredCartridgeException;
     
     /**
      * Calling this method will result in termination of the instance with given member id in the given Partition.
@@ -117,7 +117,7 @@ public interface CloudControllerService {
      *            an instance need to be terminated..
      * @return whether an instance terminated successfully or not.
      */
-    public void terminateInstance(String memberId) throws InvalidMemberException, InvalidCartridgeTypeException;
+    void terminateInstance(String memberId) throws InvalidMemberException, InvalidCartridgeTypeException;
 
     /**
      * Calling this method will result in termination of all instances belong
@@ -127,36 +127,37 @@ public interface CloudControllerService {
      *            cluster ID of the instance to be terminated.
      * @return whether an instance terminated successfully or not.
      */
-    public void terminateAllInstances(String clusterId) throws InvalidClusterException;
+    void terminateAllInstances(String clusterId) throws InvalidClusterException;
     
     /**
      * Terminate all containers of the given cluster.
      * @param clusterId id of the subjected cluster.
      * @throws InvalidClusterException
      */
-    public void terminateAllContainers(String clusterId) throws InvalidClusterException;
+    void terminateAllContainers(String clusterId) throws InvalidClusterException;
     
     /**
      * 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.
+     * @return newly created Members if any.
      * @throws InvalidClusterException
      */
-    public void updateKubernetesController(String clusterId, int replicas) throws InvalidClusterException;
+    MemberContext[] updateContainers(String clusterId, int replicas) throws UnregisteredCartridgeException;
     
     /**
      * Unregister a docker service identified by the given cluster id.
      * @param clusterId service cluster id.
      * @throws UnregisteredClusterException if the service cluster requested is not a registered one.
      */
-    public void unregisterDockerService(String clusterId) throws UnregisteredClusterException;
+    void unregisterDockerService(String clusterId) throws UnregisteredClusterException;
 
     /**
      * Unregister the service cluster identified by the given cluster id.
      * @param clusterId service cluster id.
      * @throws UnregisteredClusterException if the service cluster requested is not a registered one.
      */
-    public void unregisterService(String clusterId) throws UnregisteredClusterException;
+    void unregisterService(String clusterId) throws UnregisteredClusterException;
     
     /**
      * This method will return the information regarding the given cartridge, if present.
@@ -167,7 +168,7 @@ public interface CloudControllerService {
      * @return {@link org.apache.stratos.cloud.controller.pojo.CartridgeInfo} of the given cartridge type or <code>null</code>.
      * @throws UnregisteredCartridgeException if there is no registered cartridge with this type.
      */
-    public CartridgeInfo getCartridgeInfo(String cartridgeType) throws UnregisteredCartridgeException;
+    CartridgeInfo getCartridgeInfo(String cartridgeType) throws UnregisteredCartridgeException;
 
     /**
      * Calling this method will result in returning the types of {@link org.apache.stratos.cloud.controller.pojo.Cartridge}s
@@ -175,7 +176,7 @@ public interface CloudControllerService {
      * 
      * @return String array containing types of registered {@link org.apache.stratos.cloud.controller.pojo.Cartridge}s.
      */
-    public String[] getRegisteredCartridges();
+    String[] getRegisteredCartridges();
 
     /**
      * Returns the {@link org.apache.stratos.cloud.controller.pojo.ClusterContext} object associated with the given cluster id, or null if not found
@@ -183,6 +184,6 @@ public interface CloudControllerService {
      * @param clusterId cluster id
      * @return {@link org.apache.stratos.cloud.controller.pojo.ClusterContext} object  associated with the given cluster id, or null
      */
-    public ClusterContext getClusterContext (String clusterId);
+    ClusterContext getClusterContext (String clusterId);
 
 }


[26/50] [abbrv] git commit: avoid catching throwable

Posted by ni...@apache.org.
avoid catching throwable


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

Branch: refs/heads/master
Commit: 9e25fcd80ffcb016103bf3c6ee488ae20dc47237
Parents: 4aa518d
Author: R-Rajkumar <rr...@gmail.com>
Authored: Fri Oct 10 16:45:00 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:57 2014 +0530

----------------------------------------------------------------------
 .../stratos/autoscaler/rule/RuleTasksDelegator.java       | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/9e25fcd8/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 0a9bde3..1154ac3 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
@@ -32,6 +32,8 @@ import org.apache.stratos.autoscaler.algorithm.OneAfterAnother;
 import org.apache.stratos.autoscaler.algorithm.RoundRobin;
 import org.apache.stratos.autoscaler.client.cloud.controller.CloudControllerClient;
 import org.apache.stratos.autoscaler.client.cloud.controller.InstanceNotificationClient;
+import org.apache.stratos.autoscaler.exception.SpawningException;
+import org.apache.stratos.autoscaler.exception.TerminationException;
 import org.apache.stratos.autoscaler.partition.PartitionManager;
 import org.apache.stratos.cloud.controller.stub.pojo.MemberContext;
 
@@ -227,7 +229,7 @@ public class RuleTasksDelegator {
                     log.debug("Returned member context is null, did not add to pending members");
                 }
             }
-        } catch (Throwable e) {
+        } catch (Exception e) {
             log.error("Cannot create containers ", e);
         }
     }
@@ -260,7 +262,7 @@ public class RuleTasksDelegator {
                     log.debug("Returned array of member context is null, did not add to pending members");
                 }
             }
-        } catch (Throwable e) {
+        } catch (Exception e) {
             log.error("Cannot update kubernetes controller ", e);
         }
     }
@@ -269,9 +271,9 @@ public class RuleTasksDelegator {
     	try {
     		CloudControllerClient ccClient = CloudControllerClient.getInstance();
     		ccClient.terminateContainer(memberId);
-    	} catch (Throwable e) {
+    	} catch (TerminationException e) {
     		log.error("Cannot delete container ", e);
-    	}
+		}
     }
 
     public int getPredictedReplicasForStat(int minReplicas, float statUpperLimit, float statPredictedValue) {


[14/50] [abbrv] git commit: adding getter/setters for stats in MemberStatsContext

Posted by ni...@apache.org.
adding getter/setters for stats in MemberStatsContext


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

Branch: refs/heads/master
Commit: 13450de8d219d67cd07176d7a3b29d5019c87780
Parents: 7b0cf72
Author: R-Rajkumar <rr...@gmail.com>
Authored: Thu Oct 9 10:56:24 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:56 2014 +0530

----------------------------------------------------------------------
 .../stratos/autoscaler/MemberStatsContext.java  | 23 ++++++++++++++++++++
 1 file changed, 23 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/13450de8/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/MemberStatsContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/MemberStatsContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/MemberStatsContext.java
index bd3a6c3..84e8854 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/MemberStatsContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/MemberStatsContext.java
@@ -77,4 +77,27 @@ public class MemberStatsContext {
         memoryConsumption.setSecondDerivative(value);
     }
 
+    public float getAverageLoadAverage() {
+        return loadAverage.getAverage();
+    }
+
+    public float getAverageMemoryConsumption() {
+        return memoryConsumption.getAverage();
+    }
+
+    public float getGradientOfLoadAverage() {
+        return loadAverage.getGradient();
+    }
+
+    public float getGradientOfMemoryConsumption() {
+        return memoryConsumption.getGradient();
+    }
+
+    public float getSecondDerivativeOfLoadAverage() {
+        return loadAverage.getSecondDerivative();
+    }
+
+    public float getSecondDerivativeOfMemoryConsumption() {
+        return memoryConsumption.getSecondDerivative();
+    }
 }


[49/50] [abbrv] git commit: Adding member context, soon after starting containers.

Posted by ni...@apache.org.
Adding member context, soon after starting containers.


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

Branch: refs/heads/master
Commit: 530a166577b9c7304c02cbb0bb192aae714f0216
Parents: 9b7ec1f
Author: Nirmal Fernando <ni...@gmail.com>
Authored: Sat Oct 11 09:13:24 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:59 2014 +0530

----------------------------------------------------------------------
 .../stratos/cloud/controller/impl/CloudControllerServiceImpl.java  | 2 ++
 1 file changed, 2 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/530a1665/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 6717f74..5461bc2 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
@@ -1457,6 +1457,8 @@ public class CloudControllerServiceImpl implements CloudControllerService {
                         .getProperties(), StratosConstants.ALLOCATED_SERVICE_HOST_PORT,
                         String.valueOf(service.getPort())));
                 
+                dataHolder.addMemberContext(context);
+                
                 // wait till Pod status turns to running and send member spawned.
                 ScheduledThreadExecutor exec = ScheduledThreadExecutor.getInstance();
                 if (LOG.isDebugEnabled()) {


[27/50] [abbrv] git commit: PodActivationWatcher is responsible for checking Pod's state and setting IPs and sending member spawned event.

Posted by ni...@apache.org.
PodActivationWatcher is responsible for checking Pod's state and setting IPs and sending member spawned event.


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

Branch: refs/heads/master
Commit: 652d3984ee9e1924eb9bacb925010db1e1955b8a
Parents: 6679d06
Author: Nirmal Fernando <ni...@gmail.com>
Authored: Fri Oct 10 19:44:39 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:57 2014 +0530

----------------------------------------------------------------------
 .../controller/util/PodActivationWatcher.java   | 74 ++++++++++++++++++++
 1 file changed, 74 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/652d3984/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/PodActivationWatcher.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/PodActivationWatcher.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/PodActivationWatcher.java
new file mode 100644
index 0000000..13d1ac6
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/PodActivationWatcher.java
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one 
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
+ * KIND, either express or implied.  See the License for the 
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.stratos.cloud.controller.util;
+
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.cloud.controller.pojo.MemberContext;
+import org.apache.stratos.cloud.controller.registry.RegistryManager;
+import org.apache.stratos.cloud.controller.runtime.FasterLookUpDataHolder;
+import org.apache.stratos.cloud.controller.topology.TopologyBuilder;
+import org.apache.stratos.kubernetes.client.KubernetesApiClient;
+import org.apache.stratos.kubernetes.client.model.Pod;
+
+/**
+ * Checks whether a container is active and update the {@link FasterLookUpDataHolder}.
+ */
+public class PodActivationWatcher implements Runnable {
+
+    private static final Log LOG = LogFactory
+            .getLog(PodActivationWatcher.class);
+    private String podId;
+    private MemberContext ctxt;
+    private KubernetesApiClient kubApi;
+    
+    public PodActivationWatcher(String podId, MemberContext ctxt, KubernetesApiClient kubApi) {
+        this.podId = podId;
+        this.ctxt = ctxt;
+        this.kubApi = kubApi;
+    }
+
+    @Override
+    public void run() {
+        try {
+            Pod pod = kubApi.getPod(podId);
+            if (LOG.isDebugEnabled()) {
+                LOG.debug("PodActivationWatcher running : "+pod.getCurrentState().getStatus());
+            }
+            if ("Running".equals(pod.getCurrentState().getStatus())) {
+                String hostIP = pod.getCurrentState().getHost();
+                ctxt.setPublicIpAddress(hostIP);
+                ctxt.setPrivateIpAddress(hostIP);
+                FasterLookUpDataHolder.getInstance().addMemberContext(ctxt);
+                // trigger topology
+                TopologyBuilder.handleMemberSpawned(ctxt.getCartridgeType(), ctxt.getClusterId(), 
+                        null, hostIP, hostIP, ctxt);
+                
+                RegistryManager.getInstance().persist(FasterLookUpDataHolder.getInstance());
+                
+            }
+            
+        } catch (Exception e) {
+            LOG.error("Container Activation Watcher Failed.. ", e);
+        }
+        
+    }
+    
+}


[36/50] [abbrv] git commit: Changes to the WSDL with new terminateContainer API.

Posted by ni...@apache.org.
Changes to the WSDL with new terminateContainer API.


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

Branch: refs/heads/master
Commit: 7c072a9d19f13bc1774aaf28c8e5550b2949e047
Parents: 6e0efc0
Author: Nirmal Fernando <ni...@gmail.com>
Authored: Fri Oct 10 09:49:14 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:57 2014 +0530

----------------------------------------------------------------------
 .../main/resources/CloudControllerService.wsdl  | 903 ++++++++++---------
 1 file changed, 478 insertions(+), 425 deletions(-)
----------------------------------------------------------------------



[35/50] [abbrv] Changes to the WSDL with new terminateContainer API.

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/stratos/blob/7c072a9d/service-stubs/org.apache.stratos.cloud.controller.service.stub/src/main/resources/CloudControllerService.wsdl
----------------------------------------------------------------------
diff --git a/service-stubs/org.apache.stratos.cloud.controller.service.stub/src/main/resources/CloudControllerService.wsdl b/service-stubs/org.apache.stratos.cloud.controller.service.stub/src/main/resources/CloudControllerService.wsdl
index eb8c819..26ecead 100644
--- a/service-stubs/org.apache.stratos.cloud.controller.service.stub/src/main/resources/CloudControllerService.wsdl
+++ b/service-stubs/org.apache.stratos.cloud.controller.service.stub/src/main/resources/CloudControllerService.wsdl
@@ -3,1196 +3,1249 @@
     <wsdl:types>
         <xs:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://util.java/xsd">
             <xs:complexType name="Properties">
-                <xs:sequence/>
+                <xs:sequence></xs:sequence>
             </xs:complexType>
         </xs:schema>
         <xs:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://exception.controller.cloud.stratos.apache.org/xsd">
             <xs:complexType name="InvalidPartitionException">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="message" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="message" nillable="true" type="xs:string"></xs:element>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="InvalidCartridgeTypeException">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="message" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="message" nillable="true" type="xs:string"></xs:element>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="UnregisteredCartridgeException">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="message" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="message" nillable="true" type="xs:string"></xs:element>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="UnregisteredClusterException">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="message" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="message" nillable="true" type="xs:string"></xs:element>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="InvalidMemberException">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="message" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="message" nillable="true" type="xs:string"></xs:element>
+                </xs:sequence>
+            </xs:complexType>
+            <xs:complexType name="MemberTerminationFailedException">
+                <xs:sequence>
+                    <xs:element minOccurs="0" name="message" nillable="true" type="xs:string"></xs:element>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="InvalidClusterException">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="message" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="message" nillable="true" type="xs:string"></xs:element>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="InvalidIaasProviderException">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="message" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="message" nillable="true" type="xs:string"></xs:element>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="InvalidCartridgeDefinitionException">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="message" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="message" nillable="true" type="xs:string"></xs:element>
                 </xs:sequence>
             </xs:complexType>
         </xs:schema>
         <xs:schema xmlns:ax221="http://exception.controller.cloud.stratos.apache.org/xsd" xmlns:ax227="http://pojo.controller.cloud.stratos.apache.org/xsd" xmlns:ax225="http://partition.deployment.controller.cloud.stratos.apache.org/xsd" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://impl.controller.cloud.stratos.apache.org">
-            <xs:import namespace="http://exception.controller.cloud.stratos.apache.org/xsd"/>
-            <xs:import namespace="http://partition.deployment.controller.cloud.stratos.apache.org/xsd"/>
-            <xs:import namespace="http://pojo.controller.cloud.stratos.apache.org/xsd"/>
+            <xs:import namespace="http://exception.controller.cloud.stratos.apache.org/xsd"></xs:import>
+            <xs:import namespace="http://partition.deployment.controller.cloud.stratos.apache.org/xsd"></xs:import>
+            <xs:import namespace="http://pojo.controller.cloud.stratos.apache.org/xsd"></xs:import>
             <xs:element name="CloudControllerServiceInvalidPartitionException">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="InvalidPartitionException" nillable="true" type="ax220:InvalidPartitionException"/>
+                        <xs:element minOccurs="0" name="InvalidPartitionException" nillable="true" type="ax220:InvalidPartitionException"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="validatePartition">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="partition" nillable="true" type="ax222:Partition"/>
+                        <xs:element minOccurs="0" name="partition" nillable="true" type="ax222:Partition"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="validatePartitionResponse">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="return" type="xs:boolean"/>
+                        <xs:element minOccurs="0" name="return" type="xs:boolean"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="CloudControllerServiceInvalidCartridgeTypeException">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="InvalidCartridgeTypeException" nillable="true" type="ax220:InvalidCartridgeTypeException"/>
+                        <xs:element minOccurs="0" name="InvalidCartridgeTypeException" nillable="true" type="ax220:InvalidCartridgeTypeException"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="validateDeploymentPolicy">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="cartridgeType" nillable="true" type="xs:string"/>
-                        <xs:element maxOccurs="unbounded" minOccurs="0" name="partitions" nillable="true" type="ax222:Partition"/>
+                        <xs:element minOccurs="0" name="cartridgeType" nillable="true" type="xs:string"></xs:element>
+                        <xs:element maxOccurs="unbounded" minOccurs="0" name="partitions" nillable="true" type="ax222:Partition"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="validateDeploymentPolicyResponse">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="return" type="xs:boolean"/>
+                        <xs:element minOccurs="0" name="return" type="xs:boolean"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="CloudControllerServiceUnregisteredCartridgeException">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="UnregisteredCartridgeException" nillable="true" type="ax220:UnregisteredCartridgeException"/>
+                        <xs:element minOccurs="0" name="UnregisteredCartridgeException" nillable="true" type="ax220:UnregisteredCartridgeException"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="updateContainers">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"/>
-                        <xs:element minOccurs="0" name="replicas" type="xs:int"/>
+                        <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"></xs:element>
+                        <xs:element minOccurs="0" name="replicas" type="xs:int"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="updateContainersResponse">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="ax223:MemberContext"/>
+                        <xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="ax223:MemberContext"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="CloudControllerServiceUnregisteredClusterException">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="UnregisteredClusterException" nillable="true" type="ax220:UnregisteredClusterException"/>
+                        <xs:element minOccurs="0" name="UnregisteredClusterException" nillable="true" type="ax220:UnregisteredClusterException"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="unregisterService">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"/>
+                        <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="unregisterDockerService">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"/>
+                        <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="undeployCartridgeDefinition">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="cartridgeType" nillable="true" type="xs:string"/>
+                        <xs:element minOccurs="0" name="cartridgeType" nillable="true" type="xs:string"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="CloudControllerServiceInvalidMemberException">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="InvalidMemberException" nillable="true" type="ax220:InvalidMemberException"/>
+                        <xs:element minOccurs="0" name="InvalidMemberException" nillable="true" type="ax220:InvalidMemberException"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="terminateInstance">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="memberId" nillable="true" type="xs:string"/>
+                        <xs:element minOccurs="0" name="memberId" nillable="true" type="xs:string"></xs:element>
+                    </xs:sequence>
+                </xs:complexType>
+            </xs:element>
+            <xs:element name="CloudControllerServiceMemberTerminationFailedException">
+                <xs:complexType>
+                    <xs:sequence>
+                        <xs:element minOccurs="0" name="MemberTerminationFailedException" nillable="true" type="ax220:MemberTerminationFailedException"></xs:element>
+                    </xs:sequence>
+                </xs:complexType>
+            </xs:element>
+            <xs:element name="terminateContainer">
+                <xs:complexType>
+                    <xs:sequence>
+                        <xs:element minOccurs="0" name="memberId" nillable="true" type="xs:string"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="CloudControllerServiceInvalidClusterException">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="InvalidClusterException" nillable="true" type="ax220:InvalidClusterException"/>
+                        <xs:element minOccurs="0" name="InvalidClusterException" nillable="true" type="ax220:InvalidClusterException"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="terminateAllInstances">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"/>
+                        <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="terminateAllContainers">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"/>
+                        <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="CloudControllerServiceInvalidIaasProviderException">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="InvalidIaasProviderException" nillable="true" type="ax220:InvalidIaasProviderException"/>
+                        <xs:element minOccurs="0" name="InvalidIaasProviderException" nillable="true" type="ax220:InvalidIaasProviderException"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="startInstance">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="memberContext" nillable="true" type="ax223:MemberContext"/>
+                        <xs:element minOccurs="0" name="memberContext" nillable="true" type="ax223:MemberContext"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="startInstanceResponse">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="return" nillable="true" type="ax223:MemberContext"/>
+                        <xs:element minOccurs="0" name="return" nillable="true" type="ax223:MemberContext"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="startContainers">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="containerClusterContext" nillable="true" type="ax223:ContainerClusterContext"/>
+                        <xs:element minOccurs="0" name="containerClusterContext" nillable="true" type="ax223:ContainerClusterContext"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="startContainersResponse">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="ax223:MemberContext"/>
+                        <xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="ax223:MemberContext"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="registerService">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="registrant" nillable="true" type="ax223:Registrant"/>
+                        <xs:element minOccurs="0" name="registrant" nillable="true" type="ax223:Registrant"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="registerServiceResponse">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="return" type="xs:boolean"/>
+                        <xs:element minOccurs="0" name="return" type="xs:boolean"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="getRegisteredCartridges">
                 <xs:complexType>
-                    <xs:sequence/>
+                    <xs:sequence></xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="getRegisteredCartridgesResponse">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="xs:string"/>
+                        <xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="xs:string"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="getClusterContext">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"/>
+                        <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="getClusterContextResponse">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="return" nillable="true" type="ax223:ClusterContext"/>
+                        <xs:element minOccurs="0" name="return" nillable="true" type="ax223:ClusterContext"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="getCartridgeInfo">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="cartridgeType" nillable="true" type="xs:string"/>
+                        <xs:element minOccurs="0" name="cartridgeType" nillable="true" type="xs:string"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="getCartridgeInfoResponse">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="return" nillable="true" type="ax223:CartridgeInfo"/>
+                        <xs:element minOccurs="0" name="return" nillable="true" type="ax223:CartridgeInfo"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="CloudControllerServiceInvalidCartridgeDefinitionException">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="InvalidCartridgeDefinitionException" nillable="true" type="ax220:InvalidCartridgeDefinitionException"/>
+                        <xs:element minOccurs="0" name="InvalidCartridgeDefinitionException" nillable="true" type="ax220:InvalidCartridgeDefinitionException"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="deployCartridgeDefinition">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="cartridgeConfig" nillable="true" type="ax223:CartridgeConfig"/>
+                        <xs:element minOccurs="0" name="cartridgeConfig" nillable="true" type="ax223:CartridgeConfig"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
         </xs:schema>
         <xs:schema xmlns:ax229="http://util.java/xsd" xmlns:ax226="http://partition.deployment.controller.cloud.stratos.apache.org/xsd" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://pojo.controller.cloud.stratos.apache.org/xsd">
-            <xs:import namespace="http://partition.deployment.controller.cloud.stratos.apache.org/xsd"/>
-            <xs:import namespace="http://util.java/xsd"/>
+            <xs:import namespace="http://partition.deployment.controller.cloud.stratos.apache.org/xsd"></xs:import>
+            <xs:import namespace="http://util.java/xsd"></xs:import>
             <xs:complexType name="Properties">
                 <xs:sequence>
-                    <xs:element maxOccurs="unbounded" minOccurs="0" name="properties" nillable="true" type="ax223:Property"/>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" name="properties" nillable="true" type="ax223:Property"></xs:element>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="Property">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="name" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="value" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="name" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="value" nillable="true" type="xs:string"></xs:element>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="MemberContext">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="allocatedIpAddress" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="cartridgeType" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="initTime" type="xs:long"/>
-                    <xs:element minOccurs="0" name="instanceId" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="lbClusterId" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="memberId" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="networkPartitionId" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="nodeId" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="partition" nillable="true" type="ax222:Partition"/>
-                    <xs:element minOccurs="0" name="privateIpAddress" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax223:Properties"/>
-                    <xs:element minOccurs="0" name="publicIpAddress" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="allocatedIpAddress" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="cartridgeType" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="initTime" type="xs:long"></xs:element>
+                    <xs:element minOccurs="0" name="instanceId" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="lbClusterId" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="memberId" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="networkPartitionId" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="nodeId" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="partition" nillable="true" type="ax222:Partition"></xs:element>
+                    <xs:element minOccurs="0" name="privateIpAddress" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax223:Properties"></xs:element>
+                    <xs:element minOccurs="0" name="publicIpAddress" nillable="true" type="xs:string"></xs:element>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="ContainerClusterContext">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax223:Properties"/>
+                    <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax223:Properties"></xs:element>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="Registrant">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="autoScalerPolicyName" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="cartridgeType" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="deploymentPolicyName" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="hostName" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="payload" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="persistence" nillable="true" type="ax223:Persistence"/>
-                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax223:Properties"/>
-                    <xs:element minOccurs="0" name="tenantRange" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="autoScalerPolicyName" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="cartridgeType" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="deploymentPolicyName" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="hostName" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="payload" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="persistence" nillable="true" type="ax223:Persistence"></xs:element>
+                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax223:Properties"></xs:element>
+                    <xs:element minOccurs="0" name="tenantRange" nillable="true" type="xs:string"></xs:element>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="Persistence">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="persistanceRequired" type="xs:boolean"/>
-                    <xs:element maxOccurs="unbounded" minOccurs="0" name="volumes" nillable="true" type="ax223:Volume"/>
+                    <xs:element minOccurs="0" name="persistanceRequired" type="xs:boolean"></xs:element>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" name="volumes" nillable="true" type="ax223:Volume"></xs:element>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="Volume">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="device" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="iaasType" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="id" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="mappingPath" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="removeOntermination" type="xs:boolean"/>
-                    <xs:element minOccurs="0" name="size" type="xs:int"/>
-                    <xs:element minOccurs="0" name="snapshotId" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="volumeId" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="device" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="iaasType" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="id" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="mappingPath" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="removeOntermination" type="xs:boolean"></xs:element>
+                    <xs:element minOccurs="0" name="size" type="xs:int"></xs:element>
+                    <xs:element minOccurs="0" name="snapshotId" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="volumeId" nillable="true" type="xs:string"></xs:element>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="ClusterContext">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="cartridgeType" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="hostName" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="lbCluster" type="xs:boolean"/>
-                    <xs:element minOccurs="0" name="payload" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax229:Properties"/>
-                    <xs:element minOccurs="0" name="timeoutInMillis" type="xs:long"/>
-                    <xs:element minOccurs="0" name="volumeRequired" type="xs:boolean"/>
-                    <xs:element maxOccurs="unbounded" minOccurs="0" name="volumes" nillable="true" type="ax223:Volume"/>
+                    <xs:element minOccurs="0" name="cartridgeType" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="hostName" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="lbCluster" type="xs:boolean"></xs:element>
+                    <xs:element minOccurs="0" name="payload" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax229:Properties"></xs:element>
+                    <xs:element minOccurs="0" name="timeoutInMillis" type="xs:long"></xs:element>
+                    <xs:element minOccurs="0" name="volumeRequired" type="xs:boolean"></xs:element>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" name="volumes" nillable="true" type="ax223:Volume"></xs:element>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="CartridgeInfo">
                 <xs:sequence>
-                    <xs:element maxOccurs="unbounded" minOccurs="0" name="appTypes" nillable="true" type="ax223:AppType"/>
-                    <xs:element minOccurs="0" name="baseDir" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="defaultAutoscalingPolicy" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="defaultDeploymentPolicy" nillable="true" type="xs:string"/>
-                    <xs:element maxOccurs="unbounded" minOccurs="0" name="deploymentDirs" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="description" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="displayName" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="hostName" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="isPublic" type="xs:boolean"/>
-                    <xs:element minOccurs="0" name="lbConfig" nillable="true" type="ax223:LoadbalancerConfig"/>
-                    <xs:element minOccurs="0" name="multiTenant" type="xs:boolean"/>
-                    <xs:element minOccurs="0" name="persistence" nillable="true" type="ax223:Persistence"/>
-                    <xs:element maxOccurs="unbounded" minOccurs="0" name="portMappings" nillable="true" type="ax223:PortMapping"/>
-                    <xs:element maxOccurs="unbounded" minOccurs="0" name="properties" nillable="true" type="ax223:Property"/>
-                    <xs:element minOccurs="0" name="provider" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="serviceGroup" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="type" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="version" nillable="true" type="xs:string"/>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" name="appTypes" nillable="true" type="ax223:AppType"></xs:element>
+                    <xs:element minOccurs="0" name="baseDir" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="defaultAutoscalingPolicy" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="defaultDeploymentPolicy" nillable="true" type="xs:string"></xs:element>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" name="deploymentDirs" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="description" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="displayName" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="hostName" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="isPublic" type="xs:boolean"></xs:element>
+                    <xs:element minOccurs="0" name="lbConfig" nillable="true" type="ax223:LoadbalancerConfig"></xs:element>
+                    <xs:element minOccurs="0" name="multiTenant" type="xs:boolean"></xs:element>
+                    <xs:element minOccurs="0" name="persistence" nillable="true" type="ax223:Persistence"></xs:element>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" name="portMappings" nillable="true" type="ax223:PortMapping"></xs:element>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" name="properties" nillable="true" type="ax223:Property"></xs:element>
+                    <xs:element minOccurs="0" name="provider" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="serviceGroup" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="type" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="version" nillable="true" type="xs:string"></xs:element>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="AppType">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="appSpecificMapping" type="xs:boolean"/>
-                    <xs:element minOccurs="0" name="name" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="appSpecificMapping" type="xs:boolean"></xs:element>
+                    <xs:element minOccurs="0" name="name" nillable="true" type="xs:string"></xs:element>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="LoadbalancerConfig">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax223:Properties"/>
-                    <xs:element minOccurs="0" name="type" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax223:Properties"></xs:element>
+                    <xs:element minOccurs="0" name="type" nillable="true" type="xs:string"></xs:element>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="PortMapping">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="port" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="protocol" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="proxyPort" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="port" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="protocol" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="proxyPort" nillable="true" type="xs:string"></xs:element>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="CartridgeConfig">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="baseDir" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="container" nillable="true" type="ax223:Container"/>
-                    <xs:element minOccurs="0" name="defaultAutoscalingPolicy" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="defaultDeploymentPolicy" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="deployerType" nillable="true" type="xs:string"/>
-                    <xs:element maxOccurs="unbounded" minOccurs="0" name="deploymentDirs" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="description" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="displayName" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="hostName" nillable="true" type="xs:string"/>
-                    <xs:element maxOccurs="unbounded" minOccurs="0" name="iaasConfigs" nillable="true" type="ax223:IaasConfig"/>
-                    <xs:element minOccurs="0" name="isPublic" type="xs:boolean"/>
-                    <xs:element minOccurs="0" name="lbConfig" nillable="true" type="ax223:LoadbalancerConfig"/>
-                    <xs:element minOccurs="0" name="multiTenant" type="xs:boolean"/>
-                    <xs:element minOccurs="0" name="persistence" nillable="true" type="ax223:Persistence"/>
-                    <xs:element maxOccurs="unbounded" minOccurs="0" name="portMappings" nillable="true" type="ax223:PortMapping"/>
-                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax223:Properties"/>
-                    <xs:element minOccurs="0" name="provider" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="serviceGroup" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="type" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="version" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="baseDir" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="container" nillable="true" type="ax223:Container"></xs:element>
+                    <xs:element minOccurs="0" name="defaultAutoscalingPolicy" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="defaultDeploymentPolicy" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="deployerType" nillable="true" type="xs:string"></xs:element>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" name="deploymentDirs" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="description" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="displayName" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="hostName" nillable="true" type="xs:string"></xs:element>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" name="iaasConfigs" nillable="true" type="ax223:IaasConfig"></xs:element>
+                    <xs:element minOccurs="0" name="isPublic" type="xs:boolean"></xs:element>
+                    <xs:element minOccurs="0" name="lbConfig" nillable="true" type="ax223:LoadbalancerConfig"></xs:element>
+                    <xs:element minOccurs="0" name="multiTenant" type="xs:boolean"></xs:element>
+                    <xs:element minOccurs="0" name="persistence" nillable="true" type="ax223:Persistence"></xs:element>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" name="portMappings" nillable="true" type="ax223:PortMapping"></xs:element>
+                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax223:Properties"></xs:element>
+                    <xs:element minOccurs="0" name="provider" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="serviceGroup" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="type" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="version" nillable="true" type="xs:string"></xs:element>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="Container">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="dockerFileRepo" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="imageName" nillable="true" type="xs:string"/>
-                    <xs:element maxOccurs="unbounded" minOccurs="0" name="properties" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="dockerFileRepo" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="imageName" nillable="true" type="xs:string"></xs:element>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" name="properties" nillable="true" type="xs:string"></xs:element>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="IaasConfig">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="className" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="credential" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="identity" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="imageId" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="maxInstanceLimit" type="xs:int"/>
-                    <xs:element minOccurs="0" name="name" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="networkInterfaces" nillable="true" type="ax223:NetworkInterfaces"/>
-                    <xs:element minOccurs="0" name="payload" nillable="true" type="xs:base64Binary"/>
-                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax223:Properties"/>
-                    <xs:element minOccurs="0" name="provider" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="type" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="className" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="credential" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="identity" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="imageId" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="maxInstanceLimit" type="xs:int"></xs:element>
+                    <xs:element minOccurs="0" name="name" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="networkInterfaces" nillable="true" type="ax223:NetworkInterfaces"></xs:element>
+                    <xs:element minOccurs="0" name="payload" nillable="true" type="xs:base64Binary"></xs:element>
+                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax223:Properties"></xs:element>
+                    <xs:element minOccurs="0" name="provider" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="type" nillable="true" type="xs:string"></xs:element>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="NetworkInterfaces">
                 <xs:sequence>
-                    <xs:element maxOccurs="unbounded" minOccurs="0" name="networkInterfaces" nillable="true" type="ax223:NetworkInterface"/>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" name="networkInterfaces" nillable="true" type="ax223:NetworkInterface"></xs:element>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="NetworkInterface">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="fixedIp" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="networkUuid" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="portUuid" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="fixedIp" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="networkUuid" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="portUuid" nillable="true" type="xs:string"></xs:element>
                 </xs:sequence>
             </xs:complexType>
         </xs:schema>
         <xs:schema xmlns:ax224="http://pojo.controller.cloud.stratos.apache.org/xsd" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://partition.deployment.controller.cloud.stratos.apache.org/xsd">
-            <xs:import namespace="http://pojo.controller.cloud.stratos.apache.org/xsd"/>
+            <xs:import namespace="http://pojo.controller.cloud.stratos.apache.org/xsd"></xs:import>
             <xs:complexType name="Partition">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="description" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="id" nillable="true" type="xs:string"/>
-                    <xs:element minOccurs="0" name="isPublic" type="xs:boolean"/>
-                    <xs:element minOccurs="0" name="partitionMax" type="xs:int"/>
-                    <xs:element minOccurs="0" name="partitionMin" type="xs:int"/>
-                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax223:Properties"/>
-                    <xs:element minOccurs="0" name="provider" nillable="true" type="xs:string"/>
+                    <xs:element minOccurs="0" name="description" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="id" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="isPublic" type="xs:boolean"></xs:element>
+                    <xs:element minOccurs="0" name="partitionMax" type="xs:int"></xs:element>
+                    <xs:element minOccurs="0" name="partitionMin" type="xs:int"></xs:element>
+                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax223:Properties"></xs:element>
+                    <xs:element minOccurs="0" name="provider" nillable="true" type="xs:string"></xs:element>
                 </xs:sequence>
             </xs:complexType>
         </xs:schema>
     </wsdl:types>
     <wsdl:message name="validatePartitionRequest">
-        <wsdl:part name="parameters" element="ns:validatePartition"/>
+        <wsdl:part name="parameters" element="ns:validatePartition"></wsdl:part>
     </wsdl:message>
     <wsdl:message name="validatePartitionResponse">
-        <wsdl:part name="parameters" element="ns:validatePartitionResponse"/>
+        <wsdl:part name="parameters" element="ns:validatePartitionResponse"></wsdl:part>
     </wsdl:message>
     <wsdl:message name="CloudControllerServiceInvalidPartitionException">
-        <wsdl:part name="parameters" element="ns:CloudControllerServiceInvalidPartitionException"/>
+        <wsdl:part name="parameters" element="ns:CloudControllerServiceInvalidPartitionException"></wsdl:part>
+    </wsdl:message>
+    <wsdl:message name="terminateContainerRequest">
+        <wsdl:part name="parameters" element="ns:terminateContainer"></wsdl:part>
+    </wsdl:message>
+    <wsdl:message name="CloudControllerServiceMemberTerminationFailedException">
+        <wsdl:part name="parameters" element="ns:CloudControllerServiceMemberTerminationFailedException"></wsdl:part>
     </wsdl:message>
     <wsdl:message name="validateDeploymentPolicyRequest">
-        <wsdl:part name="parameters" element="ns:validateDeploymentPolicy"/>
+        <wsdl:part name="parameters" element="ns:validateDeploymentPolicy"></wsdl:part>
     </wsdl:message>
     <wsdl:message name="validateDeploymentPolicyResponse">
-        <wsdl:part name="parameters" element="ns:validateDeploymentPolicyResponse"/>
+        <wsdl:part name="parameters" element="ns:validateDeploymentPolicyResponse"></wsdl:part>
     </wsdl:message>
     <wsdl:message name="CloudControllerServiceInvalidCartridgeTypeException">
-        <wsdl:part name="parameters" element="ns:CloudControllerServiceInvalidCartridgeTypeException"/>
+        <wsdl:part name="parameters" element="ns:CloudControllerServiceInvalidCartridgeTypeException"></wsdl:part>
     </wsdl:message>
     <wsdl:message name="startContainersRequest">
-        <wsdl:part name="parameters" element="ns:startContainers"/>
+        <wsdl:part name="parameters" element="ns:startContainers"></wsdl:part>
     </wsdl:message>
     <wsdl:message name="startContainersResponse">
-        <wsdl:part name="parameters" element="ns:startContainersResponse"/>
+        <wsdl:part name="parameters" element="ns:startContainersResponse"></wsdl:part>
     </wsdl:message>
     <wsdl:message name="CloudControllerServiceUnregisteredCartridgeException">
-        <wsdl:part name="parameters" element="ns:CloudControllerServiceUnregisteredCartridgeException"/>
+        <wsdl:part name="parameters" element="ns:CloudControllerServiceUnregisteredCartridgeException"></wsdl:part>
     </wsdl:message>
     <wsdl:message name="terminateInstanceRequest">
-        <wsdl:part name="parameters" element="ns:terminateInstance"/>
+        <wsdl:part name="parameters" element="ns:terminateInstance"></wsdl:part>
     </wsdl:message>
     <wsdl:message name="CloudControllerServiceInvalidMemberException">
-        <wsdl:part name="parameters" element="ns:CloudControllerServiceInvalidMemberException"/>
+        <wsdl:part name="parameters" element="ns:CloudControllerServiceInvalidMemberException"></wsdl:part>
     </wsdl:message>
     <wsdl:message name="registerServiceRequest">
-        <wsdl:part name="parameters" element="ns:registerService"/>
+        <wsdl:part name="parameters" element="ns:registerService"></wsdl:part>
     </wsdl:message>
     <wsdl:message name="registerServiceResponse">
-        <wsdl:part name="parameters" element="ns:registerServiceResponse"/>
+        <wsdl:part name="parameters" element="ns:registerServiceResponse"></wsdl:part>
     </wsdl:message>
     <wsdl:message name="deployCartridgeDefinitionRequest">
-        <wsdl:part name="parameters" element="ns:deployCartridgeDefinition"/>
+        <wsdl:part name="parameters" element="ns:deployCartridgeDefinition"></wsdl:part>
     </wsdl:message>
-    <wsdl:message name="deployCartridgeDefinitionResponse"/>
+    <wsdl:message name="deployCartridgeDefinitionResponse"></wsdl:message>
     <wsdl:message name="CloudControllerServiceInvalidCartridgeDefinitionException">
-        <wsdl:part name="parameters" element="ns:CloudControllerServiceInvalidCartridgeDefinitionException"/>
+        <wsdl:part name="parameters" element="ns:CloudControllerServiceInvalidCartridgeDefinitionException"></wsdl:part>
     </wsdl:message>
     <wsdl:message name="CloudControllerServiceInvalidIaasProviderException">
-        <wsdl:part name="parameters" element="ns:CloudControllerServiceInvalidIaasProviderException"/>
+        <wsdl:part name="parameters" element="ns:CloudControllerServiceInvalidIaasProviderException"></wsdl:part>
     </wsdl:message>
     <wsdl:message name="getCartridgeInfoRequest">
-        <wsdl:part name="parameters" element="ns:getCartridgeInfo"/>
+        <wsdl:part name="parameters" element="ns:getCartridgeInfo"></wsdl:part>
     </wsdl:message>
     <wsdl:message name="getCartridgeInfoResponse">
-        <wsdl:part name="parameters" element="ns:getCartridgeInfoResponse"/>
+        <wsdl:part name="parameters" element="ns:getCartridgeInfoResponse"></wsdl:part>
     </wsdl:message>
     <wsdl:message name="terminateAllContainersRequest">
-        <wsdl:part name="parameters" element="ns:terminateAllContainers"/>
+        <wsdl:part name="parameters" element="ns:terminateAllContainers"></wsdl:part>
     </wsdl:message>
     <wsdl:message name="CloudControllerServiceInvalidClusterException">
-        <wsdl:part name="parameters" element="ns:CloudControllerServiceInvalidClusterException"/>
+        <wsdl:part name="parameters" element="ns:CloudControllerServiceInvalidClusterException"></wsdl:part>
     </wsdl:message>
     <wsdl:message name="unregisterServiceRequest">
-        <wsdl:part name="parameters" element="ns:unregisterService"/>
+        <wsdl:part name="parameters" element="ns:unregisterService"></wsdl:part>
     </wsdl:message>
-    <wsdl:message name="unregisterServiceResponse"/>
+    <wsdl:message name="unregisterServiceResponse"></wsdl:message>
     <wsdl:message name="CloudControllerServiceUnregisteredClusterException">
-        <wsdl:part name="parameters" element="ns:CloudControllerServiceUnregisteredClusterException"/>
+        <wsdl:part name="parameters" element="ns:CloudControllerServiceUnregisteredClusterException"></wsdl:part>
     </wsdl:message>
     <wsdl:message name="undeployCartridgeDefinitionRequest">
-        <wsdl:part name="parameters" element="ns:undeployCartridgeDefinition"/>
+        <wsdl:part name="parameters" element="ns:undeployCartridgeDefinition"></wsdl:part>
     </wsdl:message>
-    <wsdl:message name="undeployCartridgeDefinitionResponse"/>
+    <wsdl:message name="undeployCartridgeDefinitionResponse"></wsdl:message>
     <wsdl:message name="terminateAllInstancesRequest">
-        <wsdl:part name="parameters" element="ns:terminateAllInstances"/>
+        <wsdl:part name="parameters" element="ns:terminateAllInstances"></wsdl:part>
     </wsdl:message>
     <wsdl:message name="unregisterDockerServiceRequest">
-        <wsdl:part name="parameters" element="ns:unregisterDockerService"/>
+        <wsdl:part name="parameters" element="ns:unregisterDockerService"></wsdl:part>
     </wsdl:message>
     <wsdl:message name="getRegisteredCartridgesRequest">
-        <wsdl:part name="parameters" element="ns:getRegisteredCartridges"/>
+        <wsdl:part name="parameters" element="ns:getRegisteredCartridges"></wsdl:part>
     </wsdl:message>
     <wsdl:message name="getRegisteredCartridgesResponse">
-        <wsdl:part name="parameters" element="ns:getRegisteredCartridgesResponse"/>
+        <wsdl:part name="parameters" element="ns:getRegisteredCartridgesResponse"></wsdl:part>
     </wsdl:message>
     <wsdl:message name="startInstanceRequest">
-        <wsdl:part name="parameters" element="ns:startInstance"/>
+        <wsdl:part name="parameters" element="ns:startInstance"></wsdl:part>
     </wsdl:message>
     <wsdl:message name="startInstanceResponse">
-        <wsdl:part name="parameters" element="ns:startInstanceResponse"/>
+        <wsdl:part name="parameters" element="ns:startInstanceResponse"></wsdl:part>
     </wsdl:message>
     <wsdl:message name="updateContainersRequest">
-        <wsdl:part name="parameters" element="ns:updateContainers"/>
+        <wsdl:part name="parameters" element="ns:updateContainers"></wsdl:part>
     </wsdl:message>
     <wsdl:message name="updateContainersResponse">
-        <wsdl:part name="parameters" element="ns:updateContainersResponse"/>
+        <wsdl:part name="parameters" element="ns:updateContainersResponse"></wsdl:part>
     </wsdl:message>
     <wsdl:message name="getClusterContextRequest">
-        <wsdl:part name="parameters" element="ns:getClusterContext"/>
+        <wsdl:part name="parameters" element="ns:getClusterContext"></wsdl:part>
     </wsdl:message>
     <wsdl:message name="getClusterContextResponse">
-        <wsdl:part name="parameters" element="ns:getClusterContextResponse"/>
+        <wsdl:part name="parameters" element="ns:getClusterContextResponse"></wsdl:part>
     </wsdl:message>
     <wsdl:portType name="CloudControllerServicePortType">
         <wsdl:operation name="validatePartition">
-            <wsdl:input message="ns:validatePartitionRequest" wsaw:Action="urn:validatePartition"/>
-            <wsdl:output message="ns:validatePartitionResponse" wsaw:Action="urn:validatePartitionResponse"/>
-            <wsdl:fault message="ns:CloudControllerServiceInvalidPartitionException" name="CloudControllerServiceInvalidPartitionException" wsaw:Action="urn:validatePartitionCloudControllerServiceInvalidPartitionException"/>
+            <wsdl:input message="ns:validatePartitionRequest" wsaw:Action="urn:validatePartition"></wsdl:input>
+            <wsdl:output message="ns:validatePartitionResponse" wsaw:Action="urn:validatePartitionResponse"></wsdl:output>
+            <wsdl:fault message="ns:CloudControllerServiceInvalidPartitionException" name="CloudControllerServiceInvalidPartitionException" wsaw:Action="urn:validatePartitionCloudControllerServiceInvalidPartitionException"></wsdl:fault>
+        </wsdl:operation>
+        <wsdl:operation name="terminateContainer">
+            <wsdl:input message="ns:terminateContainerRequest" wsaw:Action="urn:terminateContainer"></wsdl:input>
+            <wsdl:fault message="ns:CloudControllerServiceMemberTerminationFailedException" name="CloudControllerServiceMemberTerminationFailedException" wsaw:Action="urn:terminateContainerCloudControllerServiceMemberTerminationFailedException"></wsdl:fault>
         </wsdl:operation>
         <wsdl:operation name="validateDeploymentPolicy">
-            <wsdl:input message="ns:validateDeploymentPolicyRequest" wsaw:Action="urn:validateDeploymentPolicy"/>
-            <wsdl:output message="ns:validateDeploymentPolicyResponse" wsaw:Action="urn:validateDeploymentPolicyResponse"/>
-            <wsdl:fault message="ns:CloudControllerServiceInvalidPartitionException" name="CloudControllerServiceInvalidPartitionException" wsaw:Action="urn:validateDeploymentPolicyCloudControllerServiceInvalidPartitionException"/>
-            <wsdl:fault message="ns:CloudControllerServiceInvalidCartridgeTypeException" name="CloudControllerServiceInvalidCartridgeTypeException" wsaw:Action="urn:validateDeploymentPolicyCloudControllerServiceInvalidCartridgeTypeException"/>
+            <wsdl:input message="ns:validateDeploymentPolicyRequest" wsaw:Action="urn:validateDeploymentPolicy"></wsdl:input>
+            <wsdl:output message="ns:validateDeploymentPolicyResponse" wsaw:Action="urn:validateDeploymentPolicyResponse"></wsdl:output>
+            <wsdl:fault message="ns:CloudControllerServiceInvalidPartitionException" name="CloudControllerServiceInvalidPartitionException" wsaw:Action="urn:validateDeploymentPolicyCloudControllerServiceInvalidPartitionException"></wsdl:fault>
+            <wsdl:fault message="ns:CloudControllerServiceInvalidCartridgeTypeException" name="CloudControllerServiceInvalidCartridgeTypeException" wsaw:Action="urn:validateDeploymentPolicyCloudControllerServiceInvalidCartridgeTypeException"></wsdl:fault>
         </wsdl:operation>
         <wsdl:operation name="startContainers">
-            <wsdl:input message="ns:startContainersRequest" wsaw:Action="urn:startContainers"/>
-            <wsdl:output message="ns:startContainersResponse" wsaw:Action="urn:startContainersResponse"/>
-            <wsdl:fault message="ns:CloudControllerServiceUnregisteredCartridgeException" name="CloudControllerServiceUnregisteredCartridgeException" wsaw:Action="urn:startContainersCloudControllerServiceUnregisteredCartridgeException"/>
+            <wsdl:input message="ns:startContainersRequest" wsaw:Action="urn:startContainers"></wsdl:input>
+            <wsdl:output message="ns:startContainersResponse" wsaw:Action="urn:startContainersResponse"></wsdl:output>
+            <wsdl:fault message="ns:CloudControllerServiceUnregisteredCartridgeException" name="CloudControllerServiceUnregisteredCartridgeException" wsaw:Action="urn:startContainersCloudControllerServiceUnregisteredCartridgeException"></wsdl:fault>
         </wsdl:operation>
         <wsdl:operation name="terminateInstance">
-            <wsdl:input message="ns:terminateInstanceRequest" wsaw:Action="urn:terminateInstance"/>
-            <wsdl:fault message="ns:CloudControllerServiceInvalidMemberException" name="CloudControllerServiceInvalidMemberException" wsaw:Action="urn:terminateInstanceCloudControllerServiceInvalidMemberException"/>
-            <wsdl:fault message="ns:CloudControllerServiceInvalidCartridgeTypeException" name="CloudControllerServiceInvalidCartridgeTypeException" wsaw:Action="urn:terminateInstanceCloudControllerServiceInvalidCartridgeTypeException"/>
+            <wsdl:input message="ns:terminateInstanceRequest" wsaw:Action="urn:terminateInstance"></wsdl:input>
+            <wsdl:fault message="ns:CloudControllerServiceInvalidMemberException" name="CloudControllerServiceInvalidMemberException" wsaw:Action="urn:terminateInstanceCloudControllerServiceInvalidMemberException"></wsdl:fault>
+            <wsdl:fault message="ns:CloudControllerServiceInvalidCartridgeTypeException" name="CloudControllerServiceInvalidCartridgeTypeException" wsaw:Action="urn:terminateInstanceCloudControllerServiceInvalidCartridgeTypeException"></wsdl:fault>
         </wsdl:operation>
         <wsdl:operation name="registerService">
-            <wsdl:input message="ns:registerServiceRequest" wsaw:Action="urn:registerService"/>
-            <wsdl:output message="ns:registerServiceResponse" wsaw:Action="urn:registerServiceResponse"/>
-            <wsdl:fault message="ns:CloudControllerServiceUnregisteredCartridgeException" name="CloudControllerServiceUnregisteredCartridgeException" wsaw:Action="urn:registerServiceCloudControllerServiceUnregisteredCartridgeException"/>
+            <wsdl:input message="ns:registerServiceRequest" wsaw:Action="urn:registerService"></wsdl:input>
+            <wsdl:output message="ns:registerServiceResponse" wsaw:Action="urn:registerServiceResponse"></wsdl:output>
+            <wsdl:fault message="ns:CloudControllerServiceUnregisteredCartridgeException" name="CloudControllerServiceUnregisteredCartridgeException" wsaw:Action="urn:registerServiceCloudControllerServiceUnregisteredCartridgeException"></wsdl:fault>
         </wsdl:operation>
         <wsdl:operation name="deployCartridgeDefinition">
-            <wsdl:input message="ns:deployCartridgeDefinitionRequest" wsaw:Action="urn:deployCartridgeDefinition"/>
-            <wsdl:output message="ns:deployCartridgeDefinitionResponse" wsaw:Action="urn:deployCartridgeDefinitionResponse"/>
-            <wsdl:fault message="ns:CloudControllerServiceInvalidCartridgeDefinitionException" name="CloudControllerServiceInvalidCartridgeDefinitionException" wsaw:Action="urn:deployCartridgeDefinitionCloudControllerServiceInvalidCartridgeDefinitionException"/>
-            <wsdl:fault message="ns:CloudControllerServiceInvalidIaasProviderException" name="CloudControllerServiceInvalidIaasProviderException" wsaw:Action="urn:deployCartridgeDefinitionCloudControllerServiceInvalidIaasProviderException"/>
+            <wsdl:input message="ns:deployCartridgeDefinitionRequest" wsaw:Action="urn:deployCartridgeDefinition"></wsdl:input>
+            <wsdl:output message="ns:deployCartridgeDefinitionResponse" wsaw:Action="urn:deployCartridgeDefinitionResponse"></wsdl:output>
+            <wsdl:fault message="ns:CloudControllerServiceInvalidCartridgeDefinitionException" name="CloudControllerServiceInvalidCartridgeDefinitionException" wsaw:Action="urn:deployCartridgeDefinitionCloudControllerServiceInvalidCartridgeDefinitionException"></wsdl:fault>
+            <wsdl:fault message="ns:CloudControllerServiceInvalidIaasProviderException" name="CloudControllerServiceInvalidIaasProviderException" wsaw:Action="urn:deployCartridgeDefinitionCloudControllerServiceInvalidIaasProviderException"></wsdl:fault>
         </wsdl:operation>
         <wsdl:operation name="getCartridgeInfo">
-            <wsdl:input message="ns:getCartridgeInfoRequest" wsaw:Action="urn:getCartridgeInfo"/>
-            <wsdl:output message="ns:getCartridgeInfoResponse" wsaw:Action="urn:getCartridgeInfoResponse"/>
-            <wsdl:fault message="ns:CloudControllerServiceUnregisteredCartridgeException" name="CloudControllerServiceUnregisteredCartridgeException" wsaw:Action="urn:getCartridgeInfoCloudControllerServiceUnregisteredCartridgeException"/>
+            <wsdl:input message="ns:getCartridgeInfoRequest" wsaw:Action="urn:getCartridgeInfo"></wsdl:input>
+            <wsdl:output message="ns:getCartridgeInfoResponse" wsaw:Action="urn:getCartridgeInfoResponse"></wsdl:output>
+            <wsdl:fault message="ns:CloudControllerServiceUnregisteredCartridgeException" name="CloudControllerServiceUnregisteredCartridgeException" wsaw:Action="urn:getCartridgeInfoCloudControllerServiceUnregisteredCartridgeException"></wsdl:fault>
         </wsdl:operation>
         <wsdl:operation name="terminateAllContainers">
-            <wsdl:input message="ns:terminateAllContainersRequest" wsaw:Action="urn:terminateAllContainers"/>
-            <wsdl:fault message="ns:CloudControllerServiceInvalidClusterException" name="CloudControllerServiceInvalidClusterException" wsaw:Action="urn:terminateAllContainersCloudControllerServiceInvalidClusterException"/>
+            <wsdl:input message="ns:terminateAllContainersRequest" wsaw:Action="urn:terminateAllContainers"></wsdl:input>
+            <wsdl:fault message="ns:CloudControllerServiceInvalidClusterException" name="CloudControllerServiceInvalidClusterException" wsaw:Action="urn:terminateAllContainersCloudControllerServiceInvalidClusterException"></wsdl:fault>
         </wsdl:operation>
         <wsdl:operation name="unregisterService">
-            <wsdl:input message="ns:unregisterServiceRequest" wsaw:Action="urn:unregisterService"/>
-            <wsdl:output message="ns:unregisterServiceResponse" wsaw:Action="urn:unregisterServiceResponse"/>
-            <wsdl:fault message="ns:CloudControllerServiceUnregisteredClusterException" name="CloudControllerServiceUnregisteredClusterException" wsaw:Action="urn:unregisterServiceCloudControllerServiceUnregisteredClusterException"/>
+            <wsdl:input message="ns:unregisterServiceRequest" wsaw:Action="urn:unregisterService"></wsdl:input>
+            <wsdl:output message="ns:unregisterServiceResponse" wsaw:Action="urn:unregisterServiceResponse"></wsdl:output>
+            <wsdl:fault message="ns:CloudControllerServiceUnregisteredClusterException" name="CloudControllerServiceUnregisteredClusterException" wsaw:Action="urn:unregisterServiceCloudControllerServiceUnregisteredClusterException"></wsdl:fault>
         </wsdl:operation>
         <wsdl:operation name="undeployCartridgeDefinition">
-            <wsdl:input message="ns:undeployCartridgeDefinitionRequest" wsaw:Action="urn:undeployCartridgeDefinition"/>
-            <wsdl:output message="ns:undeployCartridgeDefinitionResponse" wsaw:Action="urn:undeployCartridgeDefinitionResponse"/>
-            <wsdl:fault message="ns:CloudControllerServiceInvalidCartridgeTypeException" name="CloudControllerServiceInvalidCartridgeTypeException" wsaw:Action="urn:undeployCartridgeDefinitionCloudControllerServiceInvalidCartridgeTypeException"/>
+            <wsdl:input message="ns:undeployCartridgeDefinitionRequest" wsaw:Action="urn:undeployCartridgeDefinition"></wsdl:input>
+            <wsdl:output message="ns:undeployCartridgeDefinitionResponse" wsaw:Action="urn:undeployCartridgeDefinitionResponse"></wsdl:output>
+            <wsdl:fault message="ns:CloudControllerServiceInvalidCartridgeTypeException" name="CloudControllerServiceInvalidCartridgeTypeException" wsaw:Action="urn:undeployCartridgeDefinitionCloudControllerServiceInvalidCartridgeTypeException"></wsdl:fault>
         </wsdl:operation>
         <wsdl:operation name="terminateAllInstances">
-            <wsdl:input message="ns:terminateAllInstancesRequest" wsaw:Action="urn:terminateAllInstances"/>
-            <wsdl:fault message="ns:CloudControllerServiceInvalidClusterException" name="CloudControllerServiceInvalidClusterException" wsaw:Action="urn:terminateAllInstancesCloudControllerServiceInvalidClusterException"/>
+            <wsdl:input message="ns:terminateAllInstancesRequest" wsaw:Action="urn:terminateAllInstances"></wsdl:input>
+            <wsdl:fault message="ns:CloudControllerServiceInvalidClusterException" name="CloudControllerServiceInvalidClusterException" wsaw:Action="urn:terminateAllInstancesCloudControllerServiceInvalidClusterException"></wsdl:fault>
         </wsdl:operation>
         <wsdl:operation name="unregisterDockerService">
-            <wsdl:input message="ns:unregisterDockerServiceRequest" wsaw:Action="urn:unregisterDockerService"/>
-            <wsdl:fault message="ns:CloudControllerServiceUnregisteredClusterException" name="CloudControllerServiceUnregisteredClusterException" wsaw:Action="urn:unregisterDockerServiceCloudControllerServiceUnregisteredClusterException"/>
+            <wsdl:input message="ns:unregisterDockerServiceRequest" wsaw:Action="urn:unregisterDockerService"></wsdl:input>
+            <wsdl:fault message="ns:CloudControllerServiceUnregisteredClusterException" name="CloudControllerServiceUnregisteredClusterException" wsaw:Action="urn:unregisterDockerServiceCloudControllerServiceUnregisteredClusterException"></wsdl:fault>
         </wsdl:operation>
         <wsdl:operation name="getRegisteredCartridges">
-            <wsdl:input message="ns:getRegisteredCartridgesRequest" wsaw:Action="urn:getRegisteredCartridges"/>
-            <wsdl:output message="ns:getRegisteredCartridgesResponse" wsaw:Action="urn:getRegisteredCartridgesResponse"/>
+            <wsdl:input message="ns:getRegisteredCartridgesRequest" wsaw:Action="urn:getRegisteredCartridges"></wsdl:input>
+            <wsdl:output message="ns:getRegisteredCartridgesResponse" wsaw:Action="urn:getRegisteredCartridgesResponse"></wsdl:output>
         </wsdl:operation>
         <wsdl:operation name="startInstance">
-            <wsdl:input message="ns:startInstanceRequest" wsaw:Action="urn:startInstance"/>
-            <wsdl:output message="ns:startInstanceResponse" wsaw:Action="urn:startInstanceResponse"/>
-            <wsdl:fault message="ns:CloudControllerServiceUnregisteredCartridgeException" name="CloudControllerServiceUnregisteredCartridgeException" wsaw:Action="urn:startInstanceCloudControllerServiceUnregisteredCartridgeException"/>
-            <wsdl:fault message="ns:CloudControllerServiceInvalidIaasProviderException" name="CloudControllerServiceInvalidIaasProviderException" wsaw:Action="urn:startInstanceCloudControllerServiceInvalidIaasProviderException"/>
+            <wsdl:input message="ns:startInstanceRequest" wsaw:Action="urn:startInstance"></wsdl:input>
+            <wsdl:output message="ns:startInstanceResponse" wsaw:Action="urn:startInstanceResponse"></wsdl:output>
+            <wsdl:fault message="ns:CloudControllerServiceUnregisteredCartridgeException" name="CloudControllerServiceUnregisteredCartridgeException" wsaw:Action="urn:startInstanceCloudControllerServiceUnregisteredCartridgeException"></wsdl:fault>
+            <wsdl:fault message="ns:CloudControllerServiceInvalidIaasProviderException" name="CloudControllerServiceInvalidIaasProviderException" wsaw:Action="urn:startInstanceCloudControllerServiceInvalidIaasProviderException"></wsdl:fault>
         </wsdl:operation>
         <wsdl:operation name="updateContainers">
-            <wsdl:input message="ns:updateContainersRequest" wsaw:Action="urn:updateContainers"/>
-            <wsdl:output message="ns:updateContainersResponse" wsaw:Action="urn:updateContainersResponse"/>
-            <wsdl:fault message="ns:CloudControllerServiceUnregisteredCartridgeException" name="CloudControllerServiceUnregisteredCartridgeException" wsaw:Action="urn:updateContainersCloudControllerServiceUnregisteredCartridgeException"/>
+            <wsdl:input message="ns:updateContainersRequest" wsaw:Action="urn:updateContainers"></wsdl:input>
+            <wsdl:output message="ns:updateContainersResponse" wsaw:Action="urn:updateContainersResponse"></wsdl:output>
+            <wsdl:fault message="ns:CloudControllerServiceUnregisteredCartridgeException" name="CloudControllerServiceUnregisteredCartridgeException" wsaw:Action="urn:updateContainersCloudControllerServiceUnregisteredCartridgeException"></wsdl:fault>
         </wsdl:operation>
         <wsdl:operation name="getClusterContext">
-            <wsdl:input message="ns:getClusterContextRequest" wsaw:Action="urn:getClusterContext"/>
-            <wsdl:output message="ns:getClusterContextResponse" wsaw:Action="urn:getClusterContextResponse"/>
+            <wsdl:input message="ns:getClusterContextRequest" wsaw:Action="urn:getClusterContext"></wsdl:input>
+            <wsdl:output message="ns:getClusterContextResponse" wsaw:Action="urn:getClusterContextResponse"></wsdl:output>
         </wsdl:operation>
     </wsdl:portType>
     <wsdl:binding name="CloudControllerServiceSoap11Binding" type="ns:CloudControllerServicePortType">
-        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
+        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"></soap:binding>
         <wsdl:operation name="validatePartition">
-            <soap:operation soapAction="urn:validatePartition" style="document"/>
+            <soap:operation soapAction="urn:validatePartition" style="document"></soap:operation>
             <wsdl:input>
-                <soap:body use="literal"/>
+                <soap:body use="literal"></soap:body>
             </wsdl:input>
             <wsdl:output>
-                <soap:body use="literal"/>
+                <soap:body use="literal"></soap:body>
             </wsdl:output>
             <wsdl:fault name="CloudControllerServiceInvalidPartitionException">
-                <soap:fault use="literal" name="CloudControllerServiceInvalidPartitionException"/>
+                <soap:fault use="literal" name="CloudControllerServiceInvalidPartitionException"></soap:fault>
+            </wsdl:fault>
+        </wsdl:operation>
+        <wsdl:operation name="terminateContainer">
+            <soap:operation soapAction="urn:terminateContainer" style="document"></soap:operation>
+            <wsdl:input>
+                <soap:body use="literal"></soap:body>
+            </wsdl:input>
+            <wsdl:fault name="CloudControllerServiceMemberTerminationFailedException">
+                <soap:fault use="literal" name="CloudControllerServiceMemberTerminationFailedException"></soap:fault>
             </wsdl:fault>
         </wsdl:operation>
         <wsdl:operation name="validateDeploymentPolicy">
-            <soap:operation soapAction="urn:validateDeploymentPolicy" style="document"/>
+            <soap:operation soapAction="urn:validateDeploymentPolicy" style="document"></soap:operation>
             <wsdl:input>
-                <soap:body use="literal"/>
+                <soap:body use="literal"></soap:body>
             </wsdl:input>
             <wsdl:output>
-                <soap:body use="literal"/>
+                <soap:body use="literal"></soap:body>
             </wsdl:output>
             <wsdl:fault name="CloudControllerServiceInvalidPartitionException">
-                <soap:fault use="literal" name="CloudControllerServiceInvalidPartitionException"/>
+                <soap:fault use="literal" name="CloudControllerServiceInvalidPartitionException"></soap:fault>
             </wsdl:fault>
             <wsdl:fault name="CloudControllerServiceInvalidCartridgeTypeException">
-                <soap:fault use="literal" name="CloudControllerServiceInvalidCartridgeTypeException"/>
+                <soap:fault use="literal" name="CloudControllerServiceInvalidCartridgeTypeException"></soap:fault>
             </wsdl:fault>
         </wsdl:operation>
         <wsdl:operation name="terminateInstance">
-            <soap:operation soapAction="urn:terminateInstance" style="document"/>
+            <soap:operation soapAction="urn:terminateInstance" style="document"></soap:operation>
             <wsdl:input>
-                <soap:body use="literal"/>
+                <soap:body use="literal"></soap:body>
             </wsdl:input>
             <wsdl:fault name="CloudControllerServiceInvalidMemberException">
-                <soap:fault use="literal" name="CloudControllerServiceInvalidMemberException"/>
+                <soap:fault use="literal" name="CloudControllerServiceInvalidMemberException"></soap:fault>
             </wsdl:fault>
             <wsdl:fault name="CloudControllerServiceInvalidCartridgeTypeException">
-                <soap:fault use="literal" name="CloudControllerServiceInvalidCartridgeTypeException"/>
+                <soap:fault use="literal" name="CloudControllerServiceInvalidCartridgeTypeException"></soap:fault>
             </wsdl:fault>
         </wsdl:operation>
         <wsdl:operation name="startContainers">
-            <soap:operation soapAction="urn:startContainers" style="document"/>
+            <soap:operation soapAction="urn:startContainers" style="document"></soap:operation>
             <wsdl:input>
-                <soap:body use="literal"/>
+                <soap:body use="literal"></soap:body>
             </wsdl:input>
             <wsdl:output>
-                <soap:body use="literal"/>
+                <soap:body use="literal"></soap:body>
             </wsdl:output>
             <wsdl:fault name="CloudControllerServiceUnregisteredCartridgeException">
-                <soap:fault use="literal" name="CloudControllerServiceUnregisteredCartridgeException"/>
+                <soap:fault use="literal" name="CloudControllerServiceUnregisteredCartridgeException"></soap:fault>
             </wsdl:fault>
         </wsdl:operation>
         <wsdl:operation name="registerService">
-            <soap:operation soapAction="urn:registerService" style="document"/>
+            <soap:operation soapAction="urn:registerService" style="document"></soap:operation>
             <wsdl:input>
-                <soap:body use="literal"/>
+                <soap:body use="literal"></soap:body>
             </wsdl:input>
             <wsdl:output>
-                <soap:body use="literal"/>
+                <soap:body use="literal"></soap:body>
             </wsdl:output>
             <wsdl:fault name="CloudControllerServiceUnregisteredCartridgeException">
-                <soap:fault use="literal" name="CloudControllerServiceUnregisteredCartridgeException"/>
+                <soap:fault use="literal" name="CloudControllerServiceUnregisteredCartridgeException"></soap:fault>
             </wsdl:fault>
         </wsdl:operation>
         <wsdl:operation name="deployCartridgeDefinition">
-            <soap:operation soapAction="urn:deployCartridgeDefinition" style="document"/>
+            <soap:operation soapAction="urn:deployCartridgeDefinition" style="document"></soap:operation>
             <wsdl:input>
-                <soap:body use="literal"/>
+                <soap:body use="literal"></soap:body>
             </wsdl:input>
             <wsdl:output>
-                <soap:body use="literal"/>
+                <soap:body use="literal"></soap:body>
             </wsdl:output>
             <wsdl:fault name="CloudControllerServiceInvalidCartridgeDefinitionException">
-                <soap:fault use="literal" name="CloudControllerServiceInvalidCartridgeDefinitionException"/>
+                <soap:fault use="literal" name="CloudControllerServiceInvalidCartridgeDefinitionException"></soap:fault>
             </wsdl:fault>
             <wsdl:fault name="CloudControllerServiceInvalidIaasProviderException">
-                <soap:fault use="literal" name="CloudControllerServiceInvalidIaasProviderException"/>
+                <soap:fault use="literal" name="CloudControllerServiceInvalidIaasProviderException"></soap:fault>
             </wsdl:fault>
         </wsdl:operation>
         <wsdl:operation name="getCartridgeInfo">
-            <soap:operation soapAction="urn:getCartridgeInfo" style="document"/>
+            <soap:operation soapAction="urn:getCartridgeInfo" style="document"></soap:operation>
             <wsdl:input>
-                <soap:body use="literal"/>
+                <soap:body use="literal"></soap:body>
             </wsdl:input>
             <wsdl:output>
-                <soap:body use="literal"/>
+                <soap:body use="literal"></soap:body>
             </wsdl:output>
             <wsdl:fault name="CloudControllerServiceUnregisteredCartridgeException">
-                <soap:fault use="literal" name="CloudControllerServiceUnregisteredCartridgeException"/>
+                <soap:fault use="literal" name="CloudControllerServiceUnregisteredCartridgeException"></soap:fault>
             </wsdl:fault>
         </wsdl:operation>
         <wsdl:operation name="terminateAllContainers">
-            <soap:operation soapAction="urn:terminateAllContainers" style="document"/>
+            <soap:operation soapAction="urn:terminateAllContainers" style="document"></soap:operation>
             <wsdl:input>
-                <soap:body use="literal"/>
+                <soap:body use="literal"></soap:body>
             </wsdl:input>
             <wsdl:fault name="CloudControllerServiceInvalidClusterException">
-                <soap:fault use="literal" name="CloudControllerServiceInvalidClusterException"/>
+                <soap:fault use="literal" name="CloudControllerServiceInvalidClusterException"></soap:fault>
             </wsdl:fault>
         </wsdl:operation>
         <wsdl:operation name="unregisterService">
-            <soap:operation soapAction="urn:unregisterService" style="document"/>
+            <soap:operation soapAction="urn:unregisterService" style="document"></soap:operation>
             <wsdl:input>
-                <soap:body use="literal"/>
+                <soap:body use="literal"></soap:body>
             </wsdl:input>
             <wsdl:output>
-                <soap:body use="literal"/>
+                <soap:body use="literal"></soap:body>
             </wsdl:output>
             <wsdl:fault name="CloudControllerServiceUnregisteredClusterException">
-                <soap:fault use="literal" name="CloudControllerServiceUnregisteredClusterException"/>
+                <soap:fault use="literal" name="CloudControllerServiceUnregisteredClusterException"></soap:fault>
             </wsdl:fault>
         </wsdl:operation>
         <wsdl:operation name="undeployCartridgeDefinition">
-            <soap:operation soapAction="urn:undeployCartridgeDefinition" style="document"/>
+            <soap:operation soapAction="urn:undeployCartridgeDefinition" style="document"></soap:operation>
             <wsdl:input>
-                <soap:body use="literal"/>
+                <soap:body use="literal"></soap:body>
             </wsdl:input>
             <wsdl:output>
-                <soap:body use="literal"/>
+                <soap:body use="literal"></soap:body>
             </wsdl:output>
             <wsdl:fault name="CloudControllerServiceInvalidCartridgeTypeException">
-                <soap:fault use="literal" name="CloudControllerServiceInvalidCartridgeTypeException"/>
+                <soap:fault use="literal" name="CloudControllerServiceInvalidCartridgeTypeException"></soap:fault>
             </wsdl:fault>
         </wsdl:operation>
         <wsdl:operation name="terminateAllInstances">
-            <soap:operation soapAction="urn:terminateAllInstances" style="document"/>
+            <soap:operation soapAction="urn:terminateAllInstances" style="document"></soap:operation>
             <wsdl:input>
-                <soap:body use="literal"/>
+                <soap:body use="literal"></soap:body>
             </wsdl:input>
             <wsdl:fault name="CloudControllerServiceInvalidClusterException">
-                <soap:fault use="literal" name="CloudControllerServiceInvalidClusterException"/>
+                <soap:fault use="literal" name="CloudControllerServiceInvalidClusterException"></soap:fault>
             </wsdl:fault>
         </wsdl:operation>
         <wsdl:operation name="getRegisteredCartridges">
-            <soap:operation soapAction="urn:getRegisteredCartridges" style="document"/>
+            <soap:operation soapAction="urn:getRegisteredCartridges" style="document"></soap:operation>
             <wsdl:input>
-                <soap:body use="literal"/>
+                <soap:body use="literal"></soap:body>
             </wsdl:input>
             <wsdl:output>
-                <soap:body use="literal"/>
+                <soap:body use="literal"></soap:body>
             </wsdl:output>
         </wsdl:operation>
         <wsdl:operation name="unregisterDockerService">
-            <soap:operation soapAction="urn:unregisterDockerService" style="document"/>
+            <soap:operation soapAction="urn:unregisterDockerService" style="document"></soap:operation>
             <wsdl:input>
-                <soap:body use="literal"/>
+                <soap:body use="literal"></soap:body>
             </wsdl:input>
 

<TRUNCATED>

[11/50] [abbrv] git commit: Regenerate MemberContext.toString

Posted by ni...@apache.org.
Regenerate MemberContext.toString


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

Branch: refs/heads/master
Commit: 9a91789dae6d42d25fbb29fcb2f0701522799dea
Parents: 5e4c7c1
Author: Nirmal Fernando <ni...@gmail.com>
Authored: Wed Oct 8 18:55:37 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:55 2014 +0530

----------------------------------------------------------------------
 .../cloud/controller/pojo/MemberContext.java     | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/9a91789d/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/MemberContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/MemberContext.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/MemberContext.java
index dd6013a..ec67b46 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/MemberContext.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/MemberContext.java
@@ -146,15 +146,6 @@ public class MemberContext implements Serializable {
         this.networkPartitionId = networkPartitionId;
     }
 
-    @Override
-    public String toString() {
-        return "MemberContext [memberId=" + memberId + ", nodeId=" + nodeId + ", clusterId=" +
-               clusterId + ", cartridgeType=" + cartridgeType + ", privateIpAddress=" +
-               privateIpAddress + ", publicIpAddress=" + publicIpAddress + ", allocatedIpAddress=" +
-               allocatedIpAddress + ", initTime=" + initTime + ", lbClusterId=" + lbClusterId +
-               ", networkPartitionId=" + networkPartitionId + "]";
-    }
-
 	@Override
 	public int hashCode() {
 		final int prime = 31;
@@ -209,5 +200,15 @@ public class MemberContext implements Serializable {
     public void setProperties(Properties properties) {
         this.properties = properties;
     }
+
+    @Override
+    public String toString() {
+        return "MemberContext [memberId=" + memberId + ", nodeId=" + nodeId + ", instanceId="
+                + instanceId + ", clusterId=" + clusterId + ", partition=" + partition
+                + ", cartridgeType=" + cartridgeType + ", privateIpAddress=" + privateIpAddress
+                + ", publicIpAddress=" + publicIpAddress + ", allocatedIpAddress="
+                + allocatedIpAddress + ", initTime=" + initTime + ", lbClusterId=" + lbClusterId
+                + ", networkPartitionId=" + networkPartitionId + ", properties=" + properties + "]";
+    }
     
 }


[40/50] [abbrv] git commit: Make getProperty method to use entry set instead of key set.

Posted by ni...@apache.org.
Make getProperty method to use entry set instead of key set.


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

Branch: refs/heads/master
Commit: 9b7ec1f08ca33c80ca9cd829881886d2c3c72833
Parents: edc243e
Author: Nirmal Fernando <ni...@gmail.com>
Authored: Sat Oct 11 09:12:39 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:58 2014 +0530

----------------------------------------------------------------------
 .../cloud/controller/util/CloudControllerUtil.java    | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/9b7ec1f0/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerUtil.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerUtil.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerUtil.java
index 6374cc9..fe2493d 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerUtil.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerUtil.java
@@ -293,12 +293,14 @@ public class CloudControllerUtil {
 	
 	public static String getProperty(Properties properties, String key) {
     	if (key != null && properties != null) {
-    		for (Iterator<Object> iterator = properties.keySet().iterator(); iterator.hasNext();) {
-				String prop = (String) iterator.next();
-				if (key.equals(prop)) {
-					return properties.getProperty(prop);
-				}
-			}
+    	    for (Iterator<Entry<Object, Object>> iterator = properties.entrySet().iterator(); iterator.hasNext();) {
+                Entry<Object, Object> type = (Entry<Object, Object>) iterator.next();
+                String propName = type.getKey().toString();
+                String propValue = type.getValue().toString();
+                if (key.equals(propName)) {
+                    return propValue;
+                }
+            }
     	}
     	
     	return null;


[47/50] [abbrv] git commit: Avoid response handler throwing HttpResponseException.

Posted by ni...@apache.org.
Avoid response handler throwing HttpResponseException.


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

Branch: refs/heads/master
Commit: 06b1675923fc214e172880408802531a196a0138
Parents: b0fd7b6
Author: Nirmal Fernando <ni...@gmail.com>
Authored: Sat Oct 11 09:08:26 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:58 2014 +0530

----------------------------------------------------------------------
 .../kubernetes/client/rest/KubernetesResponseHandler.java       | 5 -----
 1 file changed, 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/06b16759/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/rest/KubernetesResponseHandler.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/rest/KubernetesResponseHandler.java b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/rest/KubernetesResponseHandler.java
index da6aa90..828d996 100644
--- a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/rest/KubernetesResponseHandler.java
+++ b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/rest/KubernetesResponseHandler.java
@@ -40,11 +40,6 @@ public class KubernetesResponseHandler implements ResponseHandler<KubernetesResp
             IOException {
         StatusLine statusLine = response.getStatusLine();
         HttpEntity entity = response.getEntity();
-        if (statusLine.getStatusCode() >= 300) {
-            throw new HttpResponseException(
-                    statusLine.getStatusCode(),
-                    statusLine.getReasonPhrase());
-        }
         if (entity == null) {
             throw new ClientProtocolException("Response contains no content");
         }


[22/50] [abbrv] git commit: Fixing error messages.

Posted by ni...@apache.org.
Fixing error messages.


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

Branch: refs/heads/master
Commit: 90c37ece53ddd46929d48f514c198f1d2a71e0e2
Parents: fb53d22
Author: Nirmal Fernando <ni...@gmail.com>
Authored: Wed Oct 8 22:18:53 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:56 2014 +0530

----------------------------------------------------------------------
 .../apache/stratos/kubernetes/client/KubernetesApiClient.java  | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/90c37ece/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java
index 99485c6..4ee6e06 100644
--- a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java
+++ b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java
@@ -175,7 +175,7 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
 		} catch (KubernetesClientException e) {
 			throw e;
 		} catch (Exception e) {
-			String msg = "Error while retrieving Pod info of Pod ID: "+podId;
+			String msg = "Error while deleting Pod with ID: "+podId;
 			log.error(msg, e);
 			throw new KubernetesClientException(msg, e);
 		}
@@ -350,7 +350,7 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
 		} catch (KubernetesClientException e) {
 			throw e;
 		} catch (Exception e) {
-			String msg = "Error while retrieving Replication Controller info of Controller ID: "+controllerId;
+			String msg = "Error while deleting Replication Controller with Controller ID: "+controllerId;
 			log.error(msg, e);
 			throw new KubernetesClientException(msg, e);
 		}
@@ -471,7 +471,7 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
 			throw e;
 			
 		} catch (Exception e) {
-			String msg = "Error while retrieving Service info of Service ID: "+serviceId;
+			String msg = "Error while deleting Service with Service ID: "+serviceId;
 			log.error(msg, e);
 			throw new KubernetesClientException(msg, e);
 		}


[43/50] [abbrv] git commit: IP allocation asynchronously in update containers.

Posted by ni...@apache.org.
IP allocation asynchronously in update containers.


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

Branch: refs/heads/master
Commit: f8353a6fb2e84acbc9c69ceaeb025fa00e3c512e
Parents: 848f23c
Author: Nirmal Fernando <ni...@gmail.com>
Authored: Fri Oct 10 20:33:42 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:58 2014 +0530

----------------------------------------------------------------------
 .../controller/impl/CloudControllerServiceImpl.java     | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/f8353a6f/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 5acb86c..5194a76 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
@@ -1721,12 +1721,12 @@ public class CloudControllerServiceImpl implements CloudControllerService {
                             .getProperties(), StratosConstants.ALLOCATED_SERVICE_HOST_PORT,
                             ctxt.getProperties().getProperty(StratosConstants.ALLOCATED_SERVICE_HOST_PORT)));
                     
-                    dataHolder.addMemberContext(context);
-                    
-                    // trigger topology
-                    // update the topology with the newly spawned member
-                    TopologyBuilder.handleMemberSpawned(cartridgeType, clusterId, null,
-                            pod.getCurrentState().getPodIP(), pod.getCurrentState().getHostIP(), context);
+                    // wait till Pod status turns to running and send member spawned.
+                    ScheduledThreadExecutor exec = ScheduledThreadExecutor.getInstance();
+                    if (LOG.isDebugEnabled()) {
+                        LOG.debug("Cloud Controller is starting the instance start up thread.");
+                    }
+                    dataHolder.addScheduledFutureJob(context.getMemberId(), exec.schedule(new PodActivationWatcher(pod.getId(), context, kubApi), 5000));
                     
                     memberContexts.add(context);
                 }


[13/50] [abbrv] git commit: change logging level from info to debug

Posted by ni...@apache.org.
change logging level from info to debug


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

Branch: refs/heads/master
Commit: d285423268e99ea21343a5f3e8353db3b64de646
Parents: 9d8fa2e
Author: R-Rajkumar <rr...@gmail.com>
Authored: Thu Oct 9 17:11:14 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:56 2014 +0530

----------------------------------------------------------------------
 .../java/org/apache/stratos/cartridge/agent/CartridgeAgent.java    | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/d2854232/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java
index 2db450a..3e81f06 100644
--- a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java
+++ b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java
@@ -88,7 +88,7 @@ public class CartridgeAgent implements Runnable {
 		// wait till the member spawned event
 		while (!CartridgeAgentConfiguration.getInstance().isInitialized()) {
 			try {
-				if (log.isInfoEnabled()) {
+				if (log.isDebugEnabled()) {
 					log.info("Waiting for Cartridge Agent to be initialized...");
 				}
 				Thread.sleep(1000);


[10/50] [abbrv] git commit: No need to set a host port for a container.

Posted by ni...@apache.org.
No need to set a host port for a container.


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

Branch: refs/heads/master
Commit: 08cd01b819a2236e99b7a53e083c4ec171f18e6c
Parents: 9a91789
Author: Nirmal Fernando <ni...@gmail.com>
Authored: Wed Oct 8 18:58:10 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:55 2014 +0530

----------------------------------------------------------------------
 .../functions/ContainerClusterContextToKubernetesContainer.java     | 1 -
 1 file changed, 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/08cd01b8/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToKubernetesContainer.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToKubernetesContainer.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToKubernetesContainer.java
index 4c892eb..7b940d9 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToKubernetesContainer.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToKubernetesContainer.java
@@ -85,7 +85,6 @@ public class ContainerClusterContextToKubernetesContainer implements Function<Co
         for (PortMapping portMapping : cartridge.getPortMappings()) {
             Port p = new Port();
             p.setContainerPort(Integer.parseInt(portMapping.getPort()));
-            p.setHostPort(Integer.parseInt(portMapping.getPort()));
             // In kubernetes transport protocol always be 'tcp'
             p.setProtocol("tcp");
             p.setName(p.getProtocol() + p.getContainerPort());


[41/50] [abbrv] git commit: If the member context is already there, stop executing 'on Pod activated' logic.

Posted by ni...@apache.org.
If the member context is already there, stop executing 'on Pod activated' logic.


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

Branch: refs/heads/master
Commit: d7fc233fc58f1073e79f6af9255a5b86a46246e1
Parents: 7373d86
Author: Nirmal Fernando <ni...@gmail.com>
Authored: Fri Oct 10 20:29:56 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:58 2014 +0530

----------------------------------------------------------------------
 .../stratos/cloud/controller/util/PodActivationWatcher.java   | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/d7fc233f/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/PodActivationWatcher.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/PodActivationWatcher.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/PodActivationWatcher.java
index 13d1ac6..672cfeb 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/PodActivationWatcher.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/PodActivationWatcher.java
@@ -48,20 +48,21 @@ public class PodActivationWatcher implements Runnable {
     @Override
     public void run() {
         try {
+            FasterLookUpDataHolder dataHolder = FasterLookUpDataHolder.getInstance();
             Pod pod = kubApi.getPod(podId);
             if (LOG.isDebugEnabled()) {
                 LOG.debug("PodActivationWatcher running : "+pod.getCurrentState().getStatus());
             }
-            if ("Running".equals(pod.getCurrentState().getStatus())) {
+            if ("Running".equals(pod.getCurrentState().getStatus()) && dataHolder.getMemberContextOfMemberId(podId) == null) {
                 String hostIP = pod.getCurrentState().getHost();
                 ctxt.setPublicIpAddress(hostIP);
                 ctxt.setPrivateIpAddress(hostIP);
-                FasterLookUpDataHolder.getInstance().addMemberContext(ctxt);
+                dataHolder.addMemberContext(ctxt);
                 // trigger topology
                 TopologyBuilder.handleMemberSpawned(ctxt.getCartridgeType(), ctxt.getClusterId(), 
                         null, hostIP, hostIP, ctxt);
                 
-                RegistryManager.getInstance().persist(FasterLookUpDataHolder.getInstance());
+                RegistryManager.getInstance().persist(dataHolder);
                 
             }
             


[06/50] [abbrv] git commit: Refactor RestClient to return KubernetesResponses.

Posted by ni...@apache.org.
Refactor RestClient to return KubernetesResponses.


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

Branch: refs/heads/master
Commit: e15c1c39d22ff6bfb637c56bf0589b88ceba1731
Parents: 8635c6f
Author: Nirmal Fernando <ni...@gmail.com>
Authored: Wed Oct 8 18:52:43 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:55 2014 +0530

----------------------------------------------------------------------
 .../kubernetes/client/KubernetesApiClient.java  | 137 ++++++++-----------
 .../kubernetes/client/rest/RestClient.java      |  24 ++--
 2 files changed, 69 insertions(+), 92 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/e15c1c39/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java
index b20dc9b..99485c6 100644
--- a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java
+++ b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java
@@ -40,6 +40,7 @@ import org.apache.stratos.kubernetes.client.model.ReplicationController;
 import org.apache.stratos.kubernetes.client.model.ReplicationControllerList;
 import org.apache.stratos.kubernetes.client.model.Service;
 import org.apache.stratos.kubernetes.client.model.ServiceList;
+import org.apache.stratos.kubernetes.client.rest.KubernetesResponse;
 import org.apache.stratos.kubernetes.client.rest.RestClient;
 
 import com.google.gson.Gson;
@@ -60,17 +61,17 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
 	public Pod getPod(String podId) throws KubernetesClientException{
 		try {
 		    URI uri = new URIBuilder(baseURL+"pods/"+podId).build();
-            HttpResponse res = restClient.doGet(uri);
+            KubernetesResponse res = restClient.doGet(uri);
             
             handleNullResponse("Pod ["+podId+"] retrieval failed.", res);
             
-            if (res.getStatusLine().getStatusCode() == HttpStatus.SC_NOT_FOUND) {
+            if (res.getStatusCode() == HttpStatus.SC_NOT_FOUND) {
             	String msg = "Pod ["+podId+"] doesn't exist.";
 				log.error(msg);
 				throw new KubernetesClientException(msg);
             }
             
-            String content = getHttpResponseString(res);
+            String content = res.getContent();
             
             GsonBuilder gsonBuilder = new GsonBuilder();
 			Gson gson = gsonBuilder.create();
@@ -91,15 +92,15 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
 		
 		try {
 		    URI uri = new URIBuilder(baseURL+"pods").build();
-			HttpResponse res = restClient.doGet(uri);
+			KubernetesResponse res = restClient.doGet(uri);
             
 			handleNullResponse("Pod retrieval failed.", res);
 			
-            if (res.getStatusLine().getStatusCode() == HttpStatus.SC_NOT_FOUND) {
+            if (res.getStatusCode() == HttpStatus.SC_NOT_FOUND) {
             	return new Pod[0];
             }
             
-            String content = getHttpResponseString(res);
+            String content = res.getContent();
             
             GsonBuilder gsonBuilder = new GsonBuilder();
 			Gson gson = gsonBuilder.create();
@@ -124,19 +125,19 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
 				log.debug("CreatePod Request Body : "+content);
 			}
 			URI uri = new URIBuilder(baseURL+"pods").build();
-			HttpResponse res = restClient.doPost(uri, content);
+			KubernetesResponse res = restClient.doPost(uri, content);
 			
 			handleNullResponse("Pod "+pod+" creation failed.", res);
 			
-			if (res.getStatusLine().getStatusCode() == HttpStatus.SC_CONFLICT) {
+			if (res.getStatusCode() == HttpStatus.SC_CONFLICT) {
 				log.warn("Pod already created. "+pod);
 				return;
 			}
             
-			if (res.getStatusLine().getStatusCode() != HttpStatus.SC_ACCEPTED && 
-					res.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
+			if (res.getStatusCode() != HttpStatus.SC_ACCEPTED && 
+					res.getStatusCode() != HttpStatus.SC_OK) {
 				String msg = "Pod ["+pod+"] creation failed. Error: "+	
-								res.getStatusLine().getReasonPhrase();
+								res.getReason();
 				log.error(msg);
 				throw new KubernetesClientException(msg);
 			}
@@ -154,20 +155,20 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
 
 		try {
 		    URI uri = new URIBuilder(baseURL+"pods/"+podId).build();
-			HttpResponse res = restClient.doDelete(uri);
+			KubernetesResponse res = restClient.doDelete(uri);
             
 			handleNullResponse("Pod ["+podId+"] deletion failed.", res);
 			
-            if (res.getStatusLine().getStatusCode() == HttpStatus.SC_NOT_FOUND) {
+            if (res.getStatusCode() == HttpStatus.SC_NOT_FOUND) {
             	String msg = "Pod ["+podId+"] doesn't exist.";
 				log.error(msg);
 				throw new KubernetesClientException(msg);
             }
             
-			if (res.getStatusLine().getStatusCode() != HttpStatus.SC_ACCEPTED && 
-					res.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
+			if (res.getStatusCode() != HttpStatus.SC_ACCEPTED && 
+					res.getStatusCode() != HttpStatus.SC_OK) {
 				String msg = "Pod ["+podId+"] deletion failed. Error: "+
-						res.getStatusLine().getReasonPhrase();
+						res.getReason();
 				log.error(msg);
 				throw new KubernetesClientException(msg);
 			}
@@ -186,17 +187,17 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
 
 		try {
 		    URI uri = new URIBuilder(baseURL+"replicationControllers/"+controllerId).build();
-			HttpResponse res = restClient.doGet(uri);
+			KubernetesResponse res = restClient.doGet(uri);
 			
 			handleNullResponse("Replication Controller ["+controllerId+"] retrieval failed.", res);
             
-            if (res.getStatusLine().getStatusCode() == HttpStatus.SC_NOT_FOUND) {
+            if (res.getStatusCode() == HttpStatus.SC_NOT_FOUND) {
             	String msg = "Replication Controller ["+controllerId+"] doesn't exist.";
 				log.error(msg);
 				throw new KubernetesClientException(msg);
             }
             
-            String content = getHttpResponseString(res);
+            String content = res.getContent();
             
             GsonBuilder gsonBuilder = new GsonBuilder();
 			Gson gson = gsonBuilder.create();
@@ -217,15 +218,15 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
 		
 		try {
 		    URI uri = new URIBuilder(baseURL+"replicationControllers").build();
-			HttpResponse res = restClient.doGet(uri);
+			KubernetesResponse res = restClient.doGet(uri);
             
 			handleNullResponse("Replication Controller retrieval failed.", res);
 			
-            if (res.getStatusLine().getStatusCode() == HttpStatus.SC_NOT_FOUND) {
+            if (res.getStatusCode() == HttpStatus.SC_NOT_FOUND) {
             	return new ReplicationController[0];
             }
             
-            String content = getHttpResponseString(res);
+            String content = res.getContent();
             
             GsonBuilder gsonBuilder = new GsonBuilder();
 			Gson gson = gsonBuilder.create();
@@ -253,15 +254,15 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
 			}
 			
 			URI uri = new URIBuilder(baseURL+"replicationControllers").build();
-			HttpResponse res = restClient.doPost(uri, content);
+			KubernetesResponse res = restClient.doPost(uri, content);
 			
 			handleNullResponse("Replication Controller "+controller+" creation failed.", res);
             
-			if (res.getStatusLine().getStatusCode() != HttpStatus.SC_ACCEPTED && 
-					res.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
+			if (res.getStatusCode() != HttpStatus.SC_ACCEPTED && 
+					res.getStatusCode() != HttpStatus.SC_OK) {
 				String msg = "Replication Controller [" + controller
 						+ "] creation failed. Error: "
-						+ res.getStatusLine().getReasonPhrase();
+						+ res.getReason();
 				log.error(msg);
 				throw new KubernetesClientException(msg);
 			}
@@ -299,15 +300,15 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
 			}
 			
 			URI uri = new URIBuilder(baseURL+"replicationControllers/"+controllerId).build();
-			HttpResponse res = restClient.doPut(uri, content);
+			KubernetesResponse res = restClient.doPut(uri, content);
 			
 			handleNullResponse("Replication Controller ["+controllerId+"] update failed.", res);
 
-			if (res.getStatusLine().getStatusCode() != HttpStatus.SC_ACCEPTED
-					&& res.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
+			if (res.getStatusCode() != HttpStatus.SC_ACCEPTED
+					&& res.getStatusCode() != HttpStatus.SC_OK) {
 				String msg = "Replication Controller [" + controller
 						+ "] update failed. Error: "
-						+ res.getStatusLine().getReasonPhrase();
+						+ res.getReason();
 				log.error(msg);
 				throw new KubernetesClientException(msg);
 			}
@@ -329,20 +330,20 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
 		
 		try {
 		    URI uri = new URIBuilder(baseURL+"replicationControllers/"+controllerId).build();
-			HttpResponse res = restClient.doDelete(uri);
+			KubernetesResponse res = restClient.doDelete(uri);
             
 			handleNullResponse("Replication Controller ["+controllerId+"] deletion failed.", res);
 			
-            if (res.getStatusLine().getStatusCode() == HttpStatus.SC_NOT_FOUND) {
+            if (res.getStatusCode() == HttpStatus.SC_NOT_FOUND) {
             	String msg = "Replication Controller ["+controllerId+"] doesn't exist.";
 				log.error(msg);
 				throw new KubernetesClientException(msg);
             }
             
-			if (res.getStatusLine().getStatusCode() != HttpStatus.SC_ACCEPTED && 
-					res.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
+			if (res.getStatusCode() != HttpStatus.SC_ACCEPTED && 
+					res.getStatusCode() != HttpStatus.SC_OK) {
 				String msg = "Replication Controller ["+controllerId+"] deletion failed. Error: "+
-						res.getStatusLine().getReasonPhrase();
+						res.getReason();
 				log.error(msg);
 				throw new KubernetesClientException(msg);
 			}
@@ -360,17 +361,17 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
 			throws KubernetesClientException {
 		try {
 		    URI uri = new URIBuilder(baseURL+"services/"+serviceId).build();
-			HttpResponse res = restClient.doGet(uri);
+			KubernetesResponse res = restClient.doGet(uri);
 			
 			handleNullResponse("Service ["+serviceId+"] retrieval failed.", res);
             
-            if (res.getStatusLine().getStatusCode() == HttpStatus.SC_NOT_FOUND) {
+            if (res.getStatusCode() == HttpStatus.SC_NOT_FOUND) {
             	String msg = "Service ["+serviceId+"] doesn't exist.";
 				log.error(msg);
 				throw new KubernetesClientException(msg);
             }
             
-            String content = getHttpResponseString(res);
+            String content = res.getContent();
             
             GsonBuilder gsonBuilder = new GsonBuilder();
 			Gson gson = gsonBuilder.create();
@@ -389,15 +390,15 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
 		try {
 		    
 		    URI uri = new URIBuilder(baseURL+"services").build();
-			HttpResponse res = restClient.doGet(uri);
+			KubernetesResponse res = restClient.doGet(uri);
             
 			handleNullResponse("Service retrieval failed.", res);
 			
-            if (res.getStatusLine().getStatusCode() == HttpStatus.SC_NOT_FOUND) {
+            if (res.getStatusCode() == HttpStatus.SC_NOT_FOUND) {
             	return new Service[0];
             }
             
-            String content = getHttpResponseString(res);
+            String content = res.getContent();
             
             GsonBuilder gsonBuilder = new GsonBuilder();
 			Gson gson = gsonBuilder.create();
@@ -422,14 +423,14 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
 			}
 			
 			URI uri = new URIBuilder(baseURL+"services").build();
-			HttpResponse res = restClient.doPost(uri, content);
+			KubernetesResponse res = restClient.doPost(uri, content);
 			
 			handleNullResponse("Service "+service+" creation failed.", res);
 			
-			if (res.getStatusLine().getStatusCode() != HttpStatus.SC_ACCEPTED && 
-					res.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
+			if (res.getStatusCode() != HttpStatus.SC_ACCEPTED && 
+					res.getStatusCode() != HttpStatus.SC_OK) {
 				String msg = "Service ["+service+"] creation failed. Error: "+
-						res.getStatusLine().getReasonPhrase();
+						res.getReason();
 				log.error(msg);
 				throw new KubernetesClientException(msg);
 			}
@@ -449,20 +450,20 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
 
 		try {
 		    URI uri = new URIBuilder(baseURL+"services/"+serviceId).build();
-			HttpResponse res = restClient.doDelete(uri);
+			KubernetesResponse res = restClient.doDelete(uri);
 			
 			handleNullResponse("Service ["+serviceId+"] deletion failed.", res);
             
-            if (res.getStatusLine().getStatusCode() == HttpStatus.SC_NOT_FOUND) {
+            if (res.getStatusCode() == HttpStatus.SC_NOT_FOUND) {
             	String msg = "Service ["+serviceId+"] doesn't exist.";
 				log.error(msg);
 				throw new KubernetesClientException(msg);
             }
             
-			if (res.getStatusLine().getStatusCode() != HttpStatus.SC_ACCEPTED && 
-					res.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
+			if (res.getStatusCode() != HttpStatus.SC_ACCEPTED && 
+					res.getStatusCode() != HttpStatus.SC_OK) {
 				String msg = "Service ["+serviceId+"] deletion failed. Error: "+
-						res.getStatusLine().getReasonPhrase();
+						res.getReason();
 				log.error(msg);
 				throw new KubernetesClientException(msg);
 			}
@@ -482,15 +483,15 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
         try {
             String labelQuery = getLabelQuery(label);
             URI uri = new URIBuilder(baseURL + "pods").addParameter("labels", labelQuery).build();
-            HttpResponse res = restClient.doGet(uri);
+            KubernetesResponse res = restClient.doGet(uri);
             
             handleNullResponse("Pod retrieval failed.", res);
             
-            if (res.getStatusLine().getStatusCode() == HttpStatus.SC_NOT_FOUND) {
+            if (res.getStatusCode() == HttpStatus.SC_NOT_FOUND) {
                 return new Pod[0];
             }
             
-            String content = getHttpResponseString(res);
+            String content = res.getContent();
             
             GsonBuilder gsonBuilder = new GsonBuilder();
             Gson gson = gsonBuilder.create();
@@ -512,10 +513,10 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
         for (Label l : label) {
             query = query.concat("name="+l.getName()+",");
         }
-        return query.endsWith(",") ? query.substring(0, query.length()) : query;
+        return query.endsWith(",") ? query.substring(0, query.length()-1) : query;
     }
 
-    private void handleNullResponse(String message, HttpResponse res)
+    private void handleNullResponse(String message, KubernetesResponse res)
             throws KubernetesClientException {
         if (res == null) {
             log.error(message+ " Null response receieved.");
@@ -523,32 +524,6 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
         }
     }
 	
-	// This method gives the HTTP response string
-	private String getHttpResponseString(HttpResponse response) {
-		try {
-			BufferedReader reader = new BufferedReader(new InputStreamReader(
-					(response.getEntity().getContent())));
-
-			String output;
-			String result = "";
-
-			while ((output = reader.readLine()) != null) {
-				result += output;
-			}
-
-			return result;
-		} catch (SocketException e) {
-			log.error("Connection problem");
-			return null;
-		} catch (NullPointerException e) {
-			log.error("Null value return from server");
-			return null;
-		} catch (IOException e) {
-			log.error("IO error");
-			return null;
-		}
-	}
-
     public String getBaseURL() {
         return baseURL;
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/e15c1c39/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/rest/RestClient.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/rest/RestClient.java b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/rest/RestClient.java
index 272d04b..061c6d6 100644
--- a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/rest/RestClient.java
+++ b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/rest/RestClient.java
@@ -18,6 +18,10 @@
  */
 package org.apache.stratos.kubernetes.client.rest;
 
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.SocketException;
 import java.net.URI;
 
 import org.apache.http.HttpResponse;
@@ -49,7 +53,7 @@ public class RestClient {
      * @throws Exception
      *             if any errors occur when executing the request
      */
-    public HttpResponse doPost(URI resourcePath, String jsonParamString) throws Exception{
+    public KubernetesResponse doPost(URI resourcePath, String jsonParamString) throws Exception{
         try {
         	httpClient = new DefaultHttpClient();
             HttpPost postRequest = new HttpPost(resourcePath);
@@ -58,7 +62,7 @@ public class RestClient {
             input.setContentType("application/json");
             postRequest.setEntity(input);
 
-            HttpResponse response = httpClient.execute(postRequest);
+            KubernetesResponse response = httpClient.execute(postRequest, new KubernetesResponseHandler());
 
             return response;
         } finally {
@@ -81,28 +85,26 @@ public class RestClient {
      * @throws org.apache.http.client.ClientProtocolException and IOException
      *             if any errors occur when executing the request
      */
-    public HttpResponse doGet(URI resourcePath) throws Exception{
+    public KubernetesResponse doGet(URI resourcePath) throws Exception{
         try {
         	httpClient = new DefaultHttpClient();
             HttpGet getRequest = new HttpGet(resourcePath);
-            System.out.println(getRequest.getRequestLine().getUri());
             getRequest.addHeader("Content-Type", "application/json");
 
-            HttpResponse response = httpClient.execute(getRequest);
-
+            KubernetesResponse response = httpClient.execute(getRequest, new KubernetesResponseHandler());
             return response;
         } finally {
         	 httpClient.getConnectionManager().shutdown();
         }
     }
-
-    public HttpResponse doDelete(URI resourcePath) throws Exception {
+    
+    public KubernetesResponse doDelete(URI resourcePath) throws Exception {
         try {
         	httpClient = new DefaultHttpClient();
             HttpDelete httpDelete = new HttpDelete(resourcePath);
             httpDelete.addHeader("Content-Type", "application/json");
 
-            HttpResponse response = httpClient.execute(httpDelete);
+            KubernetesResponse response = httpClient.execute(httpDelete, new KubernetesResponseHandler());
 
             return  response;
 
@@ -111,7 +113,7 @@ public class RestClient {
         }
     }
 
-    public HttpResponse doPut(URI resourcePath, String jsonParamString) throws Exception {
+    public KubernetesResponse doPut(URI resourcePath, String jsonParamString) throws Exception {
 
 		try {
 			httpClient = new DefaultHttpClient();
@@ -121,7 +123,7 @@ public class RestClient {
 			input.setContentType("application/json");
 			putRequest.setEntity(input);
 
-			HttpResponse response = httpClient.execute(putRequest);
+			KubernetesResponse response = httpClient.execute(putRequest, new KubernetesResponseHandler());
 
 			return response;
 		


[08/50] [abbrv] git commit: Adding the default constructor .

Posted by ni...@apache.org.
Adding the default constructor .


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

Branch: refs/heads/master
Commit: ee8a1b62ea7aeb6f662063fe32d907c05aa991a6
Parents: e15c1c3
Author: Nirmal Fernando <ni...@gmail.com>
Authored: Wed Oct 8 18:54:09 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:55 2014 +0530

----------------------------------------------------------------------
 .../stratos/cloud/controller/pojo/ContainerClusterContext.java    | 3 +++
 1 file changed, 3 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/ee8a1b62/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/ContainerClusterContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/ContainerClusterContext.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/ContainerClusterContext.java
index f6c9b31..137488a 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/ContainerClusterContext.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/ContainerClusterContext.java
@@ -32,6 +32,9 @@ public class ContainerClusterContext implements Serializable {
     // properties
     private Properties properties;
     
+    public ContainerClusterContext() {
+    }
+    
     public ContainerClusterContext(String clusterId) {
         this.clusterId = clusterId;
     }


[20/50] [abbrv] git commit: adding constants for drool files names

Posted by ni...@apache.org.
adding constants for drool files names


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

Branch: refs/heads/master
Commit: 6e0eca9a0d8b03477d7d7d994eb5c7c913158a0b
Parents: 36c40b0
Author: R-Rajkumar <rr...@gmail.com>
Authored: Thu Oct 9 10:51:38 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:56 2014 +0530

----------------------------------------------------------------------
 .../org/apache/stratos/common/constants/StratosConstants.java | 7 +++++++
 1 file changed, 7 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/6e0eca9a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/constants/StratosConstants.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/constants/StratosConstants.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/constants/StratosConstants.java
index 1e36c15..5d3ad8c 100644
--- a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/constants/StratosConstants.java
+++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/constants/StratosConstants.java
@@ -150,8 +150,15 @@ public class StratosConstants {
     public static final String KUBERNETES_DEPLOYER_TYPE = "kubernetes";
     public static final String KUBERNETES_MASTER_IP = "KUBERNETES_MASTER_IP";
     public static final String KUBERNETES_MIN_REPLICAS = "KUBERNETES_REPLICAS_MIN";
+    public static final String KUBERNETES_MAX_REPLICAS = "KUBERNETES_REPLICAS_MAX";
     public static final String KUBERNETES_PORT_RANGE = "KUBERNETES_PORT_RANGE";
     public static final String ALLOCATED_SERVICE_HOST_PORT = "ALLOCATED_SERVICE_HOST_PORT";
+    
+    //drools related constants
+    public static final String CONTAINER_SCALE_CHECK_DROOL_FILE = "container-scaling.drl";
+    public static final String VM_SCALE_CHECK_DROOL_FILE = "scaling.drl";
+    public static final String CONTAINER_MIN_CHECK_DROOL_FILE = "container-mincheck.drl";
+    public static final String VM_MIN_CHECK_DROOL_FILE = "mincheck.drl";
 
     // Policy and definition related constants
     public static final int PUBLIC_DEFINITION = 0;


[16/50] [abbrv] git commit: adding expand cluster logic to AS

Posted by ni...@apache.org.
adding expand cluster logic to AS


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

Branch: refs/heads/master
Commit: 9d8fa2e346d95459316166ed985c83615fa34f60
Parents: 13450de
Author: R-Rajkumar <rr...@gmail.com>
Authored: Thu Oct 9 10:58:22 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 09:30:56 2014 +0530

----------------------------------------------------------------------
 .../autoscaler/KubernetesClusterContext.java    |  2 +-
 .../cloud/controller/CloudControllerClient.java | 30 ++++++++++++++++++--
 .../monitor/ClusterMonitorFactory.java          | 24 +++++++++++++++-
 .../autoscaler/rule/RuleTasksDelegator.java     | 15 ++++++++++
 4 files changed, 66 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/9d8fa2e3/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 faa93bc..99ae4bc 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
@@ -50,7 +50,7 @@ public class KubernetesClusterContext implements Serializable {
     private String serviceName;
 
     private int minReplicas;
-    private int maxReplicas;
+    private int maxReplicas = 10;
     private int currentReplicas = 0;
 
     // properties

http://git-wip-us.apache.org/repos/asf/stratos/blob/9d8fa2e3/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
index eaa80c4..b7a476a 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
@@ -19,6 +19,8 @@
 
 package org.apache.stratos.autoscaler.client.cloud.controller;
 
+import java.rmi.RemoteException;
+
 import org.apache.axis2.transport.http.HTTPConstants;
 import org.apache.commons.configuration.XMLConfiguration;
 import org.apache.commons.logging.Log;
@@ -31,7 +33,13 @@ import org.apache.stratos.autoscaler.exception.SpawningException;
 import org.apache.stratos.autoscaler.exception.TerminationException;
 import org.apache.stratos.autoscaler.kubernetes.KubernetesManager;
 import org.apache.stratos.autoscaler.util.ConfUtil;
-import org.apache.stratos.cloud.controller.stub.*;
+import org.apache.stratos.cloud.controller.stub.CloudControllerServiceInvalidCartridgeTypeExceptionException;
+import org.apache.stratos.cloud.controller.stub.CloudControllerServiceInvalidClusterExceptionException;
+import org.apache.stratos.cloud.controller.stub.CloudControllerServiceInvalidIaasProviderExceptionException;
+import org.apache.stratos.cloud.controller.stub.CloudControllerServiceInvalidMemberExceptionException;
+import org.apache.stratos.cloud.controller.stub.CloudControllerServiceInvalidPartitionExceptionException;
+import org.apache.stratos.cloud.controller.stub.CloudControllerServiceStub;
+import org.apache.stratos.cloud.controller.stub.CloudControllerServiceUnregisteredCartridgeExceptionException;
 import org.apache.stratos.cloud.controller.stub.deployment.partition.Partition;
 import org.apache.stratos.cloud.controller.stub.pojo.ContainerClusterContext;
 import org.apache.stratos.cloud.controller.stub.pojo.MemberContext;
@@ -41,8 +49,6 @@ import org.apache.stratos.common.constants.StratosConstants;
 import org.apache.stratos.common.kubernetes.KubernetesGroup;
 import org.apache.stratos.common.kubernetes.KubernetesMaster;
 
-import java.rmi.RemoteException;
-
 
 /**
  * This class will call cloud controller web service to take the action decided by Autoscaler
@@ -304,4 +310,22 @@ public class CloudControllerClient {
 		} 
     }
 
+    public synchronized void updateKubernetesController(String clusterId, int replicas)
+            throws SpawningException {
+        try {
+            log.info(String.format("Updating kubernetes replication controller via cloud controller: " +
+                                   "[cluster] %s [replicas] %s", clusterId, replicas));
+            stub.updateKubernetesController(clusterId, replicas);
+        } catch (RemoteException e) {
+            String msg = "Error while updating kubernetes controller, cannot communicate with " +
+                         "cloud controller service";
+            log.error(msg, e);
+            throw new SpawningException(e.getMessage(), e);
+        } catch (CloudControllerServiceInvalidClusterExceptionException e) {
+            String msg = "Error while updating kubernetes controller, invalid clusterId";
+            log.error(msg, e);
+            throw new SpawningException(e.getMessage(), e);
+        }
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/9d8fa2e3/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/ClusterMonitorFactory.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/ClusterMonitorFactory.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/ClusterMonitorFactory.java
index 208e4ce..856958d 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/ClusterMonitorFactory.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/ClusterMonitorFactory.java
@@ -46,6 +46,8 @@ import org.apache.stratos.messaging.domain.topology.Cluster;
 import org.apache.stratos.messaging.domain.topology.ClusterStatus;
 import org.apache.stratos.messaging.domain.topology.Member;
 import org.apache.stratos.messaging.domain.topology.MemberStatus;
+import org.apache.stratos.messaging.domain.topology.Service;
+import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
 import org.apache.stratos.messaging.util.Constants;
 
 /*
@@ -330,7 +332,8 @@ public class ClusterMonitorFactory {
      * @param cluster - the cluster which needs to be monitored
      * @return - the cluster monitor
      */
-    private static KubernetesServiceClusterMonitor getDockerServiceClusterMonitor(Cluster cluster) {
+    private static KubernetesServiceClusterMonitor getDockerServiceClusterMonitor(Cluster cluster)
+            throws PolicyValidationException {
 
         if (null == cluster) {
             return null;
@@ -342,11 +345,30 @@ public class ClusterMonitorFactory {
         }
 
         AutoscalePolicy policy = PolicyManager.getInstance().getAutoscalePolicy(autoscalePolicyName);
+        
+        if (policy == null) {
+            String msg = "Autoscale Policy is null. Policy name: " + autoscalePolicyName;
+            log.error(msg);
+            throw new PolicyValidationException(msg);
+        }
+        
         java.util.Properties props = cluster.getProperties();
         String kubernetesHostClusterID = props.getProperty(StratosConstants.KUBERNETES_CLUSTER_ID);
         KubernetesClusterContext kubernetesClusterCtxt = new KubernetesClusterContext(kubernetesHostClusterID,
                                                                                       cluster.getClusterId());
 
+        String minReplicasProperty = props.getProperty(StratosConstants.KUBERNETES_MIN_REPLICAS);
+        if (minReplicasProperty != null && !minReplicasProperty.isEmpty()) {
+            int minReplicas = Integer.parseInt(minReplicasProperty);
+            kubernetesClusterCtxt.setMinReplicas(minReplicas);
+        }
+
+        String maxReplicasProperty = props.getProperty(StratosConstants.KUBERNETES_MAX_REPLICAS);
+        if (maxReplicasProperty != null && !maxReplicasProperty.isEmpty()) {
+            int maxReplicas = Integer.parseInt(maxReplicasProperty);
+            kubernetesClusterCtxt.setMaxReplicas(maxReplicas);
+        }
+
         KubernetesServiceClusterMonitor dockerClusterMonitor = new KubernetesServiceClusterMonitor(
                 kubernetesClusterCtxt,
                 cluster.getClusterId(),

http://git-wip-us.apache.org/repos/asf/stratos/blob/9d8fa2e3/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 94def43..246dcc2 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
@@ -199,4 +199,19 @@ public class RuleTasksDelegator {
            }
        }
 
+    public void delegateExpandCluster(String clusterId, int replicas) {
+        try {
+            CloudControllerClient.getInstance().updateKubernetesController(clusterId, replicas);
+        } catch (Throwable e) {
+            log.error("Cannot update kubernetes controller", e);
+        }
+    }
+
+    public int getPredictedReplicasForStat(int minReplicas, float statUpperLimit, float statPredictedValue) {
+        if (statUpperLimit == 0) {
+            return 0;
+        }
+        float predictedValue = ((minReplicas / statUpperLimit) * statPredictedValue);
+        return (int) Math.ceil(predictedValue);
+    }
 }