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 <[email protected]> Authored: Sun Aug 2 11:15:38 2015 +0000 Committer: swapnilpatilRajaram <[email protected]> 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;
