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:42 UTC

[29/32] stratos git commit: Added/Improved comments.

Added/Improved comments.


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

Branch: refs/heads/gsoc-projects-2015
Commit: df8684b7ecdddcd5e02f8d0d8bbb255fdafb55d8
Parents: 8414eaa
Author: swapnilpatilRajaram <sw...@students.iiit.ac.in>
Authored: Sun Aug 16 06:24:57 2015 +0000
Committer: swapnilpatilRajaram <sw...@students.iiit.ac.in>
Committed: Sun Aug 16 06:24:57 2015 +0000

----------------------------------------------------------------------
 .../apache/stratos/aws/extension/AWSHelper.java | 120 ++++++++++++++++---
 .../stratos/aws/extension/AWSLoadBalancer.java  |  35 ++----
 .../aws/extension/AWSStatisticsReader.java      |  10 +-
 3 files changed, 118 insertions(+), 47 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/df8684b7/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 5a3393f..768a850 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
@@ -40,7 +40,6 @@ import org.joda.time.DateTime;
 import org.joda.time.DateTimeZone;
 
 import com.amazonaws.AmazonClientException;
-import com.amazonaws.AmazonServiceException;
 import com.amazonaws.ClientConfiguration;
 import com.amazonaws.auth.BasicAWSCredentials;
 import com.amazonaws.services.cloudwatch.AmazonCloudWatchClient;
@@ -219,8 +218,11 @@ public class AWSHelper {
 	 * cluster is added.
 	 * 
 	 * @param name
+	 *            of the load balancer to be created
 	 * @param listeners
+	 *            to be attached to the load balancer
 	 * @param region
+	 *            in which the load balancer needs to be created
 	 * @return DNS name of newly created load balancer
 	 * @throws LoadBalancerExtensionException
 	 */
@@ -267,7 +269,9 @@ public class AWSHelper {
 	 * with which this load balancer was associated, is removed.
 	 * 
 	 * @param loadBalancerName
+	 *            to be deleted
 	 * @param region
+	 *            of the laod balancer
 	 */
 	public void deleteLoadBalancer(String loadBalancerName, String region) {
 
@@ -293,13 +297,19 @@ public class AWSHelper {
 	 * 
 	 * @param loadBalancerName
 	 * @param instances
+	 *            to attached to the load balancer
 	 * @param region
+	 *            of the load balancer
 	 */
 	public void registerInstancesToLoadBalancer(String loadBalancerName,
 			List<Instance> instances, String region) {
 
-		log.info("Attaching instance " + instances.get(0)
-				+ " to load balancer + " + loadBalancerName);
+		log.info("Attaching following instance(s) to load balancer + "
+				+ loadBalancerName);
+
+		for (Instance instance : instances) {
+			log.info(instance.getInstanceId());
+		}
 
 		RegisterInstancesWithLoadBalancerRequest registerInstancesWithLoadBalancerRequest = new RegisterInstancesWithLoadBalancerRequest(
 				loadBalancerName, instances);
@@ -308,7 +318,8 @@ public class AWSHelper {
 			elbClient.setEndpoint(String.format(
 					Constants.ELB_ENDPOINT_URL_FORMAT, region));
 
-			elbClient.registerInstancesWithLoadBalancer(registerInstancesWithLoadBalancerRequest);
+			elbClient
+					.registerInstancesWithLoadBalancer(registerInstancesWithLoadBalancerRequest);
 
 		} catch (AmazonClientException e) {
 			log.error("Could not register instances to load balancer "
@@ -323,13 +334,19 @@ public class AWSHelper {
 	 * 
 	 * @param loadBalancerName
 	 * @param instances
+	 *            to be de-registered from load balancer
 	 * @param region
+	 *            of the load balancer
 	 */
 	public void deregisterInstancesFromLoadBalancer(String loadBalancerName,
 			List<Instance> instances, String region) {
 
-		log.info("Detaching instance " + instances.get(0)
-				+ " from load balancer + " + loadBalancerName);
+		log.info("De-registering following instance(s) from load balancer + "
+				+ loadBalancerName);
+
+		for (Instance instance : instances) {
+			log.info(instance.getInstanceId());
+		}
 
 		DeregisterInstancesFromLoadBalancerRequest deregisterInstancesFromLoadBalancerRequest = new DeregisterInstancesFromLoadBalancerRequest(
 				loadBalancerName, instances);
@@ -338,7 +355,8 @@ public class AWSHelper {
 			elbClient.setEndpoint(String.format(
 					Constants.ELB_ENDPOINT_URL_FORMAT, region));
 
-			elbClient.deregisterInstancesFromLoadBalancer(deregisterInstancesFromLoadBalancerRequest);
+			elbClient
+					.deregisterInstancesFromLoadBalancer(deregisterInstancesFromLoadBalancerRequest);
 
 		} catch (AmazonClientException e) {
 			log.error("Could not de-register instances from load balancer "
@@ -352,13 +370,13 @@ public class AWSHelper {
 	 * 
 	 * @param loadBalancerName
 	 * @param region
+	 *            of the load balancer
 	 * @return description of the load balancer
 	 */
 	private LoadBalancerDescription getLoadBalancerDescription(
 			String loadBalancerName, String region) {
 
 		List<String> loadBalancers = new ArrayList<String>();
-
 		loadBalancers.add(loadBalancerName);
 
 		DescribeLoadBalancersRequest describeLoadBalancersRequest = new DescribeLoadBalancersRequest(
@@ -450,6 +468,15 @@ public class AWSHelper {
 
 	}
 
+	/**
+	 * Checks if the security group is already present in the given region. If
+	 * yes, then returns its group id. If not, present the returns null.
+	 * 
+	 * @param groupName
+	 *            to be checked for presence.
+	 * @param region
+	 * @return id of the security group
+	 */
 	public String getSecurityGroupId(String groupName, String region) {
 		if (groupName == null || groupName.isEmpty()) {
 			return null;
@@ -482,6 +509,17 @@ public class AWSHelper {
 		return null;
 	}
 
+	/**
+	 * Creates security group with the given name in the given region
+	 * 
+	 * @param groupName
+	 *            to be created
+	 * @param description
+	 * @param region
+	 *            in which the security group to be created
+	 * @return Id of the security group created
+	 * @throws LoadBalancerExtensionException
+	 */
 	public String createSecurityGroup(String groupName, String description,
 			String region) throws LoadBalancerExtensionException {
 		if (groupName == null || groupName.isEmpty()) {
@@ -510,6 +548,22 @@ public class AWSHelper {
 
 	}
 
+	/**
+	 * Adds inbound rule to the security group which allows users to access load
+	 * balancer at specified port and using the specified protocol. Port
+	 * specified should be a proxy port mentioned in the port mappings of the
+	 * cartridge.
+	 * 
+	 * @param groupId
+	 *            to which this rule to be added
+	 * @param region
+	 *            of the security group
+	 * @param protocol
+	 *            with which load balancer can be accessed
+	 * @param port
+	 *            at which load balancer can be accessed
+	 * @throws LoadBalancerExtensionException
+	 */
 	public void addInboundRuleToSecurityGroup(String groupId, String region,
 			String protocol, int port) throws LoadBalancerExtensionException {
 		if (groupId == null || groupId.isEmpty()) {
@@ -581,17 +635,22 @@ public class AWSHelper {
 						.authorizeSecurityGroupIngress(authorizeSecurityGroupIngressRequest);
 
 			} catch (AmazonClientException e) {
-
-				// if(!e.getMessage().contains("already exist"))
-				// {
 				throw new LoadBalancerExtensionException(
 						"Could not add inbound rule to security group "
-								+ groupId + ".");
-				// }
+								+ groupId + ".", e);
 			}
 		}
 	}
 
+	/**
+	 * Returns the security group id for the given region if it is already
+	 * present. If it is not already present then creates a new security group
+	 * in that region.
+	 * 
+	 * @param region
+	 * @return Id of the security group
+	 * @throws LoadBalancerExtensionException
+	 */
 	public String getSecurityGroupIdForRegion(String region)
 			throws LoadBalancerExtensionException {
 		if (region == null)
@@ -616,11 +675,14 @@ public class AWSHelper {
 	}
 
 	/**
+	 * Retrieves the total number of requests that were made to the load
+	 * balancer during the given time interval in the past
+	 * 
 	 * @param loadBalancerName
 	 * @param region
 	 * @param timeInterval
-	 *            in seconds
-	 * @return
+	 *            in seconds which must be multiple of 60
+	 * @return number of requests made
 	 */
 	public int getRequestCount(String loadBalancerName, String region,
 			int timeInterval) {
@@ -673,6 +735,16 @@ public class AWSHelper {
 		return count;
 	}
 
+	/**
+	 * Retrieves total number of responses generated by all instances attached
+	 * to the load balancer during the time interval in the past.
+	 * 
+	 * @param loadBalancerName
+	 * @param region
+	 * @param timeInterval
+	 *            in seconds which must be multiple of 60
+	 * @return number of responses generated
+	 */
 	public int getAllResponsesCount(String loadBalancerName, String region,
 			int timeInterval) {
 		int total = 0;
@@ -697,6 +769,24 @@ public class AWSHelper {
 		return total;
 	}
 
+	/**
+	 * Retrieves the number of responses generated for a particular response
+	 * code like 2XX, 3XX, 4XX, 5XX
+	 * 
+	 * @param loadBalancerName
+	 * @param region
+	 * @param metricName
+	 *            which is one among HTTPCode_Backend_2XX or
+	 *            HTTPCode_Backend_3XX or HTTPCode_Backend_4XX or
+	 *            HTTPCode_Backend_5XX
+	 * @param startTime
+	 *            of the window to be scanned
+	 * @param endTime
+	 *            of the window to be scanned
+	 * @param timeInterval
+	 *            in seconds
+	 * @return number for response for this metric
+	 */
 	public int getResponseCountForMetric(String loadBalancerName,
 			String region, String metricName, Date startTime, Date endTime,
 			int timeInterval) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/df8684b7/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 6b5c3fc..59b313e 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,10 +19,8 @@
 
 package org.apache.stratos.aws.extension;
 
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.concurrent.ConcurrentHashMap;
@@ -33,7 +31,6 @@ 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;
 
@@ -41,9 +38,10 @@ public class AWSLoadBalancer implements LoadBalancer {
 
 	private static final Log log = LogFactory.getLog(AWSLoadBalancer.class);
 
-	// A map <clusterId, load balancer id>
+	// A map <clusterId, load balancer info> to store load balancer information against the cluster id
 	private static ConcurrentHashMap<String, LoadBalancerInfo> clusterIdToLoadBalancerMap = new ConcurrentHashMap<String, LoadBalancerInfo>();
 
+	// Object used to invoke methods related to AWS API
 	private AWSHelper awsHelper;
 
 	public AWSLoadBalancer() throws LoadBalancerExtensionException {
@@ -78,11 +76,11 @@ public class AWSLoadBalancer implements LoadBalancer {
 						String loadBalancerName = loadBalancerInfo.getName();
 						String region = loadBalancerInfo.getRegion();
 
-						// 1. Get all the instances attached
-						// Add/remove instances as necessary
+						// Get all the instances attached
+						// Attach newly added instances to load balancer
 
 						// attachedInstances list is useful in finding out what
-						// all new instances
+						// all new instances which
 						// should be attached to this load balancer.
 						List<Instance> attachedInstances = awsHelper
 								.getAttachedInstances(loadBalancerName, region);
@@ -120,8 +118,6 @@ public class AWSLoadBalancer implements LoadBalancer {
 								awsHelper.registerInstancesToLoadBalancer(
 										loadBalancerName,
 										instancesToAddToLoadBalancer, region);
-
-							// Update domain mappings
 						}
 
 					} else {
@@ -130,9 +126,6 @@ public class AWSLoadBalancer implements LoadBalancer {
 								.getMembers();
 
 						if (clusterMembers.size() > 0) {
-
-							// try
-							// {
 							// a unique load balancer name with user-defined
 							// prefix and a sequence number.
 							String loadBalancerName = awsHelper
@@ -155,10 +148,9 @@ public class AWSLoadBalancer implements LoadBalancer {
 									.createLoadBalancer(loadBalancerName,
 											listenersForThisCluster, region);
 
-							// Also add the inbound rule
+							// Add the inbound rule the security group of the load balancer
 							// For each listener, add a new rule with load
-							// balancer port as allowed protocol.
-
+							// balancer port as allowed protocol in the security group.
 							for (Listener listener : listenersForThisCluster) {
 								int port = listener.getLoadBalancerPort();
 
@@ -179,7 +171,7 @@ public class AWSLoadBalancer implements LoadBalancer {
 									+ "' created for cluster '"
 									+ cluster.getClusterId());
 
-							// register instances to LB
+							// Register instances in the cluster to load balancer
 							List<Instance> instances = new ArrayList<Instance>();
 
 							for (Member member : clusterMembers) {
@@ -199,19 +191,12 @@ public class AWSLoadBalancer implements LoadBalancer {
 							awsHelper.registerInstancesToLoadBalancer(
 									loadBalancerName, instances, region);
 
-							// Create domain mappings
-
 							LoadBalancerInfo loadBalancerInfo = new LoadBalancerInfo(
 									loadBalancerName, region);
 
 							clusterIdToLoadBalancerMap.put(
 									cluster.getClusterId(), loadBalancerInfo);
 							activeClusters.add(cluster.getClusterId());
-							// }
-							// catch(LoadBalancerExtensionException e)
-							// {
-							// log.debug(e);
-							// }
 						}
 					}
 				}
@@ -270,12 +255,10 @@ public class AWSLoadBalancer implements LoadBalancer {
 		// Remove all load balancers
 		for (LoadBalancerInfo loadBalancerInfo : clusterIdToLoadBalancerMap
 				.values()) {
-			// remove load balancer
+			// Remove load balancer
 			awsHelper.deleteLoadBalancer(loadBalancerInfo.getName(),
 					loadBalancerInfo.getRegion());
 		}
-
-		// Remove domain mappings
 	}
 
 	public static ConcurrentHashMap<String, LoadBalancerInfo> getClusterIdToLoadBalancerMap() {

http://git-wip-us.apache.org/repos/asf/stratos/blob/df8684b7/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSStatisticsReader.java
----------------------------------------------------------------------
diff --git a/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSStatisticsReader.java b/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSStatisticsReader.java
index 40d51e9..55aca3d 100644
--- a/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSStatisticsReader.java
+++ b/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSStatisticsReader.java
@@ -22,16 +22,10 @@ package org.apache.stratos.aws.extension;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.common.constants.StratosConstants;
-import org.apache.stratos.common.util.CommandUtils;
-import org.apache.stratos.load.balancer.common.domain.Cluster;
-import org.apache.stratos.load.balancer.common.domain.Member;
-import org.apache.stratos.load.balancer.common.domain.Port;
-import org.apache.stratos.load.balancer.common.domain.Service;
 import org.apache.stratos.load.balancer.common.statistics.LoadBalancerStatisticsReader;
 import org.apache.stratos.load.balancer.common.topology.TopologyProvider;
 import org.apache.stratos.load.balancer.extension.api.exception.LoadBalancerExtensionException;
 
-import java.io.IOException;
 import java.util.concurrent.ConcurrentHashMap;
 
 /**
@@ -69,6 +63,9 @@ public class AWSStatisticsReader implements LoadBalancerStatisticsReader {
 		ConcurrentHashMap<String, LoadBalancerInfo> clusterIdToLoadBalancerMap = AWSLoadBalancer
 				.getClusterIdToLoadBalancerMap();
 
+		// Check if load balancer info is available for this cluster.
+		// If yes, then find difference between total requests made to the load balancer and 
+		// total responses generated by instances attached to it.
 		if (clusterIdToLoadBalancerMap.containsKey(clusterId)) {
 			LoadBalancerInfo loadBalancerInfo = clusterIdToLoadBalancerMap
 					.get(clusterId);
@@ -76,6 +73,7 @@ public class AWSStatisticsReader implements LoadBalancerStatisticsReader {
 			String loadBalancerName = loadBalancerInfo.getName();
 			String region = loadBalancerInfo.getRegion();
 
+			// In flight request count = total requests - total responses
 			inFlightRequestCount = awsHelper.getRequestCount(loadBalancerName,
 					region, awsHelper.getStatisticsInterval())
 					- awsHelper.getAllResponsesCount(loadBalancerName, region,