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";
}