Setting endpoint, adding logging for AWS API Calls. Deleting load balancer for 
inactive cluster.


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

Branch: refs/heads/gsoc-projects-2015
Commit: 31acd2a4401ac9aea23e1b8d2b1f476666dd80e7
Parents: 7ea76ec
Author: swapnilpatilRajaram <[email protected]>
Authored: Sat Jul 18 16:59:12 2015 +0000
Committer: swapnilpatilRajaram <[email protected]>
Committed: Sat Jul 18 16:59:12 2015 +0000

----------------------------------------------------------------------
 .../apache/stratos/aws/extension/AWSHelper.java | 165 ++++++++-----
 .../stratos/aws/extension/AWSLoadBalancer.java  | 239 +++++++++++--------
 2 files changed, 244 insertions(+), 160 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/31acd2a4/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 438289a..924d3bd 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
@@ -38,10 +38,6 @@ import com.amazonaws.auth.BasicAWSCredentials;
 import 
com.amazonaws.services.elasticloadbalancing.AmazonElasticLoadBalancingClient;
 import com.amazonaws.services.elasticloadbalancing.model.*;
 
-/**
- * @author swapnil
- * 
- */
 public class AWSHelper {
        private String awsAccessKey;
        private String awsSecretKey;
@@ -51,6 +47,8 @@ public class AWSHelper {
        private BasicAWSCredentials awsCredentials;
        private ClientConfiguration clientConfiguration;
 
+       AmazonElasticLoadBalancingClient lbClient;
+
        private static final Log log = LogFactory.getLog(AWSHelper.class);
 
        public AWSHelper() throws LoadBalancerExtensionException {
@@ -76,6 +74,15 @@ public class AWSHelper {
                        this.availabilityZone = properties
                                        
.getProperty(Constants.AVAILABILITY_ZONE_KEY);
                        this.region = 
properties.getProperty(Constants.REGION_KEY);
+
+                       awsCredentials = new BasicAWSCredentials(awsAccessKey, 
awsSecretKey);
+                       clientConfiguration = new ClientConfiguration();
+
+                       lbClient = new 
AmazonElasticLoadBalancingClient(awsCredentials,
+                                       clientConfiguration);
+                       lbClient.setEndpoint("elasticloadbalancing." + 
this.region
+                                       + ".amazonaws.com");
+
                } catch (IOException e) {
                        log.error("Error reading aws configuration file.");
                        throw new LoadBalancerExtensionException(
@@ -87,9 +94,6 @@ public class AWSHelper {
                                log.warn("Failed to close input stream to aws 
configuration file.");
                        }
                }
-
-               awsCredentials = new BasicAWSCredentials(awsAccessKey, 
awsSecretKey);
-               clientConfiguration = new ClientConfiguration();
        }
 
        /**
@@ -101,31 +105,32 @@ public class AWSHelper {
         * @return DNS name of newly created load balancer
         */
        public String createLoadBalancer(String name, List<Listener> listeners) 
{
-               try {
-                       CreateLoadBalancerRequest createLoadBalancerRequest = 
new CreateLoadBalancerRequest(
-                                       name);
 
-                       createLoadBalancerRequest.setListeners(listeners);
+               log.info("Creating load balancer " + name);
 
-                       Set<String> availabilityZones = new HashSet<String>();
-                       availabilityZones.add(availabilityZone);
+               CreateLoadBalancerRequest createLoadBalancerRequest = new 
CreateLoadBalancerRequest(
+                               name);
 
-                       
createLoadBalancerRequest.setAvailabilityZones(availabilityZones);
+               createLoadBalancerRequest.setListeners(listeners);
 
-                       AmazonElasticLoadBalancingClient lbClient = new 
AmazonElasticLoadBalancingClient(
-                                       awsCredentials, clientConfiguration);
-                       lbClient.setEndpoint("elasticloadbalancing." + 
this.region
-                                       + ".amazonaws.com");
+               Set<String> availabilityZones = new HashSet<String>();
+               availabilityZones.add(availabilityZone);
+
+               
createLoadBalancerRequest.setAvailabilityZones(availabilityZones);
+
+               try {
 
                        CreateLoadBalancerResult clbResult = lbClient
                                        
.createLoadBalancer(createLoadBalancerRequest);
 
                        return clbResult.getDNSName();
+
                } catch (Exception e) {
                        log.error("Could not create load balancer : " + name + 
".");
                        e.printStackTrace();
                        return null;
                }
+
        }
 
        /**
@@ -135,16 +140,19 @@ public class AWSHelper {
         * @param loadBalancerName
         */
        public void deleteLoadBalancer(String loadBalancerName) {
-               try {
-                       DeleteLoadBalancerRequest deleteLoadBalancerRequest = 
new DeleteLoadBalancerRequest();
-                       
deleteLoadBalancerRequest.setLoadBalancerName(loadBalancerName);
 
-                       AmazonElasticLoadBalancingClient lbClient = new 
AmazonElasticLoadBalancingClient(
-                                       awsCredentials, clientConfiguration);
+               log.info("Deleting load balancer " + loadBalancerName);
+
+               DeleteLoadBalancerRequest deleteLoadBalancerRequest = new 
DeleteLoadBalancerRequest();
+               deleteLoadBalancerRequest.setLoadBalancerName(loadBalancerName);
 
+               try {
                        lbClient.deleteLoadBalancer(deleteLoadBalancerRequest);
+                       return;
+
                } catch (Exception e) {
                        log.error("Could not delete load balancer : " + 
loadBalancerName);
+                       e.printStackTrace();
                }
        }
 
@@ -158,18 +166,23 @@ public class AWSHelper {
         */
        public void registerInstancesToLoadBalancer(String loadBalancerName,
                        List<Instance> instances) {
-               try {
-                       RegisterInstancesWithLoadBalancerRequest 
registerInstancesWithLoadBalancerRequest = new 
RegisterInstancesWithLoadBalancerRequest(
-                                       loadBalancerName, instances);
 
-                       AmazonElasticLoadBalancingClient lbClient = new 
AmazonElasticLoadBalancingClient(
-                                       awsCredentials, clientConfiguration);
+               log.info("Attaching instance " + instances.get(0)
+                               + " to load balancer + " + loadBalancerName);
+
+               RegisterInstancesWithLoadBalancerRequest 
registerInstancesWithLoadBalancerRequest = new 
RegisterInstancesWithLoadBalancerRequest(
+                               loadBalancerName, instances);
+
+               try {
 
                        RegisterInstancesWithLoadBalancerResult result = 
lbClient
                                        
.registerInstancesWithLoadBalancer(registerInstancesWithLoadBalancerRequest);
+                       return;
+
                } catch (Exception e) {
                        log.error("Could not register instances to load 
balancer "
                                        + loadBalancerName);
+                       e.printStackTrace();
                }
        }
 
@@ -183,18 +196,22 @@ public class AWSHelper {
         */
        public void deregisterInstancesFromLoadBalancer(String loadBalancerName,
                        List<Instance> instances) {
-               try {
-                       DeregisterInstancesFromLoadBalancerRequest 
deregisterInstancesFromLoadBalancerRequest = new 
DeregisterInstancesFromLoadBalancerRequest(
-                                       loadBalancerName, instances);
 
-                       AmazonElasticLoadBalancingClient lbClient = new 
AmazonElasticLoadBalancingClient(
-                                       awsCredentials, clientConfiguration);
+               log.info("Detaching instance " + instances.get(0)
+                               + " from load balancer + " + loadBalancerName);
+
+               DeregisterInstancesFromLoadBalancerRequest 
deregisterInstancesFromLoadBalancerRequest = new 
DeregisterInstancesFromLoadBalancerRequest(
+                               loadBalancerName, instances);
 
+               try {
                        DeregisterInstancesFromLoadBalancerResult result = 
lbClient
                                        
.deregisterInstancesFromLoadBalancer(deregisterInstancesFromLoadBalancerRequest);
+                       return;
+
                } catch (Exception e) {
                        log.error("Could not de-register instances from load 
balancer "
                                        + loadBalancerName);
+                       e.printStackTrace();
                }
        }
 
@@ -207,6 +224,7 @@ public class AWSHelper {
         */
        private LoadBalancerDescription getLoadBalancerDescription(
                        String loadBalancerName) {
+
                List<String> loadBalancers = new ArrayList<String>();
 
                loadBalancers.add(loadBalancerName);
@@ -214,17 +232,21 @@ public class AWSHelper {
                DescribeLoadBalancersRequest describeLoadBalancersRequest = new 
DescribeLoadBalancersRequest(
                                loadBalancers);
 
-               AmazonElasticLoadBalancingClient lbClient = new 
AmazonElasticLoadBalancingClient(
-                               awsCredentials, clientConfiguration);
-
-               DescribeLoadBalancersResult result = lbClient
-                               
.describeLoadBalancers(describeLoadBalancersRequest);
+               try {
+                       DescribeLoadBalancersResult result = lbClient
+                                       
.describeLoadBalancers(describeLoadBalancersRequest);
 
-               if (result.getLoadBalancerDescriptions() == null
-                               || result.getLoadBalancerDescriptions().size() 
== 0)
+                       if (result.getLoadBalancerDescriptions() == null
+                                       || 
result.getLoadBalancerDescriptions().size() == 0)
+                               return null;
+                       else
+                               return 
result.getLoadBalancerDescriptions().get(0);
+               } catch (Exception e) {
+                       log.error("Could not find description of load balancer "
+                                       + loadBalancerName);
+                       e.printStackTrace();
                        return null;
-               else
-                       return result.getLoadBalancerDescriptions().get(0);
+               }
        }
 
        /**
@@ -247,8 +269,9 @@ public class AWSHelper {
                        return lbDescription.getInstances();
 
                } catch (Exception e) {
-                       log.error("Could not find description of load balancer "
+                       log.error("Could not find instances attached  load 
balancer "
                                        + loadBalancerName);
+                       e.printStackTrace();
                        return null;
                }
        }
@@ -266,19 +289,20 @@ public class AWSHelper {
                if (listeners.size() == 0)
                        return;
 
-               try {
-                       CreateLoadBalancerListenersRequest 
createLoadBalancerListenersRequest = new CreateLoadBalancerListenersRequest();
-                       
createLoadBalancerListenersRequest.setListeners(listeners);
-                       createLoadBalancerListenersRequest
-                                       .setLoadBalancerName(loadBalancerName);
+               CreateLoadBalancerListenersRequest 
createLoadBalancerListenersRequest = new CreateLoadBalancerListenersRequest();
+               createLoadBalancerListenersRequest.setListeners(listeners);
+               createLoadBalancerListenersRequest
+                               .setLoadBalancerName(loadBalancerName);
 
-                       AmazonElasticLoadBalancingClient lbClient = new 
AmazonElasticLoadBalancingClient(
-                                       awsCredentials, clientConfiguration);
+               try {
 
                        
lbClient.createLoadBalancerListeners(createLoadBalancerListenersRequest);
+                       return;
+
                } catch (Exception e) {
                        log.error("Could not add listeners to load balancer "
                                        + loadBalancerName);
+                       e.printStackTrace();
                }
        }
 
@@ -294,28 +318,28 @@ public class AWSHelper {
                if (listeners.size() == 0)
                        return;
 
-               try {
-                       DeleteLoadBalancerListenersRequest 
deleteLoadBalancerListenersRequest = new DeleteLoadBalancerListenersRequest();
-                       deleteLoadBalancerListenersRequest
-                                       .setLoadBalancerName(loadBalancerName);
+               DeleteLoadBalancerListenersRequest 
deleteLoadBalancerListenersRequest = new DeleteLoadBalancerListenersRequest();
+               deleteLoadBalancerListenersRequest
+                               .setLoadBalancerName(loadBalancerName);
 
-                       List<Integer> loadBalancerPorts = new 
ArrayList<Integer>();
+               List<Integer> loadBalancerPorts = new ArrayList<Integer>();
 
-                       for (Listener listener : listeners) {
-                               
loadBalancerPorts.add(listener.getLoadBalancerPort());
-                       }
+               for (Listener listener : listeners) {
+                       loadBalancerPorts.add(listener.getLoadBalancerPort());
+               }
 
-                       deleteLoadBalancerListenersRequest
-                                       
.setLoadBalancerPorts(loadBalancerPorts);
+               deleteLoadBalancerListenersRequest
+                               .setLoadBalancerPorts(loadBalancerPorts);
 
-                       AmazonElasticLoadBalancingClient lbClient = new 
AmazonElasticLoadBalancingClient(
-                                       awsCredentials, clientConfiguration);
+               try {
 
                        
lbClient.deleteLoadBalancerListeners(deleteLoadBalancerListenersRequest);
+                       return;
 
                } catch (Exception e) {
                        log.error("Could not remove listeners from load 
balancer "
                                        + loadBalancerName);
+                       e.printStackTrace();
                }
        }
 
@@ -368,9 +392,11 @@ public class AWSHelper {
                for (Port port : service.getPorts()) {
                        int instancePort = port.getValue();
                        int proxyPort = port.getProxy();
-                       String protocol = port.getProtocol();
+                       String protocol = port.getProtocol().toUpperCase();
+                       String instanceProtocol = protocol;
 
                        Listener listener = new Listener(protocol, proxyPort, 
instancePort);
+                       listener.setInstanceProtocol(instanceProtocol);
 
                        listeners.add(listener);
                }
@@ -393,4 +419,17 @@ public class AWSHelper {
 
                return name;
        }
+
+       /**
+        * @param memberInstanceName
+        * @return
+        */
+       public String getAWSInstanceName(final String memberInstanceName) {
+               if (memberInstanceName.contains("/")) {
+                       return memberInstanceName
+                                       
.substring(memberInstanceName.indexOf("/") + 1);
+               } else {
+                       return memberInstanceName;
+               }
+       }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/31acd2a4/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 8aafce2..99d6906 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
@@ -22,6 +22,7 @@ package org.apache.stratos.aws.extension;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 
 import org.apache.commons.logging.Log;
@@ -52,149 +53,193 @@ public class AWSLoadBalancer implements LoadBalancer {
 
                log.info("AWS load balancer extension re-configured.");
 
-               for (Service service : topology.getServices()) {
+               try {
+                       // Thread.sleep(10000);
 
-                       List<Listener> listenersForThisService = awsHelper
-                                       .getRequiredListeners(service);
+                       HashSet<String> activeClusters = new HashSet<String>();
 
-                       for (Cluster cluster : service.getClusters()) {
+                       for (Service service : topology.getServices()) {
 
-                               // cluster.getHostNames()
+                               List<Listener> listenersForThisService = 
awsHelper
+                                               .getRequiredListeners(service);
 
-                               // Check if a load balancer is created for this 
cluster
+                               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.
 
-                               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());
 
-                                       String loadBalancerName = 
clusterIdToLoadBalancerMap
-                                                       
.get(cluster.getClusterId());
+                                               // 1. Get all the instances 
attached
+                                               // Add/remove instances as 
necessary
 
-                                       // 1. Get all the instances attached
-                                       // Add/remove instances as necessary
+                                               List<Instance> 
attachedInstances = awsHelper
+                                                               
.getAttachedInstances(loadBalancerName);
 
-                                       List<Instance> attachedInstances = 
awsHelper
-                                                       
.getAttachedInstances(loadBalancerName);
+                                               Collection<Member> 
clusterInstances = cluster
+                                                               .getMembers();
 
-                                       Collection<Member> clusterInstances = 
cluster.getMembers();
+                                               if (clusterInstances.size() > 
0) {
+                                                       
activeClusters.add(cluster.getClusterId());
+                                               } else {
+                                                       break;
+                                               }
 
-                                       List<Instance> 
instancesToAddToLoadBalancer = new ArrayList<Instance>();
+                                               List<Instance> 
instancesToAddToLoadBalancer = new ArrayList<Instance>();
 
-                                       for (Member member : clusterInstances) {
-                                               // if instance id of member is 
not in attachedInstances
-                                               // add this to 
instancesToAddToLoadBalancer
+                                               for (Member member : 
clusterInstances) {
+                                                       // if instance id of 
member is not in
+                                                       // attachedInstances
+                                                       // add this to 
instancesToAddToLoadBalancer
 
-                                               System.out.println("Instance Id 
:");
-                                               
System.out.println(member.getInstanceId());
-                                               
-                                               Instance instance = new 
Instance(member.getInstanceId());
+                                                       
System.out.println("Instance Id : "
+                                                                       + 
member.getInstanceId());
+                                                       System.out.println("New 
instance id : "
+                                                                       + 
awsHelper.getAWSInstanceName(member
+                                                                               
        .getInstanceId()));
 
-                                               if 
(!attachedInstances.contains(instance)) {
-                                                       
instancesToAddToLoadBalancer.add(instance);
-                                               }
-                                               
-                                       }
+                                                       Instance instance = new 
Instance(
+                                                                       
awsHelper.getAWSInstanceName(member
+                                                                               
        .getInstanceId()));
 
-                                       List<Instance> 
instancesToRemoveFromLoadBalancer = new ArrayList<Instance>();
+                                                       if (attachedInstances 
== null
+                                                                       || 
!attachedInstances.contains(instance)) {
+                                                               
instancesToAddToLoadBalancer.add(instance);
+                                                       }
 
-                                       for (Instance instance : 
attachedInstances) {
-                                               if (!clusterInstances
-                                                               
.contains(instance.getInstanceId())) {
-                                                       
instancesToRemoveFromLoadBalancer.add(instance);
                                                }
-                                       }
 
-                                       if 
(instancesToRemoveFromLoadBalancer.size() > 0)
-                                               
awsHelper.deregisterInstancesFromLoadBalancer(
-                                                               
loadBalancerName,
-                                                               
instancesToRemoveFromLoadBalancer);
+                                               List<Instance> 
instancesToRemoveFromLoadBalancer = new ArrayList<Instance>();
 
-                                       if (instancesToAddToLoadBalancer.size() 
> 0)
-                                               
awsHelper.registerInstancesToLoadBalancer(
-                                                               
loadBalancerName, instancesToAddToLoadBalancer);
+                                               for (Instance instance : 
attachedInstances) {
+                                                       if 
(!clusterInstances.contains(instance
+                                                                       
.getInstanceId())) {
+                                                               
instancesToRemoveFromLoadBalancer.add(instance);
+                                                       }
+                                               }
 
-                                       // 2. Get all the listeners
-                                       // Add/Remove listeners as necessary
+                                               if 
(instancesToRemoveFromLoadBalancer.size() > 0)
+                                                       
awsHelper.deregisterInstancesFromLoadBalancer(
+                                                                       
loadBalancerName,
+                                                                       
instancesToRemoveFromLoadBalancer);
 
-                                       // 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
+                                               if 
(instancesToAddToLoadBalancer.size() > 0)
+                                                       
awsHelper.registerInstancesToLoadBalancer(
+                                                                       
loadBalancerName,
+                                                                       
instancesToAddToLoadBalancer);
 
-                                       // Need to remove only if ... same for 
above reason
+                                               // 2. Get all the listeners
+                                               // Add/Remove listeners as 
necessary
 
-                                       List<Listener> attachedListeners = 
awsHelper
-                                                       
.getAttachedListeners(loadBalancerName);
+                                               // 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
 
-                                       List<Listener> 
listenersToAddToLoadBalancer = new ArrayList<Listener>();
+                                               // Need to remove only if ... 
same for above reason
 
-                                       for (Listener listener : 
listenersForThisService) {
-                                               // Need to check if Listener 
class supports equals
-                                               // method or not
+                                               List<Listener> 
attachedListeners = awsHelper
+                                                               
.getAttachedListeners(loadBalancerName);
 
-                                               // if listener required for 
this service is not in
-                                               // attachedListeners
-                                               // add this to 
listenersToAddToLoadBalancer
-                                       }
+                                               List<Listener> 
listenersToAddToLoadBalancer = new ArrayList<Listener>();
 
-                                       List<Listener> 
listenersToRemoveFromLoadBalancer = new ArrayList<Listener>();
+                                               for (Listener listener : 
listenersForThisService) {
+                                                       if (attachedListeners 
== null
+                                                                       || 
!attachedListeners.contains(listener)) {
+                                                               
listenersToAddToLoadBalancer.add(listener);
+                                                       }
+                                               }
 
-                                       for (Listener listener : 
attachedListeners) {
-                                               // Need to check if Listener 
class supports equals
-                                               // method or not
+                                               List<Listener> 
listenersToRemoveFromLoadBalancer = new ArrayList<Listener>();
 
-                                               if 
(!listenersForThisService.contains(listener)) {
-                                                       
listenersToRemoveFromLoadBalancer.add(listener);
+                                               for (Listener listener : 
attachedListeners) {
+                                                       if 
(!listenersForThisService.contains(listener)) {
+                                                               
listenersToRemoveFromLoadBalancer.add(listener);
+                                                       }
                                                }
-                                       }
 
-                                       if 
(listenersToRemoveFromLoadBalancer.size() > 0)
-                                               
awsHelper.removeListenersFromLoadBalancer(
-                                                               
loadBalancerName,
-                                                               
listenersToRemoveFromLoadBalancer);
+                                               if 
(listenersToRemoveFromLoadBalancer.size() > 0)
+                                                       
awsHelper.removeListenersFromLoadBalancer(
+                                                                       
loadBalancerName,
+                                                                       
listenersToRemoveFromLoadBalancer);
 
-                                       if (listenersToAddToLoadBalancer.size() 
> 0)
-                                               
awsHelper.addListenersToLoadBalancer(loadBalancerName,
-                                                               
listenersToAddToLoadBalancer);
+                                               if 
(listenersToAddToLoadBalancer.size() > 0)
+                                                       
awsHelper.addListenersToLoadBalancer(
+                                                                       
loadBalancerName,
+                                                                       
listenersToAddToLoadBalancer);
 
-                                       // Update domain mappings
+                                               // Update domain mappings
 
-                               } else {
-                                       // Create a new load balancer for this 
cluster
+                                       } else {
+                                               // Create a new load balancer 
for this cluster
+                                               Collection<Member> 
clusterInstances = cluster
+                                                               .getMembers();
 
-                                       String loadBalancerName = 
awsHelper.getLoadBalancerName(cluster.getClusterId());
+                                               if (clusterInstances.size() == 
0)
+                                                       break;
 
-                                       String loadBalancerDNSName = 
awsHelper.createLoadBalancer(
-                                                       loadBalancerName, 
listenersForThisService);
+                                               String loadBalancerName = 
awsHelper
+                                                               
.getLoadBalancerName(cluster.getClusterId());
 
-                                       // register instances to LB
+                                               String loadBalancerDNSName = 
awsHelper
+                                                               
.createLoadBalancer(loadBalancerName,
+                                                                               
listenersForThisService);
 
-                                       List<Instance> instances = new 
ArrayList<Instance>();
+                                               log.info("Load balancer '" + 
loadBalancerDNSName
+                                                               + "' created 
for cluster '"
+                                                               + 
cluster.getClusterId());
 
-                                       for (Member member : 
cluster.getMembers()) {
-                                               String instanceId = 
member.getInstanceId();
+                                               // register instances to LB
+                                               List<Instance> instances = new 
ArrayList<Instance>();
 
-                                               System.out.println("Instance id 
: " + instanceId);
-                                               
-                                               Instance instance = new 
Instance();
-                                               
instance.setInstanceId(instanceId);
+                                               for (Member member : 
clusterInstances) {
+                                                       String instanceId = 
member.getInstanceId();
 
-                                               instances.add(instance);
-                                       }
+                                                       
System.out.println("Instance id : " + instanceId);
+                                                       System.out.println("New 
instance id : "
+                                                                       + 
awsHelper.getAWSInstanceName(instanceId));
 
-                                       
awsHelper.registerInstancesToLoadBalancer(loadBalancerName,
-                                                       instances);
+                                                       Instance instance = new 
Instance();
+                                                       
instance.setInstanceId(awsHelper
+                                                                       
.getAWSInstanceName(instanceId));
 
-                                       // Create domain mappings
+                                                       instances.add(instance);
+                                               }
+
+                                               
awsHelper.registerInstancesToLoadBalancer(
+                                                               
loadBalancerName, instances);
+
+                                               // Create domain mappings
+
+                                               
clusterIdToLoadBalancerMap.put(cluster.getClusterId(),
+                                                               
loadBalancerName);
+                                               
activeClusters.add(cluster.getClusterId());
+                                       }
                                }
+                       }
+
+                       // Find out clusters which were present earlier but are 
not now.
+                       // Delete load balancers associated with those clusters.
 
+                       for (String clusterId : 
clusterIdToLoadBalancerMap.keySet()) {
+                               if (!activeClusters.contains(clusterId)) {
+                                       // Remove load balancer for that 
cluster.
+                                       
awsHelper.deleteLoadBalancer(clusterIdToLoadBalancerMap
+                                                       .get(clusterId));
+                                       
clusterIdToLoadBalancerMap.remove(clusterId);
+                               }
                        }
-               }
 
-               // Find out clusters which were present earlier but are not now.
-               // Delete load balancers associated with those clusters.
+                       activeClusters.clear();
+               } catch (Exception e) {
+                       throw new LoadBalancerExtensionException(e);
+               }
 
                return true;
        }

Reply via email to