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/12/21 12:58:16 UTC
[3/3] stratos git commit: Refactor AWS LB extension
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 <ga...@wso2.com>
Authored: Mon Dec 21 17:27:43 2015 +0530
Committer: gayangunarathne <ga...@wso2.com>
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...");