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;