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