Refactor AWS LB extension

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

Branch: refs/heads/stratos-4.1.x
Commit: 42a965473f03041f6142125ad3b6fb2db0e22bfd
Parents: 46a99e7
Author: gayangunarathne <[email protected]>
Authored: Mon Dec 21 17:27:43 2015 +0530
Committer: gayangunarathne <[email protected]>
Committed: Mon Dec 21 17:27:43 2015 +0530

----------------------------------------------------------------------
 .../apache/stratos/aws/extension/AWSHelper.java | 58 ++++++++------------
 .../stratos/aws/extension/AWSLoadBalancer.java  | 26 +++++++--
 .../org/apache/stratos/aws/extension/Main.java  |  6 +-
 3 files changed, 49 insertions(+), 41 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/42a96547/extensions/load-balancer/modules/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSHelper.java
----------------------------------------------------------------------
diff --git 
a/extensions/load-balancer/modules/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSHelper.java
 
b/extensions/load-balancer/modules/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSHelper.java
index ef66290..85d6811 100644
--- 
a/extensions/load-balancer/modules/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSHelper.java
+++ 
b/extensions/load-balancer/modules/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSHelper.java
@@ -19,24 +19,8 @@
 
 package org.apache.stratos.aws.extension;
 
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.*;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.atomic.AtomicInteger;
-
-import com.amazonaws.AmazonServiceException;
-import com.amazonaws.services.ec2.model.*;
-import com.amazonaws.services.elasticloadbalancing.model.Instance;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.load.balancer.common.domain.*;
-import 
org.apache.stratos.load.balancer.extension.api.exception.LoadBalancerExtensionException;
-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;
@@ -45,8 +29,24 @@ import com.amazonaws.services.cloudwatch.model.Dimension;
 import com.amazonaws.services.cloudwatch.model.GetMetricStatisticsRequest;
 import com.amazonaws.services.cloudwatch.model.GetMetricStatisticsResult;
 import com.amazonaws.services.ec2.AmazonEC2Client;
+import com.amazonaws.services.ec2.model.*;
 import 
com.amazonaws.services.elasticloadbalancing.AmazonElasticLoadBalancingClient;
 import com.amazonaws.services.elasticloadbalancing.model.*;
+import com.amazonaws.services.elasticloadbalancing.model.Instance;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.load.balancer.common.domain.Member;
+import org.apache.stratos.load.balancer.common.domain.Port;
+import 
org.apache.stratos.load.balancer.extension.api.exception.LoadBalancerExtensionException;
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicInteger;
 
 public class AWSHelper {
     private String awsAccessKey;
@@ -125,11 +125,6 @@ public class AWSHelper {
                         "group id is required");
             }
 
-//            if (this.lbSecurityGroupName.isEmpty() || 
this.lbSecurityGroupName.length() >
-//                    Constants.SECURITY_GROUP_NAME_MAX_LENGTH) {
-//                throw new LoadBalancerExtensionException("Invalid load 
balancer security group name.");
-//            }
-
             // Read the SSL certificate Id. This is mandatory if only we are 
using HTTPS as the front end protocol.
             // 
http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/using-elb-listenerconfig-quickref.html
             this.sslCertificateId = properties
@@ -270,12 +265,6 @@ public class AWSHelper {
 
         createLoadBalancerRequest.setListeners(listeners);
 
-        // don't need this now since we are anyway updating zone according to 
the member
-//             Set<String> availabilityZones = new HashSet<String>();
-//             availabilityZones.add(getAvailabilityZoneFromRegion(region));
-//
-//             
createLoadBalancerRequest.setAvailabilityZones(availabilityZones);
-        
 
         try {
             if (inVPC) {
@@ -365,10 +354,11 @@ public class AWSHelper {
             log.info(instance.getInstanceId());
         }
 
-        RegisterInstancesWithLoadBalancerRequest 
registerInstancesWithLoadBalancerRequest = new 
RegisterInstancesWithLoadBalancerRequest(
-                loadBalancerName, instances);
+           RegisterInstancesWithLoadBalancerRequest 
registerInstancesWithLoadBalancerRequest =
+                           new RegisterInstancesWithLoadBalancerRequest(
+                                           loadBalancerName, instances);
 
-        RegisterInstancesWithLoadBalancerResult registerInstancesWithLBRes = 
null;
+           RegisterInstancesWithLoadBalancerResult registerInstancesWithLBRes 
= null;
 
         try {
             elbClient.setEndpoint(String.format(
@@ -969,10 +959,10 @@ public class AWSHelper {
             int instancePort = port.getValue();
             int proxyPort = port.getProxy();
             String protocol = port.getProtocol().toUpperCase();
-            String instanceProtocol = protocol;
+
 
             Listener listener = new Listener(protocol, proxyPort, 
instancePort);
-            listener.setInstanceProtocol(instanceProtocol);
+            listener.setInstanceProtocol(protocol);
             if ("HTTPS".equalsIgnoreCase(protocol) || 
"SSL".equalsIgnoreCase(protocol)) {
                 // if the SSL certificate is not configured in the 
aws.properties file, can't continue
                 if (getSslCertificateId() == null || 
getSslCertificateId().isEmpty()) {
@@ -996,7 +986,7 @@ public class AWSHelper {
     /**
      * Constructs name of the load balancer to be associated with the cluster
      *
-     * @param clusterId
+     * @param serviceName
      * @return name of the load balancer
      * @throws LoadBalancerExtensionException
      */

http://git-wip-us.apache.org/repos/asf/stratos/blob/42a96547/extensions/load-balancer/modules/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSLoadBalancer.java
----------------------------------------------------------------------
diff --git 
a/extensions/load-balancer/modules/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSLoadBalancer.java
 
b/extensions/load-balancer/modules/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSLoadBalancer.java
index b365c9b..f5210b9 100644
--- 
a/extensions/load-balancer/modules/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSLoadBalancer.java
+++ 
b/extensions/load-balancer/modules/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSLoadBalancer.java
@@ -127,7 +127,7 @@ public class AWSLoadBalancer implements LoadBalancer {
 
                         log.info(String.format("Load balancer %s  created for 
cluster %s " , loadBalancerDNSName, cluster.getClusterId()));
 
-                           if(addClusterMembersInfo(clusterMembers, 
loadBalancerName, region)){
+                           if(addClusterMembersInfo(clusterMembers, 
loadBalancerName, region,null)){
                                    activeClusters.add(cluster.getClusterId());
                            }
 
@@ -192,7 +192,8 @@ public class AWSLoadBalancer implements LoadBalancer {
         return true;
     }
 
-       private Boolean addClusterMembersInfo(Collection<Member> 
clusterMembers, String loadBalancerName, String region) {
+       private Boolean addClusterMembersInfo(Collection<Member> 
clusterMembers, String loadBalancerName, String region,
+                                             List<Instance> attachedInstances) 
{
                Boolean isUpdated=false;
                // Register instances in the cluster to load balancer
                List<Instance> instances = new ArrayList<Instance>();
@@ -208,6 +209,22 @@ public class AWSLoadBalancer implements LoadBalancer {
                    }
 
                    Instance instance = new Instance();
+
+                       if (attachedInstances == null || 
!attachedInstances.contains(instance)) {
+                               instances.add(instance);
+
+                               if (log.isDebugEnabled()) {
+                                       log.debug("Instance " + 
awsHelper.getAWSInstanceName(member.getInstanceId()) +
+                                                 " needs to be registered to 
load balancer " + loadBalancerName);
+                               }
+
+                               // LB Common Member has a property 
'EC2_AVAILABILITY_ZONE' points to the ec2 availability zone
+                               // for this member. Use the property value to 
update the LB about the relevant zone
+                               String availabilityZone = 
getEC2AvaialbilityZoneOfMember(member);
+                               if (availabilityZone != null) {
+                                       availabilityZones.add(availabilityZone);
+                               }
+                       }
                    
instance.setInstanceId(awsHelper.getAWSInstanceName(instanceId));
 
                    instances.add(instance);
@@ -220,7 +237,8 @@ public class AWSLoadBalancer implements LoadBalancer {
 
                        // add stickiness policy
                        if (awsHelper.getAppStickySessionCookie() != null && 
!awsHelper.getAppStickySessionCookie().isEmpty()) {
-                               CreateAppCookieStickinessPolicyResult result = 
awsHelper.createStickySessionPolicy(loadBalancerName, 
awsHelper.getAppStickySessionCookie(),
+                               CreateAppCookieStickinessPolicyResult result = 
awsHelper.createStickySessionPolicy(loadBalancerName,
+                                                                               
                                   awsHelper.getAppStickySessionCookie(),
                                                                                
                                   Constants.STICKINESS_POLICY,
                                                                                
                                   region);
 
@@ -291,7 +309,7 @@ public class AWSLoadBalancer implements LoadBalancer {
                // clusterMembers stores all the members of a cluster.
                Collection<Member> clusterMembers = cluster.getMembers();
 
-               isUpdated= addClusterMembersInfo(clusterMembers, 
loadBalancerName, region);
+               isUpdated= addClusterMembersInfo(clusterMembers, 
loadBalancerName, region,attachedInstances);
 
                return isUpdated;
        }

http://git-wip-us.apache.org/repos/asf/stratos/blob/42a96547/extensions/load-balancer/modules/aws-extension/src/main/java/org/apache/stratos/aws/extension/Main.java
----------------------------------------------------------------------
diff --git 
a/extensions/load-balancer/modules/aws-extension/src/main/java/org/apache/stratos/aws/extension/Main.java
 
b/extensions/load-balancer/modules/aws-extension/src/main/java/org/apache/stratos/aws/extension/Main.java
index 80b6481..0ea2005 100644
--- 
a/extensions/load-balancer/modules/aws-extension/src/main/java/org/apache/stratos/aws/extension/Main.java
+++ 
b/extensions/load-balancer/modules/aws-extension/src/main/java/org/apache/stratos/aws/extension/Main.java
@@ -36,7 +36,7 @@ import java.util.concurrent.ExecutorService;
 public class Main {
        private static final Log log = LogFactory.getLog(Main.class);
        public static final String AWS_EXTENSION_THREAD_POOL = 
"aws.extension.thread.pool";
-       public static final int THREAD_POOL_SIZE = 10;
+       public static final int THREAD_POOL_SIZE =2;
        private static ExecutorService executorService;
 
        public static void main(String[] args) {
@@ -73,13 +73,13 @@ public class Main {
                                                }
                                                mainThread.join();
                                        } catch (Exception e) {
-                                               log.error(e);
+                                               log.error("Error occurred while 
shutting down the aws lb extension",e);
                                        }
                                }
                        });
                } catch (LoadBalancerExtensionException e) {
                        if (log.isErrorEnabled()) {
-                               log.error("Error occurred while running the aws 
lb extension");
+                               log.error("Error occurred while running the aws 
lb extension",e);
                        }
                        if (extension != null) {
                                log.info("Shutting aws extension...");

Reply via email to