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 <[email protected]> Authored: Sun Jul 26 09:55:53 2015 +0000 Committer: swapnilpatilRajaram <[email protected]> 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"; }
