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/10/09 16:35:18 UTC
[05/32] stratos git commit: Added proper comments and corrected
formatting.
Added proper comments and corrected formatting.
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/94cf7564
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/94cf7564
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/94cf7564
Branch: refs/heads/gsoc-projects-2015
Commit: 94cf75648d996955cd105aa9cc9e204500cff9ec
Parents: 5dba1b4
Author: swapnilpatilRajaram <sw...@students.iiit.ac.in>
Authored: Sun Jun 14 14:41:29 2015 +0000
Committer: swapnilpatilRajaram <sw...@students.iiit.ac.in>
Committed: Sun Jun 14 14:41:29 2015 +0000
----------------------------------------------------------------------
.../apache/stratos/aws/extension/AWSHelper.java | 400 ++++++++++---------
.../stratos/aws/extension/AWSLoadBalancer.java | 295 +++++++-------
2 files changed, 361 insertions(+), 334 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/94cf7564/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 15467f2..16ac7ae 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
@@ -32,283 +32,305 @@ import com.amazonaws.ClientConfiguration;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.elasticloadbalancing.AmazonElasticLoadBalancingClient;
import com.amazonaws.services.elasticloadbalancing.model.*;
-import com.amazonaws.services.opsworks.model.AttachElasticLoadBalancerRequest;
-
-public class AWSHelper
-{
+public class AWSHelper {
private String awsAccessKey;
private String awsSecretKey;
- private String httpProxy;
private String availabilityZone;
private BasicAWSCredentials awsCredentials;
private ClientConfiguration clientConfiguration;
-
+
private static final Log log = LogFactory.getLog(AWSHelper.class);
-
- public AWSHelper()
- {
+
+ public AWSHelper() {
// Read values for awsAccessKey, awsSecretKey etc. from config file
// Throw a proper exception / log warning if cant read credentials ?
-
+
awsCredentials = new BasicAWSCredentials(awsAccessKey, awsSecretKey);
clientConfiguration = new ClientConfiguration();
}
-
- /*
- * Creates a load balancer and returns its DNS name.
- * Useful when a new cluster is added.
+
+ /**
+ * Creates a load balancer and returns its DNS name. Useful when a new
+ * cluster is added.
+ *
+ * @param name
+ * @param listeners
+ * @return DNS name of newly created load balancer
*/
- public String createLoadBalancer(String name, List<Listener> listeners)
- {
- try
- {
- CreateLoadBalancerRequest createLoadBalancerRequest = new CreateLoadBalancerRequest(name);
-
+ public String createLoadBalancer(String name, List<Listener> listeners) {
+ try {
+ CreateLoadBalancerRequest createLoadBalancerRequest = new CreateLoadBalancerRequest(
+ name);
+
createLoadBalancerRequest.setListeners(listeners);
-
+
Set<String> availabilityZones = new HashSet<String>();
availabilityZones.add(availabilityZone);
-
+
createLoadBalancerRequest.setAvailabilityZones(availabilityZones);
-
- AmazonElasticLoadBalancingClient lbClient = new AmazonElasticLoadBalancingClient(awsCredentials, clientConfiguration);
-
- CreateLoadBalancerResult clbResult = lbClient.createLoadBalancer(createLoadBalancerRequest);
-
+
+ AmazonElasticLoadBalancingClient lbClient = new AmazonElasticLoadBalancingClient(
+ awsCredentials, clientConfiguration);
+
+ CreateLoadBalancerResult clbResult = lbClient
+ .createLoadBalancer(createLoadBalancerRequest);
+
return clbResult.getDNSName();
- }
- catch(Exception e)
- {
+ } catch (Exception e) {
log.error("Could not create load balancer : " + name + ".");
return null;
}
}
-
- /*
- * Deletes a load balancer with the name provided.
- * Useful when a cluster, with which this load balancer was associated, is removed.
+
+ /**
+ * Deletes the load balancer with the name provided. Useful when a cluster,
+ * with which this load balancer was associated, is removed.
+ *
+ * @param loadBalancerName
*/
- public void deleteLoadBalancer(String loadBalancerName)
- {
- try
- {
+ public void deleteLoadBalancer(String loadBalancerName) {
+ try {
DeleteLoadBalancerRequest deleteLoadBalancerRequest = new DeleteLoadBalancerRequest();
deleteLoadBalancerRequest.setLoadBalancerName(loadBalancerName);
-
- AmazonElasticLoadBalancingClient lbClient = new AmazonElasticLoadBalancingClient(awsCredentials, clientConfiguration);
-
+
+ AmazonElasticLoadBalancingClient lbClient = new AmazonElasticLoadBalancingClient(
+ awsCredentials, clientConfiguration);
+
lbClient.deleteLoadBalancer(deleteLoadBalancerRequest);
- }
- catch(Exception e)
- {
+ } catch (Exception e) {
log.error("Could not delete load balancer : " + loadBalancerName);
}
}
-
- /*
- * Attaches provided instances to the load balancer.
- * Useful when new instances get added to the cluster with which this load balancer is associated.
+
+ /**
+ * Attaches provided instances to the load balancer. Useful when new
+ * instances get added to the cluster with which this load balancer is
+ * associated.
+ *
+ * @param loadBalancerName
+ * @param instances
*/
- public void registerInstancesToLoadBalancer(String loadBalancerName, List<Instance> instances)
- {
- try
- {
- RegisterInstancesWithLoadBalancerRequest registerInstancesWithLoadBalancerRequest = new RegisterInstancesWithLoadBalancerRequest(loadBalancerName, instances);
-
- AmazonElasticLoadBalancingClient lbClient = new AmazonElasticLoadBalancingClient(awsCredentials, clientConfiguration);
-
- RegisterInstancesWithLoadBalancerResult result = lbClient.registerInstancesWithLoadBalancer(registerInstancesWithLoadBalancerRequest);
- }
- catch(Exception e)
- {
- log.error("Could not register instances to load balancer " + loadBalancerName);
+ public void registerInstancesToLoadBalancer(String loadBalancerName,
+ List<Instance> instances) {
+ try {
+ RegisterInstancesWithLoadBalancerRequest registerInstancesWithLoadBalancerRequest = new RegisterInstancesWithLoadBalancerRequest(
+ loadBalancerName, instances);
+
+ AmazonElasticLoadBalancingClient lbClient = new AmazonElasticLoadBalancingClient(
+ awsCredentials, clientConfiguration);
+
+ RegisterInstancesWithLoadBalancerResult result = lbClient
+ .registerInstancesWithLoadBalancer(registerInstancesWithLoadBalancerRequest);
+ } catch (Exception e) {
+ log.error("Could not register instances to load balancer "
+ + loadBalancerName);
}
}
-
- /*
- * Detaches provided instances from the load balancer, associated with some cluster.
- * Useful when instances are removed from the cluster with which this load balancer is associated.
+
+ /**
+ * Detaches provided instances from the load balancer, associated with some
+ * cluster. Useful when instances are removed from the cluster with which
+ * this load balancer is associated.
+ *
+ * @param loadBalancerName
+ * @param instances
*/
- public void deregisterInstancesFromLoadBalancer(String loadBalancerName, List<Instance> instances)
- {
- try
- {
- DeregisterInstancesFromLoadBalancerRequest deregisterInstancesFromLoadBalancerRequest = new DeregisterInstancesFromLoadBalancerRequest(loadBalancerName, instances);
-
- AmazonElasticLoadBalancingClient lbClient = new AmazonElasticLoadBalancingClient(awsCredentials, clientConfiguration);
-
- DeregisterInstancesFromLoadBalancerResult result = lbClient.deregisterInstancesFromLoadBalancer(deregisterInstancesFromLoadBalancerRequest);
- }
- catch(Exception e)
- {
- log.error("Could not de-register instances from load balancer " + loadBalancerName);
+ public void deregisterInstancesFromLoadBalancer(String loadBalancerName,
+ List<Instance> instances) {
+ try {
+ DeregisterInstancesFromLoadBalancerRequest deregisterInstancesFromLoadBalancerRequest = new DeregisterInstancesFromLoadBalancerRequest(
+ loadBalancerName, instances);
+
+ AmazonElasticLoadBalancingClient lbClient = new AmazonElasticLoadBalancingClient(
+ awsCredentials, clientConfiguration);
+
+ DeregisterInstancesFromLoadBalancerResult result = lbClient
+ .deregisterInstancesFromLoadBalancer(deregisterInstancesFromLoadBalancerRequest);
+ } catch (Exception e) {
+ log.error("Could not de-register instances from load balancer "
+ + loadBalancerName);
}
}
-
- /*
- * Returns description of the Load Balancer which is helpful in determining instances, listeners associated with load balancer
+
+ /**
+ * Returns description of the load balancer which is helpful in determining
+ * instances, listeners associated with load balancer
+ *
+ * @param loadBalancerName
+ * @return description of the load balancer
*/
- private LoadBalancerDescription getLoadBalancerDescription(String loadBalancerName)
- {
+ private LoadBalancerDescription getLoadBalancerDescription(
+ String loadBalancerName) {
List<String> loadBalancers = new ArrayList<String>();
-
+
loadBalancers.add(loadBalancerName);
-
- DescribeLoadBalancersRequest describeLoadBalancersRequest = new DescribeLoadBalancersRequest(loadBalancers);
-
- AmazonElasticLoadBalancingClient lbClient = new AmazonElasticLoadBalancingClient(awsCredentials, clientConfiguration);
-
- DescribeLoadBalancersResult result = lbClient.describeLoadBalancers(describeLoadBalancersRequest);
-
- if(result.getLoadBalancerDescriptions() == null || result.getLoadBalancerDescriptions().size() == 0)
+
+ DescribeLoadBalancersRequest describeLoadBalancersRequest = new DescribeLoadBalancersRequest(
+ loadBalancers);
+
+ AmazonElasticLoadBalancingClient lbClient = new AmazonElasticLoadBalancingClient(
+ awsCredentials, clientConfiguration);
+
+ DescribeLoadBalancersResult result = lbClient
+ .describeLoadBalancers(describeLoadBalancersRequest);
+
+ if (result.getLoadBalancerDescriptions() == null
+ || result.getLoadBalancerDescriptions().size() == 0)
return null;
else
return result.getLoadBalancerDescriptions().get(0);
}
-
- /*
- * Returns instances attached to the load balancer.
- * Useful when deciding if all attached instances are required or some should be detached.
+
+ /**
+ * Returns instances attached to the load balancer. Useful when deciding if
+ * all attached instances are required or some should be detached.
+ *
+ * @param loadBalancerName
+ * @return list of instances attached
*/
- public List<Instance> getAttachedInstances(String loadBalancerName)
- {
- try
- {
+ public List<Instance> getAttachedInstances(String loadBalancerName) {
+ try {
LoadBalancerDescription lbDescription = getLoadBalancerDescription(loadBalancerName);
-
- if(lbDescription == null)
- {
- log.warn("Could not find description of load balancer " + loadBalancerName);
- return null;
+
+ if (lbDescription == null) {
+ log.warn("Could not find description of load balancer "
+ + loadBalancerName);
+ return null;
}
-
+
return lbDescription.getInstances();
-
- }
- catch(Exception e)
- {
- log.error("Could not find description of load balancer " + loadBalancerName);
+
+ } catch (Exception e) {
+ log.error("Could not find description of load balancer "
+ + loadBalancerName);
return null;
}
}
-
- /*
- * Adds listeners provided to the load balancer.
- * Useful when service definition is changed, in particular port mappings. So new listeners need to be added.
+
+ /**
+ * Adds listeners provided to the load balancer. Useful when service
+ * definition is changed, in particular port mappings. So new listeners need
+ * to be added.
+ *
+ * @param loadBalancerName
+ * @param listeners
*/
- public void addListenersToLoadBalancer(String loadBalancerName, List<Listener> listeners)
- {
- if(listeners.size() == 0)
+ public void addListenersToLoadBalancer(String loadBalancerName,
+ List<Listener> listeners) {
+ if (listeners.size() == 0)
return;
-
- try
- {
+
+ try {
CreateLoadBalancerListenersRequest createLoadBalancerListenersRequest = new CreateLoadBalancerListenersRequest();
createLoadBalancerListenersRequest.setListeners(listeners);
- createLoadBalancerListenersRequest.setLoadBalancerName(loadBalancerName);
-
- AmazonElasticLoadBalancingClient lbClient = new AmazonElasticLoadBalancingClient(awsCredentials, clientConfiguration);
-
+ createLoadBalancerListenersRequest
+ .setLoadBalancerName(loadBalancerName);
+
+ AmazonElasticLoadBalancingClient lbClient = new AmazonElasticLoadBalancingClient(
+ awsCredentials, clientConfiguration);
+
lbClient.createLoadBalancerListeners(createLoadBalancerListenersRequest);
- }
- catch(Exception e)
- {
- log.error("Could not add listeners to load balancer " + loadBalancerName);
+ } catch (Exception e) {
+ log.error("Could not add listeners to load balancer "
+ + loadBalancerName);
}
}
-
- /*
- * Remove listeners provided from the load balancer.
- * Useful when attached listeners are no longer required.
+
+ /**
+ * Remove listeners provided from the load balancer. Useful when attached
+ * listeners are no longer required.
+ *
+ * @param loadBalancerName
+ * @param listeners
*/
- public void removeListenersFromLoadBalancer(String loadBalancerName, List<Listener> listeners)
- {
- if(listeners.size() == 0)
+ public void removeListenersFromLoadBalancer(String loadBalancerName,
+ List<Listener> listeners) {
+ if (listeners.size() == 0)
return;
-
- try
- {
+
+ try {
DeleteLoadBalancerListenersRequest deleteLoadBalancerListenersRequest = new DeleteLoadBalancerListenersRequest();
- deleteLoadBalancerListenersRequest.setLoadBalancerName(loadBalancerName);
-
+ deleteLoadBalancerListenersRequest
+ .setLoadBalancerName(loadBalancerName);
+
List<Integer> loadBalancerPorts = new ArrayList<Integer>();
-
- for(Listener listener : listeners)
- {
+
+ for (Listener listener : listeners) {
loadBalancerPorts.add(listener.getLoadBalancerPort());
}
-
- deleteLoadBalancerListenersRequest.setLoadBalancerPorts(loadBalancerPorts);
- AmazonElasticLoadBalancingClient lbClient = new AmazonElasticLoadBalancingClient(awsCredentials, clientConfiguration);
-
+ deleteLoadBalancerListenersRequest
+ .setLoadBalancerPorts(loadBalancerPorts);
+
+ AmazonElasticLoadBalancingClient lbClient = new AmazonElasticLoadBalancingClient(
+ awsCredentials, clientConfiguration);
+
lbClient.deleteLoadBalancerListeners(deleteLoadBalancerListenersRequest);
-
- }
- catch(Exception e)
- {
- log.error("Could not remove listeners from load balancer " + loadBalancerName);
+
+ } catch (Exception e) {
+ log.error("Could not remove listeners from load balancer "
+ + loadBalancerName);
}
}
-
- /*
- * Returns all the listeners attached to the load balancer.
- * Useful while deciding if all the listeners are necessary or some should be removed.
+
+ /**
+ * Returns all the listeners attached to the load balancer. Useful while
+ * deciding if all the listeners are necessary or some should be removed.
+ *
+ * @param loadBalancerName
+ * @return list of instances attached to load balancer
*/
- public List<Listener> getAttachedListeners(String loadBalancerName)
- {
- try
- {
+ public List<Listener> getAttachedListeners(String loadBalancerName) {
+ try {
LoadBalancerDescription lbDescription = getLoadBalancerDescription(loadBalancerName);
-
- if(lbDescription == null)
- {
- log.warn("Could not find description of load balancer " + loadBalancerName);
+
+ if (lbDescription == null) {
+ log.warn("Could not find description of load balancer "
+ + loadBalancerName);
return null;
}
-
+
List<Listener> listeners = new ArrayList<Listener>();
-
- List<ListenerDescription> listenerDescriptions = lbDescription.getListenerDescriptions();
-
- for(ListenerDescription listenerDescription : listenerDescriptions)
- {
+
+ List<ListenerDescription> listenerDescriptions = lbDescription
+ .getListenerDescriptions();
+
+ for (ListenerDescription listenerDescription : listenerDescriptions) {
listeners.add(listenerDescription.getListener());
}
-
+
return listeners;
- }
- catch(Exception e)
- {
- log.error("Could not find description of load balancer " + loadBalancerName);
+ } catch (Exception e) {
+ log.error("Could not find description of load balancer "
+ + loadBalancerName);
return null;
}
-
}
-
- /*
- * Returns the Listeners required for the service.
- * Listeners are derived from the proxy port, port and protocol values of the service.
+
+ /**
+ * Returns the Listeners required for the service. Listeners are derived
+ * from the proxy port, port and protocol values of the service.
+ *
+ * @param service
+ * @return list of listeners required for the service
*/
- public List<Listener> getRequiredListeners(Service service)
- {
+ public List<Listener> getRequiredListeners(Service service) {
List<Listener> listeners = new ArrayList<Listener>();
-
- for(Port port : service.getPorts())
- {
+
+ for (Port port : service.getPorts()) {
int instancePort = port.getValue();
int proxyPort = port.getProxy();
String protocol = port.getProtocol();
-
+
Listener listener = new Listener(protocol, proxyPort, instancePort);
-
+
listeners.add(listener);
}
-
+
return listeners;
}
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/94cf7564/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 172c8fc..b3656b4 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
@@ -23,9 +23,6 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
-import java.util.Set;
-
-import javax.management.InstanceAlreadyExistsException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -33,175 +30,183 @@ import org.apache.stratos.load.balancer.common.domain.*;
import org.apache.stratos.load.balancer.extension.api.exception.LoadBalancerExtensionException;
import org.apache.stratos.load.balancer.extension.api.LoadBalancer;
-import com.amazonaws.auth.AWSCredentials;
-import com.amazonaws.auth.BasicAWSCredentials;
-import com.amazonaws.ClientConfiguration;
import com.amazonaws.services.elasticloadbalancing.model.Instance;
import com.amazonaws.services.elasticloadbalancing.model.Listener;
public class AWSLoadBalancer implements LoadBalancer {
-
+
private static final Log log = LogFactory.getLog(AWSLoadBalancer.class);
-
+
// A map <clusterId, load balancer id>
private HashMap<String, String> clusterIdToLoadBalancerMap;
private AWSHelper awsHelper;
-
- public AWSLoadBalancer()
- {
+
+ public AWSLoadBalancer() {
clusterIdToLoadBalancerMap = new HashMap<String, String>();
awsHelper = new AWSHelper();
}
-
- public boolean configure(Topology topology) throws LoadBalancerExtensionException {
-
+
+ public boolean configure(Topology topology)
+ throws LoadBalancerExtensionException {
+
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.getClusterId()))
- {
- // A load balancer is already present for this cluster
- // Get the load balancer and update it.
-
- String loadBalancerName = clusterIdToLoadBalancerMap.get(cluster.getClusterId());
-
- // 1. Get all the instances attached
- // Add/remove instances as necessary
-
- List<Instance> attachedInstances = awsHelper.getAttachedInstances(loadBalancerName);
-
- Collection<Member> clusterInstances = cluster.getMembers();
-
- List<Instance> instancesToAddToLoadBalancer = new ArrayList<Instance>();
-
- for(Member member : clusterInstances)
- {
- // if instance id of member is not in attachedInstances
- // add this to instancesToAddToLoadBalancer
-
-
- }
-
- List<Instance> instancesToRemoveFromLoadBalancer = new ArrayList<Instance>();
-
- for(Instance instance : attachedInstances)
- {
- if(!clusterInstances.contains(instance.getInstanceId()))
- {
- instancesToRemoveFromLoadBalancer.add(instance);
- }
- }
-
- if(instancesToRemoveFromLoadBalancer.size() > 0)
- awsHelper.deregisterInstancesFromLoadBalancer(loadBalancerName, instancesToRemoveFromLoadBalancer);
-
- if(instancesToAddToLoadBalancer.size() > 0)
- awsHelper.registerInstancesToLoadBalancer(loadBalancerName, instancesToAddToLoadBalancer);
-
-
- // 2. Get all the listeners
- // Add/Remove listeners as necessary
-
- // Is it really necessary to add/remove listeners from a lb to a cluster
- // Need to add only if a cluster can be used for more than one service (because a service my get added later)
- // or service port mappings may change
-
- // Need to remove only if ... same for above reason
-
- List<Listener> attachedListeners = awsHelper.getAttachedListeners(loadBalancerName);
-
- List<Listener> listenersToAddToLoadBalancer = new ArrayList<Listener>();
-
- for(Listener listener : listenersForThisService)
- {
- // Need to check if Listener class supports equals method or not
-
- // if listener required for this service is not in attachedListeners
- // add this to listenersToAddToLoadBalancer
- }
-
- List<Listener> listenersToRemoveFromLoadBalancer = new ArrayList<Listener>();
-
- for(Listener listener : attachedListeners)
- {
- // Need to check if Listener class supports equals method or not
-
- if(!listenersForThisService.contains(listener))
- {
- listenersToRemoveFromLoadBalancer.add(listener);
- }
- }
-
- if(listenersToRemoveFromLoadBalancer.size() > 0)
- awsHelper.removeListenersFromLoadBalancer(loadBalancerName, listenersToRemoveFromLoadBalancer);
-
- if(listenersToAddToLoadBalancer.size() > 0)
- awsHelper.addListenersToLoadBalancer(loadBalancerName, listenersToAddToLoadBalancer);
-
- }
- else
- {
- // Create a new load balancer for this cluster
-
- String loadBalancerName = service.getServiceName() + "-" + cluster.getClusterId();
-
- String loadBalancerDNSName = awsHelper.createLoadBalancer(loadBalancerName, listenersForThisService);
-
- // register instances to LB
-
- List<Instance> instances = new ArrayList<Instance>();
-
- for(Member m : cluster.getMembers())
- {
- String instanceId = ""; // of member // after making changes suggested in mail
-
- Instance instance = new Instance();
- instance.setInstanceId(instanceId);
-
- instances.add(instance);
- }
-
- awsHelper.registerInstancesToLoadBalancer(loadBalancerName, instances);
-
- // Create domain mappings
- }
-
- }
- }
-
+
+ List<Listener> listenersForThisService = awsHelper
+ .getRequiredListeners(service);
+
+ for (Cluster cluster : service.getClusters()) {
+
+ // cluster.getHostNames()
+
+ // Check if a load balancer is created for this cluster
+
+ if (clusterIdToLoadBalancerMap.containsKey(cluster
+ .getClusterId())) {
+ // A load balancer is already present for this cluster
+ // Get the load balancer and update it.
+
+ String loadBalancerName = clusterIdToLoadBalancerMap
+ .get(cluster.getClusterId());
+
+ // 1. Get all the instances attached
+ // Add/remove instances as necessary
+
+ List<Instance> attachedInstances = awsHelper
+ .getAttachedInstances(loadBalancerName);
+
+ Collection<Member> clusterInstances = cluster.getMembers();
+
+ List<Instance> instancesToAddToLoadBalancer = new ArrayList<Instance>();
+
+ for (Member member : clusterInstances) {
+ // if instance id of member is not in attachedInstances
+ // add this to instancesToAddToLoadBalancer
+
+ }
+
+ List<Instance> instancesToRemoveFromLoadBalancer = new ArrayList<Instance>();
+
+ for (Instance instance : attachedInstances) {
+ if (!clusterInstances
+ .contains(instance.getInstanceId())) {
+ instancesToRemoveFromLoadBalancer.add(instance);
+ }
+ }
+
+ if (instancesToRemoveFromLoadBalancer.size() > 0)
+ awsHelper.deregisterInstancesFromLoadBalancer(
+ loadBalancerName,
+ instancesToRemoveFromLoadBalancer);
+
+ if (instancesToAddToLoadBalancer.size() > 0)
+ awsHelper.registerInstancesToLoadBalancer(
+ loadBalancerName, instancesToAddToLoadBalancer);
+
+ // 2. Get all the listeners
+ // Add/Remove listeners as necessary
+
+ // Is it really necessary to add/remove listeners from a lb
+ // to a cluster
+ // Need to add only if a cluster can be used for more than
+ // one service (because a service my get added later)
+ // or service port mappings may change
+
+ // Need to remove only if ... same for above reason
+
+ List<Listener> attachedListeners = awsHelper
+ .getAttachedListeners(loadBalancerName);
+
+ List<Listener> listenersToAddToLoadBalancer = new ArrayList<Listener>();
+
+ for (Listener listener : listenersForThisService) {
+ // Need to check if Listener class supports equals
+ // method or not
+
+ // if listener required for this service is not in
+ // attachedListeners
+ // add this to listenersToAddToLoadBalancer
+ }
+
+ List<Listener> listenersToRemoveFromLoadBalancer = new ArrayList<Listener>();
+
+ for (Listener listener : attachedListeners) {
+ // Need to check if Listener class supports equals
+ // method or not
+
+ if (!listenersForThisService.contains(listener)) {
+ listenersToRemoveFromLoadBalancer.add(listener);
+ }
+ }
+
+ if (listenersToRemoveFromLoadBalancer.size() > 0)
+ awsHelper.removeListenersFromLoadBalancer(
+ loadBalancerName,
+ listenersToRemoveFromLoadBalancer);
+
+ if (listenersToAddToLoadBalancer.size() > 0)
+ awsHelper.addListenersToLoadBalancer(loadBalancerName,
+ listenersToAddToLoadBalancer);
+
+ // Update domain mappings
+
+ } else {
+ // Create a new load balancer for this cluster
+
+ String loadBalancerName = service.getServiceName() + "-"
+ + cluster.getClusterId();
+
+ String loadBalancerDNSName = awsHelper.createLoadBalancer(
+ loadBalancerName, listenersForThisService);
+
+ // register instances to LB
+
+ List<Instance> instances = new ArrayList<Instance>();
+
+ for (Member m : cluster.getMembers()) {
+ String instanceId = ""; // of member // after making
+ // changes suggested in mail
+
+ Instance instance = new Instance();
+ instance.setInstanceId(instanceId);
+
+ instances.add(instance);
+ }
+
+ awsHelper.registerInstancesToLoadBalancer(loadBalancerName,
+ instances);
+
+ // Create domain mappings
+ }
+
+ }
+ }
+
// Find out clusters which were present earlier but are not now.
// Delete load balancers associated with those clusters.
-
+
return true;
}
-
+
public void start() throws LoadBalancerExtensionException {
-
+
log.info("Started AWS load balancer extension.");
}
-
+
public void reload() throws LoadBalancerExtensionException {
// Check what is appropriate to do here.
}
-
- public void stop() throws LoadBalancerExtensionException
- {
+
+ public void stop() throws LoadBalancerExtensionException {
// Remove all load balancers
-
- for(String loadBalancerName : clusterIdToLoadBalancerMap.values())
- {
+
+ for (String loadBalancerName : clusterIdToLoadBalancerMap.values()) {
// remove load balancer
awsHelper.deleteLoadBalancer(loadBalancerName);
-
+
// Check what all needs to be done
}
-
+
// Remove domain mappings
- }
+ }
}