providing the config option to specify initial zone suffix set

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

Branch: refs/heads/stratos-4.1.x
Commit: a437ce9b90daeb3724ced599c8c8325f5328d8b9
Parents: bad885f
Author: Isuru Haththotuwa <[email protected]>
Authored: Thu Nov 5 12:04:00 2015 +0530
Committer: Isuru Haththotuwa <[email protected]>
Committed: Tue Nov 10 13:33:56 2015 +0530

----------------------------------------------------------------------
 .../aws-extension/src/main/conf/aws.properties  |  8 +++++++
 .../apache/stratos/aws/extension/AWSHelper.java | 16 +++++++++++---
 .../stratos/aws/extension/AWSLoadBalancer.java  | 22 ++++++++++++++------
 .../apache/stratos/aws/extension/Constants.java |  1 +
 4 files changed, 38 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/a437ce9b/extensions/load-balancer/modules/aws-extension/src/main/conf/aws.properties
----------------------------------------------------------------------
diff --git 
a/extensions/load-balancer/modules/aws-extension/src/main/conf/aws.properties 
b/extensions/load-balancer/modules/aws-extension/src/main/conf/aws.properties
index 39a5d84..5a399ba 100644
--- 
a/extensions/load-balancer/modules/aws-extension/src/main/conf/aws.properties
+++ 
b/extensions/load-balancer/modules/aws-extension/src/main/conf/aws.properties
@@ -40,3 +40,11 @@ statistics-interval=60
 load-balancer-ssl-certificate-id=
 # Enable Application generated cookie stickiness by specifying the Cookie name 
uses
 app-sticky-session-cookie-name=JSESSIONID
+# comma separated initial set of zones (EC2 zone = <region> + a | b | c | d 
...)
+# this set of initial zones will be used to tell the load balancer what are 
the initial zones
+# that should be considered in forwarding the requests
+# the region is determined using the member
+# example: initial-availability-zones=a,b
+# if the region is deteremined to be ap-southeast-1, initial zones will be:
+# ap-southeast-1a and ap-southeast-1b
+initial-availability-zones=a,b

http://git-wip-us.apache.org/repos/asf/stratos/blob/a437ce9b/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 bcb92e5..2f8760a 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
@@ -58,6 +58,7 @@ public class AWSHelper {
     private int statisticsInterval;
     private String sslCertificateId;
     private String appStickySessionCookie;
+    private Set<String> initialZones = new HashSet<>();
 
     private AtomicInteger lbSequence;
 
@@ -171,6 +172,12 @@ public class AWSHelper {
 
             this.lbSecurityGroupDescription = 
Constants.LOAD_BALANCER_SECURITY_GROUP_DESCRIPTION;
 
+            String commaSeparatedInitialZones = 
properties.getProperty(Constants.INITIAL_AVAILABILITY_ZONES);
+            if (commaSeparatedInitialZones != null && 
!commaSeparatedInitialZones.isEmpty())  {
+                
initialZones.addAll(Arrays.asList(commaSeparatedInitialZones.trim().split("\\s*,"
 +
+                        "\\s*")));
+            }
+
             regionToSecurityGroupIdMap = new ConcurrentHashMap<String, 
String>();
 
             awsCredentials = new BasicAWSCredentials(awsAccessKey, 
awsSecretKey);
@@ -224,7 +231,8 @@ public class AWSHelper {
      * @throws LoadBalancerExtensionException
      */
     public String createLoadBalancer(String name, List<Listener> listeners,
-                                     String region, String availabilityZone, 
boolean inVPC) throws LoadBalancerExtensionException {
+                                     String region, Set<String> 
availabilityZones, boolean inVPC)
+            throws LoadBalancerExtensionException {
 
         log.info("Creating load balancer " + name);
 
@@ -238,8 +246,6 @@ public class AWSHelper {
 //             availabilityZones.add(getAvailabilityZoneFromRegion(region));
 //
 //             
createLoadBalancerRequest.setAvailabilityZones(availabilityZones);
-        Set<String> availabilityZones = new HashSet<String>();
-        availabilityZones.add(availabilityZone);
         createLoadBalancerRequest.setAvailabilityZones(availabilityZones);
 
         try {
@@ -1089,4 +1095,8 @@ public class AWSHelper {
     public String getAppStickySessionCookie() {
         return appStickySessionCookie;
     }
+
+    public Set<String> getInitialZones() {
+        return initialZones;
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/a437ce9b/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 32ec919..11890d3 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
@@ -153,18 +153,28 @@ public class AWSLoadBalancer implements LoadBalancer {
                         // list of AWS listeners obtained using port mappings 
of one of the members of the cluster.
                         List<Listener> listenersForThisCluster = 
awsHelper.getRequiredListeners(aMember);
 
-                        // Get the zone from the first member and use in LB 
creation. Zone will be updated for each member below
-                        String initialAvailabilityZone = 
getEC2AvaialbilityZoneOfMember(aMember);
-                        if (initialAvailabilityZone == null) {
-                            // could not get the availability zone from the 
Member property 'EC2_AVAILABILITY_ZONE'
+                        // Get the initial zone identifier list (a, b, c) to 
consider in creating
+                        // the LB as defined in aws.properties file
+                        Set<String> initialZones = awsHelper.getInitialZones();
+
+                        Set<String> initialAvailabilityZones = new HashSet<>();
+                        if (initialZones.isEmpty()) {
+                            // initial availability zones not defined
                             // use the default (<region>a)
-                            initialAvailabilityZone = 
awsHelper.getAvailabilityZoneFromRegion(region);
+                            
initialAvailabilityZones.add(awsHelper.getAvailabilityZoneFromRegion
+                                    (region));
+                        } else {
+                            // prepend the region and construct the 
availability zone list with
+                            // full names (<region> + <zone>)
+                            for (String zone : initialZones) {
+                                initialAvailabilityZones.add(region + zone);
+                            }
                         }
 
                         // Returns DNS name of load balancer which was created.
                         // This is used in the domain mapping of this cluster.
                         String loadBalancerDNSName = 
awsHelper.createLoadBalancer(loadBalancerName, listenersForThisCluster,
-                                region, initialAvailabilityZone, 
AWSExtensionContext.getInstance().isOperatingInVPC());
+                                region, initialAvailabilityZones, 
AWSExtensionContext.getInstance().isOperatingInVPC());
 
                         // enable connection draining (default) and cross zone 
load balancing (if specified in aws-extension.sh)
                         awsHelper.modifyLBAttributes(loadBalancerName, region, 
AWSExtensionContext.getInstance().

http://git-wip-us.apache.org/repos/asf/stratos/blob/a437ce9b/extensions/load-balancer/modules/aws-extension/src/main/java/org/apache/stratos/aws/extension/Constants.java
----------------------------------------------------------------------
diff --git 
a/extensions/load-balancer/modules/aws-extension/src/main/java/org/apache/stratos/aws/extension/Constants.java
 
b/extensions/load-balancer/modules/aws-extension/src/main/java/org/apache/stratos/aws/extension/Constants.java
index dbcfb9a..ebda3c4 100644
--- 
a/extensions/load-balancer/modules/aws-extension/src/main/java/org/apache/stratos/aws/extension/Constants.java
+++ 
b/extensions/load-balancer/modules/aws-extension/src/main/java/org/apache/stratos/aws/extension/Constants.java
@@ -60,5 +60,6 @@ public class Constants {
        public static final String STICKINESS_POLICY = "stickiness-policy";
        public static final String OPERATIMG_IN_VPC = "operating.in.vpc";
        public static final String ENABLE_CROSS_ZONE_LOADBALANCING = 
"enable.cross.zone.load.balancing";
+       public static final String INITIAL_AVAILABILITY_ZONES = 
"initial-availability-zones";
        public static final String EC2_AVAILABILITY_ZONE_PROPERTY = 
"EC2_AVAILABILITY_ZONE";
 }

Reply via email to