You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by ga...@apache.org on 2015/10/09 16:35:36 UTC

[23/32] stratos git commit: Added method comments. Improved exception handling. Removed system.out.println statements.

Added method comments. Improved exception handling. Removed system.out.println statements.


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

Branch: refs/heads/gsoc-projects-2015
Commit: e9eeaa92ee59e9ea003f80308b72d9c77aec9d38
Parents: 00441d4
Author: swapnilpatilRajaram <sw...@students.iiit.ac.in>
Authored: Sun Aug 2 11:15:38 2015 +0000
Committer: swapnilpatilRajaram <sw...@students.iiit.ac.in>
Committed: Sun Aug 2 11:15:38 2015 +0000

----------------------------------------------------------------------
 .../apache/stratos/aws/extension/AWSHelper.java | 72 +++++++++-----------
 .../stratos/aws/extension/AWSLoadBalancer.java  | 39 +++++++++--
 2 files changed, 64 insertions(+), 47 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/e9eeaa92/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSHelper.java
----------------------------------------------------------------------
diff --git a/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSHelper.java b/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSHelper.java
index 2251298..7c4f00a 100644
--- a/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSHelper.java
+++ b/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSHelper.java
@@ -36,6 +36,8 @@ import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.load.balancer.common.domain.*;
 import org.apache.stratos.load.balancer.extension.api.exception.LoadBalancerExtensionException;
 
+import com.amazonaws.AmazonClientException;
+import com.amazonaws.AmazonServiceException;
 import com.amazonaws.ClientConfiguration;
 import com.amazonaws.auth.BasicAWSCredentials;
 import com.amazonaws.services.ec2.AmazonEC2Client;
@@ -60,14 +62,13 @@ public class AWSHelper {
 	private BasicAWSCredentials awsCredentials;
 	private ClientConfiguration clientConfiguration;
 
-	AmazonElasticLoadBalancingClient lbClient;
+	AmazonElasticLoadBalancingClient elbClient;
 	AmazonEC2Client ec2Client;
 
 	private static final Log log = LogFactory.getLog(AWSHelper.class);
 
 	public AWSHelper() throws LoadBalancerExtensionException {
 		// Read values for awsAccessKey, awsSecretKey etc. from config file
-		// Throw a proper exception / log warning if cant read credentials ?
 
 		String awsPropertiesFile = System
 				.getProperty(Constants.AWS_PROPERTIES_FILE);
@@ -117,7 +118,7 @@ public class AWSHelper {
 			awsCredentials = new BasicAWSCredentials(awsAccessKey, awsSecretKey);
 			clientConfiguration = new ClientConfiguration();
 
-			lbClient = new AmazonElasticLoadBalancingClient(awsCredentials,
+			elbClient = new AmazonElasticLoadBalancingClient(awsCredentials,
 					clientConfiguration);
 
 			ec2Client = new AmazonEC2Client(awsCredentials, clientConfiguration);
@@ -171,17 +172,16 @@ public class AWSHelper {
 
 			createLoadBalancerRequest.setSecurityGroups(securityGroups);
 
-			lbClient.setEndpoint(String.format(
+			elbClient.setEndpoint(String.format(
 					Constants.ELB_ENDPOINT_URL_FORMAT, region));
 
-			CreateLoadBalancerResult clbResult = lbClient
+			CreateLoadBalancerResult clbResult = elbClient
 					.createLoadBalancer(createLoadBalancerRequest);
 
 			return clbResult.getDNSName();
 
-		} catch (Exception e) {
-			log.error("Could not create load balancer : " + name + ".");
-			e.printStackTrace();
+		} catch (LoadBalancerExtensionException e) {
+			log.error("Could not create load balancer : " + name + ".", e);
 			return null;
 		}
 
@@ -202,15 +202,12 @@ public class AWSHelper {
 		deleteLoadBalancerRequest.setLoadBalancerName(loadBalancerName);
 
 		try {
-			lbClient.setEndpoint(String.format(
+			elbClient.setEndpoint(String.format(
 					Constants.ELB_ENDPOINT_URL_FORMAT, region));
 
-			lbClient.deleteLoadBalancer(deleteLoadBalancerRequest);
-			return;
-
-		} catch (Exception e) {
-			log.error("Could not delete load balancer : " + loadBalancerName);
-			e.printStackTrace();
+			elbClient.deleteLoadBalancer(deleteLoadBalancerRequest);
+		} catch (AmazonClientException e) {
+			log.error("Could not delete load balancer : " + loadBalancerName, e);
 		}
 	}
 
@@ -233,16 +230,15 @@ public class AWSHelper {
 				loadBalancerName, instances);
 
 		try {
-			lbClient.setEndpoint(String.format(
+			elbClient.setEndpoint(String.format(
 					Constants.ELB_ENDPOINT_URL_FORMAT, region));
 
-			RegisterInstancesWithLoadBalancerResult result = lbClient
+			RegisterInstancesWithLoadBalancerResult result = elbClient
 					.registerInstancesWithLoadBalancer(registerInstancesWithLoadBalancerRequest);
 
-		} catch (Exception e) {
+		} catch (AmazonClientException e) {
 			log.error("Could not register instances to load balancer "
-					+ loadBalancerName);
-			e.printStackTrace();
+					+ loadBalancerName, e);
 		}
 	}
 
@@ -265,16 +261,15 @@ public class AWSHelper {
 				loadBalancerName, instances);
 
 		try {
-			lbClient.setEndpoint(String.format(
+			elbClient.setEndpoint(String.format(
 					Constants.ELB_ENDPOINT_URL_FORMAT, region));
 
-			DeregisterInstancesFromLoadBalancerResult result = lbClient
+			DeregisterInstancesFromLoadBalancerResult result = elbClient
 					.deregisterInstancesFromLoadBalancer(deregisterInstancesFromLoadBalancerRequest);
 
-		} catch (Exception e) {
+		} catch (AmazonClientException e) {
 			log.error("Could not de-register instances from load balancer "
-					+ loadBalancerName);
-			e.printStackTrace();
+					+ loadBalancerName, e);
 		}
 	}
 
@@ -297,19 +292,18 @@ public class AWSHelper {
 				loadBalancers);
 
 		try {
-			lbClient.setEndpoint(String.format(
+			elbClient.setEndpoint(String.format(
 					Constants.ELB_ENDPOINT_URL_FORMAT, region));
 
-			DescribeLoadBalancersResult result = lbClient
+			DescribeLoadBalancersResult result = elbClient
 					.describeLoadBalancers(describeLoadBalancersRequest);
 
 			if (result.getLoadBalancerDescriptions() != null
 					&& result.getLoadBalancerDescriptions().size() > 0)
 				return result.getLoadBalancerDescriptions().get(0);
-		} catch (Exception e) {
+		} catch (AmazonClientException e) {
 			log.error("Could not find description of load balancer "
-					+ loadBalancerName);
-			e.printStackTrace();
+					+ loadBalancerName, e);
 		}
 
 		return null;
@@ -337,10 +331,9 @@ public class AWSHelper {
 
 			return lbDescription.getInstances();
 
-		} catch (Exception e) {
+		} catch (AmazonClientException e) {
 			log.error("Could not find instances attached  load balancer "
-					+ loadBalancerName);
-			e.printStackTrace();
+					+ loadBalancerName, e);
 			return null;
 		}
 	}
@@ -376,7 +369,7 @@ public class AWSHelper {
 
 			return listeners;
 
-		} catch (Exception e) {
+		} catch (AmazonClientException e) {
 			log.error("Could not find description of load balancer "
 					+ loadBalancerName);
 			return null;
@@ -403,10 +396,9 @@ public class AWSHelper {
 
 			return createSecurityGroupResult.getGroupId();
 
-		} catch (Exception e) {
-			e.printStackTrace();
+		} catch (AmazonClientException e) {
 			throw new LoadBalancerExtensionException(
-					"Could not create security group.");
+					"Could not create security group.", e);
 		}
 
 	}
@@ -431,7 +423,7 @@ public class AWSHelper {
 			ec2Client
 					.authorizeSecurityGroupIngress(authorizeSecurityGroupIngressRequest);
 
-		} catch (Exception e) {
+		} catch (AmazonClientException e) {
 			throw new LoadBalancerExtensionException(
 					"Could not add inbound rule to security group " + groupId
 							+ ".");
@@ -511,7 +503,7 @@ public class AWSHelper {
 	 * @param memberInstanceName
 	 * @return instance id in IaaS
 	 */
-	public String getAWSInstanceName(final String memberInstanceName) {
+	public String getAWSInstanceName(String memberInstanceName) {
 		if (memberInstanceName.contains("/")) {
 			return memberInstanceName
 					.substring(memberInstanceName.indexOf("/") + 1);
@@ -526,7 +518,7 @@ public class AWSHelper {
 	 * @param memberInstanceName
 	 * @return IaaS region to which member belongs
 	 */
-	public String getAWSRegion(final String memberInstanceName) {
+	public String getAWSRegion(String memberInstanceName) {
 		if (memberInstanceName.contains("/")) {
 			return memberInstanceName.substring(0,
 					memberInstanceName.indexOf("/"));

http://git-wip-us.apache.org/repos/asf/stratos/blob/e9eeaa92/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSLoadBalancer.java
----------------------------------------------------------------------
diff --git a/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSLoadBalancer.java b/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSLoadBalancer.java
index 717e7f8..d7d6b55 100644
--- a/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSLoadBalancer.java
+++ b/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSLoadBalancer.java
@@ -19,6 +19,7 @@
 
 package org.apache.stratos.aws.extension;
 
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
@@ -32,6 +33,7 @@ import org.apache.stratos.load.balancer.common.domain.*;
 import org.apache.stratos.load.balancer.extension.api.exception.LoadBalancerExtensionException;
 import org.apache.stratos.load.balancer.extension.api.LoadBalancer;
 
+import com.amazonaws.AmazonClientException;
 import com.amazonaws.services.elasticloadbalancing.model.Instance;
 import com.amazonaws.services.elasticloadbalancing.model.Listener;
 
@@ -49,6 +51,11 @@ public class AWSLoadBalancer implements LoadBalancer {
 		awsHelper = new AWSHelper();
 	}
 
+	/* 
+	 * configure method iterates over topology and configures the AWS load balancers needed.
+	 * Configuration may involve creating a new load balancer for a cluster, updating existing load balancers
+	 * or deleting unwanted load balancers.
+	 */
 	public boolean configure(Topology topology)
 			throws LoadBalancerExtensionException {
 
@@ -74,9 +81,12 @@ public class AWSLoadBalancer implements LoadBalancer {
 						// 1. Get all the instances attached
 						// Add/remove instances as necessary
 
+						// attachedInstances list is useful in finding out what all new instances
+						// should be attached to this load balancer.
 						List<Instance> attachedInstances = awsHelper
 								.getAttachedInstances(loadBalancerName, region);
 
+						// clusterMembers stores all the members of a cluster.
 						Collection<Member> clusterMembers = cluster
 								.getMembers();
 
@@ -90,9 +100,7 @@ public class AWSLoadBalancer implements LoadBalancer {
 								// attachedInstances
 								// add this to instancesToAddToLoadBalancer
 
-								System.out.println("Instance Id : "
-										+ member.getInstanceId());
-								System.out.println("New instance id : "
+								log.debug("Instance id : "
 										+ awsHelper.getAWSInstanceName(member
 												.getInstanceId()));
 
@@ -121,16 +129,20 @@ public class AWSLoadBalancer implements LoadBalancer {
 
 						if (clusterMembers.size() > 0){
 
+							// a unique load balancer name with user-defined prefix and a sequence number.
 							String loadBalancerName = awsHelper
 									.generateLoadBalancerName();
 
 							String region = awsHelper.getAWSRegion(clusterMembers
 									.iterator().next().getInstanceId());
 
+							// list of AWS listeners obtained using port mappings of one of the members of the cluster.
 							List<Listener> listenersForThisCluster = awsHelper
 									.getRequiredListeners(clusterMembers.iterator()
 											.next());
 
+							// DNS name of load balancer which was created.
+							// This is used in the domain mapping of this cluster.
 							String loadBalancerDNSName = awsHelper
 									.createLoadBalancer(loadBalancerName,
 											listenersForThisCluster, region);
@@ -145,8 +157,7 @@ public class AWSLoadBalancer implements LoadBalancer {
 							for (Member member : clusterMembers) {
 								String instanceId = member.getInstanceId();
 
-								System.out.println("Instance id : " + instanceId);
-								System.out.println("New instance id : "
+								log.debug("Instance id : "
 										+ awsHelper.getAWSInstanceName(instanceId));
 
 								Instance instance = new Instance();
@@ -187,23 +198,34 @@ public class AWSLoadBalancer implements LoadBalancer {
 			}
 
 			activeClusters.clear();
-		} catch (Exception e) {
+		} catch (LoadBalancerExtensionException e) {
 			throw new LoadBalancerExtensionException(e);
 		}
 
 		return true;
 	}
 
+	/*
+	 * start method is called after extension if configured first time.
+	 * Does nothing but logs the message.
+	 */
 	public void start() throws LoadBalancerExtensionException {
 
 		log.info("AWS load balancer extension started.");
 	}
 
+	/*
+	 * reload method is called every time after extension if configured.
+	 * Does nothing but logs the message.
+	 */
 	public void reload() throws LoadBalancerExtensionException {
 		// Check what is appropriate to do here.
 		log.info("AWS load balancer extension reloaded.");
 	}
 
+	/*
+	 * stop method deletes load balancers for all clusters in the topology.
+	 */
 	public void stop() throws LoadBalancerExtensionException {
 		// Remove all load balancers
 		for (LoadBalancerInfo loadBalancerInfo : clusterIdToLoadBalancerMap
@@ -211,13 +233,16 @@ public class AWSLoadBalancer implements LoadBalancer {
 			// remove load balancer
 			awsHelper.deleteLoadBalancer(loadBalancerInfo.getName(),
 					loadBalancerInfo.getRegion());
-			// Check what all needs to be done
 		}
 
 		// Remove domain mappings
 	}
 }
 
+/**
+ * Used to store load balancer name and the region in which it is created.
+ * This helps in finding region while calling API methods to modify/delete a load balancer.
+ */
 class LoadBalancerInfo {
 	private String name;
 	private String region;