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/03/01 09:17:28 UTC

[04/13] git commit: fixing implementation code for https://issues.apache.org/jira/browse/STRATOS-486

fixing implementation code for  https://issues.apache.org/jira/browse/STRATOS-486


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

Branch: refs/heads/master
Commit: d7206a752a5c9b40ba13c1eda82364c492ef3e1d
Parents: 846034d
Author: Nirmal Fernando <ni...@apache.org>
Authored: Sat Mar 1 13:38:19 2014 +0530
Committer: Nirmal Fernando <ni...@apache.org>
Committed: Sat Mar 1 13:38:19 2014 +0530

----------------------------------------------------------------------
 .../impl/CloudControllerServiceImpl.java        | 233 +++----------------
 .../interfaces/CloudControllerService.java      |  21 +-
 .../util/CloudControllerConstants.java          |   1 +
 3 files changed, 52 insertions(+), 203 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/d7206a75/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 1d773d0..e274d4e 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
@@ -102,7 +102,8 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 		}
 	}
 
-    public void deployCartridgeDefinition(CartridgeConfig cartridgeConfig) throws InvalidCartridgeDefinitionException, InvalidIaasProviderException {
+    public void deployCartridgeDefinition(CartridgeConfig cartridgeConfig) throws InvalidCartridgeDefinitionException, 
+    InvalidIaasProviderException, IllegalArgumentException {
 
         if (cartridgeConfig == null) {
             String msg = "Invalid Cartridge Definition: Definition is null.";
@@ -122,7 +123,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
             String msg =
                          "Invalid Cartridge Definition: Cartridge Type: " +
                                  cartridgeConfig.getType()+
-                                 ". Cause: Cannot instantiate a Cartridge Instance with the given Config.";
+                                 ". Cause: Cannot instantiate a Cartridge Instance with the given Config. "+e.getMessage();
             log.error(msg, e);
             throw new InvalidCartridgeDefinitionException(msg, e);
         }
@@ -164,7 +165,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
         log.info("Successfully deployed the Cartridge definition: " + cartridgeType);
     }
 
-    public void undeployCartridgeDefinition(String cartridgeType) {
+    public void undeployCartridgeDefinition(String cartridgeType) throws InvalidCartridgeTypeException {
 
         Cartridge cartridge = null;
         if((cartridge = dataHolder.getCartridge(cartridgeType)) != null) {
@@ -173,11 +174,14 @@ public class CloudControllerServiceImpl implements CloudControllerService {
                 log.info("Successfully undeployed the Cartridge definition: " + cartridgeType);
             }
         }
+        String msg = "Cartridge [type] "+cartridgeType+" is not a deployed Cartridge type.";
+        log.error(msg);
+        throw new InvalidCartridgeTypeException(msg);
     }
     
     @Override
     public MemberContext startInstance(MemberContext memberContext) throws IllegalArgumentException,
-        UnregisteredCartridgeException {
+        UnregisteredCartridgeException, InvalidIaasProviderException, IllegalStateException {
 
         if (memberContext == null) {
             String msg = "Instance start-up failed. Member is null.";
@@ -216,7 +220,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 
         if (cartridge == null) {
             String msg =
-                         "Instance start-up failed. No valid Cartridge found. " +
+                         "Instance start-up failed. No matching Cartridge found [type] "+cartridgeType +". "+
                                  memberContext.toString();
             log.error(msg);
             throw new UnregisteredCartridgeException(msg);
@@ -233,7 +237,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
                   		+ "partitions can be found in this Cartridge: "
                   		+cartridge.getPartitionToIaasProvider().keySet().toString()+ memberContext.toString() + ". ";
             log.fatal(msg);
-            throw new CloudControllerException(msg);
+            throw new InvalidIaasProviderException(msg);
         }
         String type = iaasProvider.getType();
         try {
@@ -266,9 +270,9 @@ public class CloudControllerServiceImpl implements CloudControllerService {
                     iaas = CloudControllerUtil.getIaas(iaasProvider);
                 } catch (InvalidIaasProviderException e) {
                     String msg ="Instance start up failed. "+memberContext.toString()+
-                            "Unable to build Iaas of this IaasProvider [Provider] : " + type;
+                            "Unable to build Iaas of this IaasProvider [Provider] : " + type+". Cause: "+e.getMessage();
                     log.error(msg, e);
-                    throw new CloudControllerException(msg, e);
+                    throw new InvalidIaasProviderException(msg, e);
                 }
                 
             }
@@ -282,11 +286,9 @@ public class CloudControllerServiceImpl implements CloudControllerService {
                 String msg =
                              "Failed to start an instance. " +
                                      memberContext.toString() +
-                                     ". Reason : Template is null. You have not specify a matching service " +
-                                     "element in the configuration file of Autoscaler.\n Hence, will try to " +
-                                     "start in another IaaS if available.";
+                                     ". Reason : Jclouds Template is null for iaas provider [type]: "+iaasProvider.getType();
                 log.error(msg);
-                throw new CloudControllerException(msg);
+                throw new InvalidIaasProviderException(msg);
             }
 
             // generate the group id from domain name and sub domain
@@ -327,7 +329,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
             if (nodeId == null) {
                 String msg = "Node id of the starting instance is null.\n" + memberContext.toString();
                 log.fatal(msg);
-                throw new CloudControllerException(msg);
+                throw new IllegalStateException(msg);
             }
                 memberContext.setNodeId(nodeId);
                 if(log.isDebugEnabled()) {
@@ -342,14 +344,17 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 						: nodeId;
 				memberContext.setInstanceId(instanceId);
 				if (!ctxt.getListOfVolumes().isEmpty()) {
-            		for (Volume volume : ctxt.getListOfVolumes()) {
-            			try {
-            			iaas.attachVolume(instanceId, volume.getId(), volume.getDevice());
+					for (Volume volume : ctxt.getListOfVolumes()) {
+						try {
+							iaas.attachVolume(instanceId, volume.getId(),
+									volume.getDevice());
 						} catch (Exception e) {
-					//continue without throwing an exception, since there is an instance already running
-					log.error("Attaching Volume to Instance [ " + instanceId + " ] failed!", e);
-				}
-            		}
+							// continue without throwing an exception, since
+							// there is an instance already running
+							log.error("Attaching Volume to Instance [ "
+									+ instanceId + " ] failed!", e);
+						}
+					}
 				}
 			}
 
@@ -358,9 +363,9 @@ public class CloudControllerServiceImpl implements CloudControllerService {
             return memberContext;
 
         } catch (Exception e) {
-            String msg = "Failed to start an instance. " + memberContext.toString();
+            String msg = "Failed to start an instance. " + memberContext.toString()+" Cause: "+e.getMessage();
             log.error(msg, e);
-            throw new CloudControllerException(msg, e);
+            throw new IllegalStateException(msg, e);
         }
 
     }
@@ -368,17 +373,9 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 	private void createVolumeAndSetInClusterContext(Volume volume,
 			IaasProvider iaasProvider) {
 
+		// iaas cannot be null at this state #startInstance method
 		Iaas iaas = iaasProvider.getIaas();
 		
-		if(iaas == null) {
-			try {
-				iaas = CloudControllerUtil.getIaas(iaasProvider);
-			} catch (InvalidIaasProviderException e) {
-				String msg = "Iaas could not be loaded from : "+iaasProvider;
-				log.fatal(msg, e);
-				throw new CloudControllerException(msg, e);
-			}
-		}
 		int sizeGB = volume.getSize();
 		String volumeId = iaas.createVolume(sizeGB);
 		volume.setId(volumeId);
@@ -616,105 +613,6 @@ public class CloudControllerServiceImpl implements CloudControllerService {
         }
     }
 
-//    private
-//        void
-//        terminateInstance(MemberContext ctxt) throws InvalidCartridgeTypeException,
-//            InvalidMemberException {
-//        // these will never be null, since we do not add null values for these.
-//        String memberId = ctxt.getMemberId();
-//        String clusterId = ctxt.getClusterId();
-//        String partitionId = ctxt.getPartitionId();
-//        String cartridgeType = ctxt.getCartridgeType();
-//        String nodeId = ctxt.getNodeId();
-//        
-//        Cartridge cartridge = dataHolder.getCartridge(cartridgeType);
-//        
-//        log.info("Starting to terminate an instance with member id : " + memberId+
-//                 " in partition id: "+partitionId+" of cluster id: "+clusterId+ " and of cartridge type: "+cartridgeType);
-//        
-//        if(cartridge == null) {
-//            String msg = "Termination of Member Id: "+memberId+" failed. " +
-//                    "Cannot find a matching Cartridge for type: "+cartridgeType;
-//            log.error(msg);
-//            throw new InvalidCartridgeTypeException(msg);
-//        }
-//        
-////        Scope scope = partition.getScope();
-////        String provider = partition.getProperty("provider");
-//
-//		// if no matching node id can be found.
-//        if (nodeId == null) {
-//
-//            String msg = "Termination failed. Cannot find a node id for Member Id: "+memberId;
-//            log.error(msg);
-//            throw new InvalidMemberException(msg);
-//        }
-////		ServiceContext serviceCtxt = dataHolder
-////				.getServiceContextFromDomain(clusterId);
-////
-////		if (serviceCtxt == null) {
-////			String msg = "Not a registered service: domain - " + clusterId;
-////			log.fatal(msg);
-////			throw new CloudControllerException(msg);
-////		}
-////
-////		// load Cartridge, if null
-////		//if (serviceCtxt.getCartridge() == null) {
-////			serviceCtxt.setCartridge(loadCartridge(
-////					serviceCtxt.getCartridgeType(),
-////					dataHolder.getCartridges()));
-////		//}
-////
-////		// if still, Cartridge is null
-////		if (serviceCtxt.getCartridge() == null) {
-////			String msg = "There's no registered Cartridge found. Domain - "
-////					+ clusterId;
-////			log.fatal(msg);
-////			throw new CloudControllerException(msg);
-////		}
-//
-////        for (IaasProvider iaas : serviceCtxt.getCartridge().getIaases()) {
-//
-//		IaasProvider iaas = cartridge.getIaasProviderOfPartition(partitionId);
-//		
-////			String msg = "Failed to terminate an instance in "
-////					+ iaas.getType()
-////					+ ". Hence, will try to terminate an instance in another IaaS if possible.";
-////            //TODO adding more locations and retrieve it from the request received
-////                String nodeId = null;
-//
-////                IaasContext ctxt = serviceCtxt.getIaasContext(iaas.getType());
-//
-////                // terminate the last instance first
-////                for (String id : Lists.reverse(ctxt.getNodeIds())) {
-////                    if (id != null) {
-////                        nodeId = id;
-////                        break;
-////                    }
-////                }
-//
-//                
-//
-//                // terminate it!
-//                terminate(iaas, nodeId, ctxt);
-//
-//                // log information
-//                logTermination(nodeId, ctxt);
-//    }
-
-//    @Override
-//    public boolean terminateInstances(String[] memberIds) throws IllegalArgumentException, InvalidMemberException, InvalidCartridgeTypeException {
-//        for (String memberId : memberIds) {
-//            terminateInstance(memberId);
-//        }
-//    }
-
-//    @Override
-//    public boolean terminateUnhealthyInstances(List<String> instancesToBeTerminated) {
-//        log.info("vvvvvvvvvvdddvvvvvvv");
-//        return false;  //TODO
-//    }
-
 	@Override
 	public void terminateAllInstances(String clusterId) throws IllegalArgumentException, InvalidClusterException {
 
@@ -739,70 +637,6 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 		for (MemberContext memberContext : ctxts) {
             exec.execute(new InstanceTerminator(memberContext));
         }
-		
-
-//		ServiceContext serviceCtxt = dataHolder
-//				.getServiceContextFromDomain(clusterId);
-//
-//		if (serviceCtxt == null) {
-//			String msg = "Not a registered service: domain - " + clusterId;
-//			log.fatal(msg);
-//			throw new CloudControllerException(msg);
-//		}
-//
-//		// load Cartridge, if null
-//		serviceCtxt.setCartridge(loadCartridge(
-//					serviceCtxt.getCartridgeType(),
-//					dataHolder.getCartridges()));
-//		//}
-//
-//		if (serviceCtxt.getCartridge() == null) {
-//			String msg = "There's no registered Cartridge found. Domain - "
-//					+ clusterId;
-//			log.fatal(msg);
-//			throw new CloudControllerException(msg);
-//		}
-
-//        for (IaasProvider iaas : serviceCtxt.getCartridge().getIaases()) {
-//
-//			IaasContext ctxt = serviceCtxt.getIaasContext(iaas.getType());
-//
-//			if (ctxt == null) {
-//				log.error("Iaas Context for " + iaas.getType()
-//						+ " not found. Cannot terminate instances");
-//				continue;
-//			}
-//
-//			ArrayList<String> temp = new ArrayList<String>(ctxt.getNodeIds());
-//			for (String id : temp) {
-//				if (id != null) {
-//					// terminate it!
-//                    //TODO need to enable once partition added to the topology
-//                    /*Collection<Member> members = TopologyManager.getInstance().getTopology().
-//                            getService(serviceCtxt.getCartridgeType()).
-//                            getCluster(serviceCtxt.getClusterId()).getMembers();
-//                    for (Iterator iterator = members.iterator(); iterator.hasNext();) {
-//                         Member member = (Member) iterator.next();
-//                         terminate(iaas, ctxt, member.getIaasNodeId(), member.getPartition());
-//                    }*/
-//
-//					// log information
-//					logTermination(id, ctxt, serviceCtxt);
-//
-//					isAtLeastOneTerminated = true;
-//				}
-//			}
-//		}
-//
-//		if (isAtLeastOneTerminated) {
-//			return true;
-//		}
-//
-//		log.info("Termination of an instance which is belong to domain '"
-//				+ clusterId + "', failed! Reason: No matching "
-//				+ "running instance found in lastly used IaaS.");
-//
-//		return false;
 
 	}
 
@@ -842,9 +676,6 @@ public class CloudControllerServiceImpl implements CloudControllerService {
             iaas.releaseAddress(ctxt.getAllocatedIpAddress());
 		}
 		
-		// publish data to BAM
-//		CartridgeInstanceDataPublisher.publish();
-
 		log.info("Member is terminated: "+ctxt.toString());
 		return iaasProvider;
 	}
@@ -874,7 +705,9 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 	private void logTermination(MemberContext memberContext) {
 
         //updating the topology
-        TopologyBuilder.handleMemberTerminated(memberContext.getCartridgeType(), memberContext.getClusterId(), memberContext.getNetworkPartitionId(), memberContext.getPartition().getId(), memberContext.getMemberId());
+        TopologyBuilder.handleMemberTerminated(memberContext.getCartridgeType(), 
+        		memberContext.getClusterId(), memberContext.getNetworkPartitionId(), 
+        		memberContext.getPartition().getId(), memberContext.getMemberId());
 
         //publishing data
         CartridgeInstanceDataPublisher.publish(memberContext.getMemberId(),
@@ -1156,7 +989,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
                 } catch (InvalidIaasProviderException e) {
                     String msg =
                             "Invalid Partition - " + partition.toString() +
-                            ". Cause: Unable to build Iaas of this IaasProvider [Provider] : " + provider;
+                            ". Cause: Unable to build Iaas of this IaasProvider [Provider] : " + provider+". "+e.getMessage();
                     log.error(msg, e);
                     throw new InvalidPartitionException(msg, e);
                 }
@@ -1213,7 +1046,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
             } catch (InvalidIaasProviderException e) {
                 String msg =
                         "Invalid Partition - " + partition.toString() +
-                        ". Cause: Unable to build Iaas of this IaasProvider [Provider] : " + provider;
+                        ". Cause: Unable to build Iaas of this IaasProvider [Provider] : " + provider+". "+e.getMessage();
                 log.error(msg, e);
                 throw new InvalidPartitionException(msg, e);
             }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/d7206a75/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 30a3d82..ebd2980 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
@@ -39,10 +39,22 @@ import org.apache.stratos.cloud.controller.pojo.Registrant;
  */
 public interface CloudControllerService {
     
+	/**
+	 * Deploys a Cartridge configuration 
+	 * @param cartridgeConfig cartridge configuration to be deployed
+	 * @throws InvalidCartridgeDefinitionException if the cartridge configuration is not valid.
+	 * @throws InvalidIaasProviderException if the iaas providers configured are not valid.
+	 * @throws IllegalArgumentException  if the provided argument is not valid.
+	 */
     public void deployCartridgeDefinition(CartridgeConfig cartridgeConfig) 
-            throws InvalidCartridgeDefinitionException, InvalidIaasProviderException;
+            throws InvalidCartridgeDefinitionException, InvalidIaasProviderException, IllegalArgumentException;
     
-    public void undeployCartridgeDefinition(String cartridgeType);
+    /**
+     * Undeploys a Cartridge configuration which is already deployed.
+     * @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;
 
     /**
      * Validate a given {@link Partition} for basic property existence.
@@ -91,8 +103,11 @@ public interface CloudControllerService {
      *            It contains the region, zone, network and host of a IaaS where
      *            an instance need to be started.
      * @return public IP which is associated with the newly started instance.
+     * @throws IllegalArgumentException if the provided member is not valid.
+     * @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 IllegalArgumentException, UnregisteredCartridgeException;
+    public MemberContext startInstance(MemberContext member) throws IllegalArgumentException, UnregisteredCartridgeException, InvalidIaasProviderException;
 
     /**
      * Calling this method will spawn more than one instances in the

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/d7206a75/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerConstants.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerConstants.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerConstants.java
index e1a4353..fb035cf 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerConstants.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerConstants.java
@@ -245,6 +245,7 @@ public final class CloudControllerConstants {
     public static final String SECURITY_GROUP_IDS = "securityGroupIds";
     public static final String SECURITY_GROUPS = "securityGroups";
     public static final String SUBNET_ID = "subnetId";
+    public static final String TAGS = "tags";
     public static final String AUTO_ASSIGN_IP = "autoAssignIp";
     public static final String INSTANCE_TYPE = "instanceType";