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

[18/32] stratos git commit: Supported seuquence for load balancer name.

Supported seuquence for load balancer name.


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

Branch: refs/heads/gsoc-projects-2015
Commit: c979a0de5197a80b42c15dd03ca4811f1ec43991
Parents: e16cf0d
Author: swapnilpatilRajaram <sw...@students.iiit.ac.in>
Authored: Sun Jul 26 09:55:53 2015 +0000
Committer: swapnilpatilRajaram <sw...@students.iiit.ac.in>
Committed: Sun Jul 26 09:55:53 2015 +0000

----------------------------------------------------------------------
 .../src/main/conf/aws-credentials.conf          |  4 +-
 .../apache/stratos/aws/extension/AWSHelper.java | 45 +++++++++++++++++---
 .../stratos/aws/extension/AWSLoadBalancer.java  | 26 +++++------
 .../apache/stratos/aws/extension/Constants.java |  1 +
 4 files changed, 56 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/c979a0de/extensions/load-balancer/aws-extension/src/main/conf/aws-credentials.conf
----------------------------------------------------------------------
diff --git a/extensions/load-balancer/aws-extension/src/main/conf/aws-credentials.conf b/extensions/load-balancer/aws-extension/src/main/conf/aws-credentials.conf
index d9d296c..52cfad0 100644
--- a/extensions/load-balancer/aws-extension/src/main/conf/aws-credentials.conf
+++ b/extensions/load-balancer/aws-extension/src/main/conf/aws-credentials.conf
@@ -1,2 +1,4 @@
 access-key=
-secret-key=
\ No newline at end of file
+secret-key=
+#load-balancer-prefix should contain only alphabets and dashes and should not exceed 25 characters.
+load-balancer-prefix=LB-
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/stratos/blob/c979a0de/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 9ec10de..1520674 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
@@ -23,6 +23,7 @@ import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Properties;
@@ -41,6 +42,9 @@ import com.amazonaws.services.elasticloadbalancing.model.*;
 public class AWSHelper {
 	private String awsAccessKey;
 	private String awsSecretKey;
+	private String lbPrefix;
+	private int lbSequence;
+	private Object lbSequenceMutex;
 
 	private BasicAWSCredentials awsCredentials;
 	private ClientConfiguration clientConfiguration;
@@ -70,6 +74,21 @@ public class AWSHelper {
 			this.awsSecretKey = properties
 					.getProperty(Constants.AWS_SECRET_KEY);
 
+			if(this.awsAccessKey.isEmpty() || this.awsSecretKey.isEmpty())
+			{
+				throw new LoadBalancerExtensionException("Invalid AWS credentials.");
+			}
+
+			this.lbPrefix = properties.getProperty(Constants.LB_PREFIX);
+
+			if(this.lbPrefix.isEmpty() || this.lbPrefix.length() > 25)
+			{
+				throw new LoadBalancerExtensionException("Invalid load balancer prefix.");
+			}
+
+			lbSequence = 0;
+			lbSequenceMutex = new Object();
+
 			awsCredentials = new BasicAWSCredentials(awsAccessKey, awsSecretKey);
 			clientConfiguration = new ClientConfiguration();
 
@@ -89,6 +108,14 @@ public class AWSHelper {
 		}
 	}
 
+	public int getNextLBSequence()
+	{
+		synchronized (lbSequenceMutex) {
+			lbSequence++;
+			return lbSequence;
+		}
+	}
+
 	/**
 	 * Creates a load balancer and returns its DNS name. Useful when a new
 	 * cluster is added.
@@ -407,10 +434,12 @@ public class AWSHelper {
 	 * @param service
 	 * @return list of listeners required for the service
 	 */
-	public List<Listener> getRequiredListeners(Service service) {
+	public List<Listener> getRequiredListeners(Member member) {
 		List<Listener> listeners = new ArrayList<Listener>();
 
-		for (Port port : service.getPorts()) {
+		Collection<Port> ports = member.getPorts();
+
+		for (Port port : ports) {
 			int instancePort = port.getValue();
 			int proxyPort = port.getProxy();
 			String protocol = port.getProtocol().toUpperCase();
@@ -430,13 +459,15 @@ public class AWSHelper {
 	 * 
 	 * @param clusterId
 	 * @return name of the load balancer
+	 * @throws LoadBalancerExtensionException
 	 */
-	public String getLoadBalancerName(String clusterId) {
+	public String generateLoadBalancerName() throws LoadBalancerExtensionException {
 		String name = null;
-		int length = clusterId.length();
-		int endIndex = length > 31 ? 31 : length;
-		name = clusterId.substring(0, endIndex);
-		name = name.replace('.', '-');
+
+		name = lbPrefix + getNextLBSequence();
+
+		if(name.length() > 32)
+			throw new LoadBalancerExtensionException("Load balanacer name length exceeded");
 
 		return name;
 	}

http://git-wip-us.apache.org/repos/asf/stratos/blob/c979a0de/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 f53562e..7bf93e8 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
@@ -59,10 +59,6 @@ public class AWSLoadBalancer implements LoadBalancer {
 			HashSet<String> activeClusters = new HashSet<String>();
 
 			for (Service service : topology.getServices()) {
-
-				List<Listener> listenersForThisService = awsHelper
-						.getRequiredListeners(service);
-
 				for (Cluster cluster : service.getClusters()) {
 					// Check if a load balancer is created for this cluster
 					if (clusterIdToLoadBalancerMap.containsKey(cluster
@@ -154,7 +150,10 @@ public class AWSLoadBalancer implements LoadBalancer {
 
 						List<Listener> listenersToAddToLoadBalancer = new ArrayList<Listener>();
 
-						for (Listener listener : listenersForThisService) {
+						List<Listener> listenersForThisCluster = awsHelper
+								.getRequiredListeners(clusterMembers.iterator().next());
+
+						for (Listener listener : listenersForThisCluster) {
 							if (attachedListeners == null
 									|| !attachedListeners.contains(listener)) {
 								listenersToAddToLoadBalancer.add(listener);
@@ -164,7 +163,7 @@ public class AWSLoadBalancer implements LoadBalancer {
 						List<Listener> listenersToRemoveFromLoadBalancer = new ArrayList<Listener>();
 
 						for (Listener listener : attachedListeners) {
-							if (!listenersForThisService.contains(listener)) {
+							if (!listenersForThisCluster.contains(listener)) {
 								listenersToRemoveFromLoadBalancer.add(listener);
 							}
 						}
@@ -183,21 +182,24 @@ public class AWSLoadBalancer implements LoadBalancer {
 
 					} else {
 						// Create a new load balancer for this cluster
-						Collection<Member> clusterInstances = cluster
+						Collection<Member> clusterMembers = cluster
 								.getMembers();
 
-						if (clusterInstances.size() == 0)
+						if (clusterMembers.size() == 0)
 							break;
 
 						String loadBalancerName = awsHelper
-								.getLoadBalancerName(cluster.getClusterId());
+								.generateLoadBalancerName();
 
-						String region = awsHelper.getAWSRegion(clusterInstances
+						String region = awsHelper.getAWSRegion(clusterMembers
 								.iterator().next().getInstanceId());
 
+						List<Listener> listenersForThisCluster = awsHelper
+								.getRequiredListeners(clusterMembers.iterator().next());
+
 						String loadBalancerDNSName = awsHelper
 								.createLoadBalancer(loadBalancerName,
-										listenersForThisService, region);
+										listenersForThisCluster, region);
 
 						log.info("Load balancer '" + loadBalancerDNSName
 								+ "' created for cluster '"
@@ -206,7 +208,7 @@ public class AWSLoadBalancer implements LoadBalancer {
 						// register instances to LB
 						List<Instance> instances = new ArrayList<Instance>();
 
-						for (Member member : clusterInstances) {
+						for (Member member : clusterMembers) {
 							String instanceId = member.getInstanceId();
 
 							System.out.println("Instance id : " + instanceId);

http://git-wip-us.apache.org/repos/asf/stratos/blob/c979a0de/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/Constants.java
----------------------------------------------------------------------
diff --git a/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/Constants.java b/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/Constants.java
index 71c7ef7..d03915c 100644
--- a/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/Constants.java
+++ b/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/Constants.java
@@ -32,4 +32,5 @@ public class Constants {
     public static final String AWS_CREDENTIALS_FILE="aws.credentials.file";
     public static final String AWS_ACCESS_KEY = "access-key";
     public static final String AWS_SECRET_KEY = "secret-key";
+    public static final String LB_PREFIX = "load-balancer-prefix";
 }