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

Reply via email to