You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by im...@apache.org on 2015/03/05 10:23:23 UTC

[3/3] stratos git commit: Updating load balancer extension according to the new topology provider model

Updating load balancer extension according to the new topology provider model


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

Branch: refs/heads/master
Commit: d8d7ca445b8bcde9ef631f359d1106adf2df7d13
Parents: d6fa101
Author: Imesh Gunaratne <im...@apache.org>
Authored: Thu Mar 5 14:52:20 2015 +0530
Committer: Imesh Gunaratne <im...@apache.org>
Committed: Thu Mar 5 14:52:54 2015 +0530

----------------------------------------------------------------------
 .../load/balancer/common/domain/Service.java    | 36 +++++++-
 ...LoadBalancerCommonTopologyEventReceiver.java | 26 +++++-
 .../common/topology/TopologyProvider.java       | 92 ++++++++++++++------
 .../balancer/extension/api/LoadBalancer.java    |  7 +-
 .../extension/api/LoadBalancerExtension.java    | 18 ++--
 .../conf/LoadBalancerConfiguration.java         | 13 ++-
 .../stratos/haproxy/extension/HAProxy.java      | 86 +++++++++---------
 .../haproxy/extension/HAProxyConfigWriter.java  | 74 +++++-----------
 8 files changed, 213 insertions(+), 139 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/d8d7ca44/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/domain/Service.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/domain/Service.java b/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/domain/Service.java
index 579035b..116078e 100644
--- a/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/domain/Service.java
+++ b/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/domain/Service.java
@@ -20,6 +20,7 @@
 package org.apache.stratos.load.balancer.common.domain;
 
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
@@ -28,15 +29,15 @@ import java.util.concurrent.ConcurrentHashMap;
  */
 public class Service {
     private final String serviceName;
-    private final boolean isMultiTenant;
     // Key: Cluster.clusterId
     private Map<String, Cluster> clusterIdClusterMap;
+    private Map<Integer, Port> portMap;
     private boolean multiTenant;
 
-    public Service(String serviceName, boolean isMultiTenant) {
+    public Service(String serviceName) {
         this.serviceName = serviceName;
         this.clusterIdClusterMap = new ConcurrentHashMap<String, Cluster>();
-        this.isMultiTenant = isMultiTenant;
+        this.portMap = new ConcurrentHashMap<Integer, Port>();
     }
 
     public String getServiceName() {
@@ -70,4 +71,33 @@ public class Service {
     public void setMultiTenant(boolean multiTenant) {
         this.multiTenant = multiTenant;
     }
+
+    public Collection<Port> getPorts() {
+        return Collections.unmodifiableCollection(portMap.values());
+    }
+
+    public Port getPort(int proxy) {
+        if(portMap.containsKey(proxy)) {
+            return portMap.get(proxy);
+        }
+        return null;
+    }
+
+    public void addPort(Port port) {
+        this.portMap.put(port.getProxy(), port);
+    }
+
+    public void addPorts(Collection<Port> ports) {
+        for(Port port : ports) {
+            addPort(port);
+        }
+    }
+
+    public void removePort(Port port) {
+        this.portMap.remove(port.getProxy());
+    }
+
+    public boolean portExists(Port port) {
+        return this.portMap.containsKey(port.getProxy());
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/d8d7ca44/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/event/receivers/LoadBalancerCommonTopologyEventReceiver.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/event/receivers/LoadBalancerCommonTopologyEventReceiver.java b/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/event/receivers/LoadBalancerCommonTopologyEventReceiver.java
index 326deee..1a4a4b7 100644
--- a/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/event/receivers/LoadBalancerCommonTopologyEventReceiver.java
+++ b/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/event/receivers/LoadBalancerCommonTopologyEventReceiver.java
@@ -22,10 +22,7 @@ package org.apache.stratos.load.balancer.common.event.receivers;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.load.balancer.common.topology.TopologyProvider;
-import org.apache.stratos.messaging.domain.topology.Cluster;
-import org.apache.stratos.messaging.domain.topology.Member;
-import org.apache.stratos.messaging.domain.topology.MemberStatus;
-import org.apache.stratos.messaging.domain.topology.Service;
+import org.apache.stratos.messaging.domain.topology.*;
 import org.apache.stratos.messaging.event.Event;
 import org.apache.stratos.messaging.event.topology.*;
 import org.apache.stratos.messaging.listener.topology.*;
@@ -263,6 +260,11 @@ public class LoadBalancerCommonTopologyEventReceiver extends TopologyEventReceiv
         }
         validateHostNames(cluster);
 
+        // Add service if not exists
+        if(!topologyProvider.serviceExists(serviceName)) {
+            topologyProvider.addService(transformService(service));
+        }
+
         // Add cluster if not exists
         if(!topologyProvider.clusterExistsByClusterId(cluster.getClusterId())) {
             topologyProvider.addCluster(transformCluster(cluster));
@@ -328,6 +330,22 @@ public class LoadBalancerCommonTopologyEventReceiver extends TopologyEventReceiv
         }
     }
 
+    private org.apache.stratos.load.balancer.common.domain.Service transformService(Service messagingService) {
+        org.apache.stratos.load.balancer.common.domain.Service service =
+                new org.apache.stratos.load.balancer.common.domain.Service(messagingService.getServiceName());
+        for(Port port : messagingService.getPorts()) {
+            service.addPort(transformPort(port));
+        }
+        return service;
+    }
+
+    private org.apache.stratos.load.balancer.common.domain.Port transformPort(Port messagingPort) {
+        org.apache.stratos.load.balancer.common.domain.Port port =
+                new org.apache.stratos.load.balancer.common.domain.Port(messagingPort.getProtocol(),
+                        messagingPort.getValue(), messagingPort.getProxy());
+        return port;
+    }
+
     private org.apache.stratos.load.balancer.common.domain.Cluster transformCluster(Cluster messagingCluster) {
         org.apache.stratos.load.balancer.common.domain.Cluster cluster =
                 new org.apache.stratos.load.balancer.common.domain.Cluster(messagingCluster.getServiceName(),

http://git-wip-us.apache.org/repos/asf/stratos/blob/d8d7ca44/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/topology/TopologyProvider.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/topology/TopologyProvider.java b/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/topology/TopologyProvider.java
index 91e6bce..d3e1daf 100644
--- a/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/topology/TopologyProvider.java
+++ b/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/topology/TopologyProvider.java
@@ -24,6 +24,8 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.load.balancer.common.domain.Cluster;
 import org.apache.stratos.load.balancer.common.domain.Member;
+import org.apache.stratos.load.balancer.common.domain.Service;
+import org.apache.stratos.load.balancer.common.domain.Topology;
 
 import java.util.Collection;
 import java.util.Map;
@@ -36,24 +38,54 @@ public class TopologyProvider {
 
     private static final Log log = LogFactory.getLog(TopologyProvider.class);
 
+    private Topology topology;
     private Map<String, Cluster> clusterIdToClusterMap;
     private Map<String, Cluster> hostNameToClusterMap;
     private Map<String, Map<Integer, Cluster>> hostNameToTenantIdToClusterMap;
     private Map<String, String> memberHostNameToClusterHostNameMap;
 
     public TopologyProvider() {
+        this.topology = new Topology();
         this.clusterIdToClusterMap = new ConcurrentHashMap<String, Cluster>();
         this.hostNameToClusterMap = new ConcurrentHashMap<String, Cluster>();
         this.hostNameToTenantIdToClusterMap = new ConcurrentHashMap<String, Map<Integer, Cluster>>();
         this.memberHostNameToClusterHostNameMap = new ConcurrentHashMap<String, String>();
     }
 
+    public boolean serviceExists(String serviceName) {
+        return topology.getService(serviceName) != null;
+    }
+
+    /**
+     * Add service to the topology.
+     * @param service
+     */
+    public void addService(Service service) {
+        if(service != null) {
+            topology.addService(service);
+            log.info(String.format("Service added: [service] %s", service.getServiceName()));
+
+            Collection<Cluster> clusters = service.getClusters();
+            if ((clusters != null) && (clusters.size() > 0)) {
+                for (Cluster cluster : clusters) {
+                    addCluster(cluster);
+                }
+            }
+        }
+    }
+
     /**
      * Add cluster to the topology.
      * @param cluster
      */
     public void addCluster(Cluster cluster) {
         if(cluster != null) {
+            Service service = topology.getService(cluster.getServiceName());
+            if(service == null) {
+                throw new RuntimeException(String.format("Could not add cluster, service not found: [service] %s",
+                        cluster.getServiceName()));
+            }
+            service.addCluster(cluster);
             clusterIdToClusterMap.put(cluster.getClusterId(), cluster);
 
             for(String hostName : cluster.getHostNames()) {
@@ -75,7 +107,33 @@ public class TopologyProvider {
     }
 
     /**
-     * Remove cluster.
+     * Add a member to its cluster.
+     * @param member
+     */
+    public void addMember(Member member) {
+        Cluster cluster = getClusterByClusterId(member.getClusterId());
+        if(cluster == null) {
+            log.warn(String.format("Could not add member, cluster not found: [cluster] %s",
+                    member.getClusterId()));
+            return;
+        }
+        if(StringUtils.isBlank(member.getHostName())) {
+            log.warn(String.format("Could not add member, member hostname not found: [cluster] %s [member] %s",
+                    member.getClusterId(), member.getMemberId()));
+            return;
+        }
+
+        cluster.addMember(member);
+        if((cluster.getHostNames() != null) && (cluster.getHostNames().size() > 0)) {
+            memberHostNameToClusterHostNameMap.put(member.getHostName(), cluster.getHostNames().iterator().next());
+        }
+
+        log.info(String.format("Member added to cluster: [cluster] %s [member] %s",
+                member.getClusterId(), member.getHostName()));
+    }
+
+    /**
+     * Remove cluster from the topology.
      * @param clusterId
      */
     public void removeCluster(String clusterId) {
@@ -115,7 +173,7 @@ public class TopologyProvider {
     }
 
     /**
-     * Returns cluster by cluster id.
+     * Get cluster by cluster id.
      * @param clusterId
      * @return
      */
@@ -196,32 +254,6 @@ public class TopologyProvider {
     }
 
     /**
-     * Add a member to its cluster.
-     * @param member
-     */
-    public void addMember(Member member) {
-        Cluster cluster = getClusterByClusterId(member.getClusterId());
-        if(cluster == null) {
-            log.warn(String.format("Could not add member, cluster not found: [cluster] %s",
-                    member.getClusterId()));
-            return;
-        }
-        if(StringUtils.isBlank(member.getHostName())) {
-            log.warn(String.format("Could not add member, member hostname not found: [cluster] %s [member] %s",
-                    member.getClusterId(), member.getMemberId()));
-            return;
-        }
-
-        cluster.addMember(member);
-        if((cluster.getHostNames() != null) && (cluster.getHostNames().size() > 0)) {
-            memberHostNameToClusterHostNameMap.put(member.getHostName(), cluster.getHostNames().iterator().next());
-        }
-
-        log.info(String.format("Member added to cluster: [cluster] %s [member] %s",
-                member.getClusterId(), member.getHostName()));
-    }
-
-    /**
      * Remove a member from its cluster.
      * @param clusterId
      * @param memberId
@@ -259,4 +291,8 @@ public class TopologyProvider {
     public String getClusterHostname(String memberHostName) {
         return memberHostNameToClusterHostNameMap.get(memberHostName);
     }
+
+    public Topology getTopology() {
+        return topology;
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/d8d7ca44/components/org.apache.stratos.load.balancer.extension.api/src/main/java/org/apache/stratos/load/balancer/extension/api/LoadBalancer.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.load.balancer.extension.api/src/main/java/org/apache/stratos/load/balancer/extension/api/LoadBalancer.java b/components/org.apache.stratos.load.balancer.extension.api/src/main/java/org/apache/stratos/load/balancer/extension/api/LoadBalancer.java
index b25a07e..c8dc562 100644
--- a/components/org.apache.stratos.load.balancer.extension.api/src/main/java/org/apache/stratos/load/balancer/extension/api/LoadBalancer.java
+++ b/components/org.apache.stratos.load.balancer.extension.api/src/main/java/org/apache/stratos/load/balancer/extension/api/LoadBalancer.java
@@ -20,7 +20,7 @@
 package org.apache.stratos.load.balancer.extension.api;
 
 import org.apache.stratos.load.balancer.extension.api.exception.LoadBalancerExtensionException;
-import org.apache.stratos.messaging.domain.topology.Topology;
+import org.apache.stratos.load.balancer.common.domain.Topology;
 
 /**
  *  A generic load balancer life-cycle definition.
@@ -47,9 +47,8 @@ public interface LoadBalancer {
     void configure(Topology topology) throws LoadBalancerExtensionException;
 
     /**
-     * Reload load balancer configuration using the given topology without interrupting the incoming requests.
+     * Reload load balancer configuration using the configuration written in configure() method.
      * Throw an exception if the reload operation fails.
-     * @param topology
      */
-    void reload(Topology topology) throws LoadBalancerExtensionException;
+    void reload() throws LoadBalancerExtensionException;
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/d8d7ca44/components/org.apache.stratos.load.balancer.extension.api/src/main/java/org/apache/stratos/load/balancer/extension/api/LoadBalancerExtension.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.load.balancer.extension.api/src/main/java/org/apache/stratos/load/balancer/extension/api/LoadBalancerExtension.java b/components/org.apache.stratos.load.balancer.extension.api/src/main/java/org/apache/stratos/load/balancer/extension/api/LoadBalancerExtension.java
index 08903bc..9d82fdb 100644
--- a/components/org.apache.stratos.load.balancer.extension.api/src/main/java/org/apache/stratos/load/balancer/extension/api/LoadBalancerExtension.java
+++ b/components/org.apache.stratos.load.balancer.extension.api/src/main/java/org/apache/stratos/load/balancer/extension/api/LoadBalancerExtension.java
@@ -21,12 +21,13 @@ package org.apache.stratos.load.balancer.extension.api;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.load.balancer.common.event.receivers.LoadBalancerCommonTopologyEventReceiver;
 import org.apache.stratos.load.balancer.common.statistics.LoadBalancerStatisticsReader;
 import org.apache.stratos.load.balancer.common.statistics.notifier.LoadBalancerStatisticsNotifier;
+import org.apache.stratos.load.balancer.common.topology.TopologyProvider;
 import org.apache.stratos.messaging.event.Event;
 import org.apache.stratos.messaging.listener.topology.*;
 import org.apache.stratos.messaging.message.receiver.topology.TopologyEventReceiver;
-import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
 
 import java.util.concurrent.ExecutorService;
 
@@ -40,9 +41,9 @@ public class LoadBalancerExtension {
 	private LoadBalancer loadBalancer;
 	private LoadBalancerStatisticsReader statsReader;
 	private boolean loadBalancerStarted;
+    private TopologyProvider topologyProvider;
 	private TopologyEventReceiver topologyEventReceiver;
 	private LoadBalancerStatisticsNotifier statisticsNotifier;
-	private boolean terminated;
 	private ExecutorService executorService;
 
 	/**
@@ -54,6 +55,7 @@ public class LoadBalancerExtension {
 	public LoadBalancerExtension(LoadBalancer loadBalancer, LoadBalancerStatisticsReader statsReader) {
 		this.loadBalancer = loadBalancer;
 		this.statsReader = statsReader;
+        this.topologyProvider = new TopologyProvider();
 	}
 
 
@@ -64,7 +66,7 @@ public class LoadBalancerExtension {
 			}
 
 			// Start topology receiver thread
-			topologyEventReceiver = new TopologyEventReceiver();
+			topologyEventReceiver = new LoadBalancerCommonTopologyEventReceiver(topologyProvider);
 			addEventListeners();
 			topologyEventReceiver.setExecutorService(executorService);
 			topologyEventReceiver.execute();
@@ -93,10 +95,9 @@ public class LoadBalancerExtension {
 			@Override
 			protected void onEvent(Event event) {
 				try {
-
 					if (!loadBalancerStarted) {
 						// Configure load balancer
-						loadBalancer.configure(TopologyManager.getTopology());
+						loadBalancer.configure(topologyProvider.getTopology());
 
 						// Start load balancer
 						loadBalancer.start();
@@ -145,7 +146,11 @@ public class LoadBalancerExtension {
 	private void reloadConfiguration() {
 		try {
 			if (loadBalancerStarted) {
-				loadBalancer.reload(TopologyManager.getTopology());
+                // Configure load balancer
+                loadBalancer.configure(topologyProvider.getTopology());
+
+                // Reload the load balancer
+				loadBalancer.reload();
 			}
 		} catch (Exception e) {
 			if (log.isErrorEnabled()) {
@@ -161,7 +166,6 @@ public class LoadBalancerExtension {
 		if (statisticsNotifier != null) {
 			statisticsNotifier.terminate();
 		}
-		terminated = true;
 	}
 
 	public ExecutorService getExecutorService() {

http://git-wip-us.apache.org/repos/asf/stratos/blob/d8d7ca44/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/conf/LoadBalancerConfiguration.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/conf/LoadBalancerConfiguration.java b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/conf/LoadBalancerConfiguration.java
index 658ce54..9ea21e9 100644
--- a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/conf/LoadBalancerConfiguration.java
+++ b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/conf/LoadBalancerConfiguration.java
@@ -26,6 +26,7 @@ import org.apache.stratos.common.constants.StratosConstants;
 import org.apache.stratos.load.balancer.common.domain.Cluster;
 import org.apache.stratos.load.balancer.common.domain.Member;
 import org.apache.stratos.load.balancer.common.domain.Port;
+import org.apache.stratos.load.balancer.common.domain.Service;
 import org.apache.stratos.load.balancer.common.topology.TopologyProvider;
 import org.apache.stratos.load.balancer.conf.domain.Algorithm;
 import org.apache.stratos.load.balancer.conf.domain.MemberIpType;
@@ -464,7 +465,10 @@ public class LoadBalancerConfiguration {
 
                     String serviceName = serviceNode.getName();
                     Node clustersNode = serviceNode.findChildNodeByName(Constants.CONF_ELEMENT_CLUSTERS);
+                    Service service = new Service(serviceName);
+                    service.setMultiTenant(isMultiTenant);
 
+                    // Process clusters
                     for (Node clusterNode : clustersNode.getChildNodes()) {
                         String clusterId = clusterNode.getName();
                         Cluster cluster = new Cluster(serviceName, clusterId);
@@ -494,6 +498,7 @@ public class LoadBalancerConfiguration {
                         Node membersNode = clusterNode.findChildNodeByName(Constants.CONF_ELEMENT_MEMBERS);
                         validateRequiredNode(membersNode, Constants.CONF_ELEMENT_MEMBERS, String.format("cluster %s", clusterId));
 
+                        // Process members
                         for (Node memberNode : membersNode.getChildNodes()) {
                             String memberId = memberNode.getName();
                             // we are making it as 1 because we are not using this for static loadbalancer configuration
@@ -515,11 +520,17 @@ public class LoadBalancerConfiguration {
                                 Port port = new Port(portNode.getName(), Integer.valueOf(value), Integer.valueOf(proxy));
                                 member.addPort(port);
                             }
+
+                            // Add member to the cluster
                             cluster.addMember(member);
                         }
+
                         // Add cluster to service
-                        topologyProvider.addCluster(cluster);
+                        service.addCluster(cluster);
                     }
+
+                    // Add service to the topology provider
+                    topologyProvider.addService(service);
                 }
                 configuration.setTopologyProvider(topologyProvider);
             }

http://git-wip-us.apache.org/repos/asf/stratos/blob/d8d7ca44/extensions/load-balancer/haproxy-extension/src/main/java/org/apache/stratos/haproxy/extension/HAProxy.java
----------------------------------------------------------------------
diff --git a/extensions/load-balancer/haproxy-extension/src/main/java/org/apache/stratos/haproxy/extension/HAProxy.java b/extensions/load-balancer/haproxy-extension/src/main/java/org/apache/stratos/haproxy/extension/HAProxy.java
index c71eba1..4ba79ff 100644
--- a/extensions/load-balancer/haproxy-extension/src/main/java/org/apache/stratos/haproxy/extension/HAProxy.java
+++ b/extensions/load-balancer/haproxy-extension/src/main/java/org/apache/stratos/haproxy/extension/HAProxy.java
@@ -24,7 +24,7 @@ import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.common.util.CommandUtils;
 import org.apache.stratos.load.balancer.extension.api.LoadBalancer;
 import org.apache.stratos.load.balancer.extension.api.exception.LoadBalancerExtensionException;
-import org.apache.stratos.messaging.domain.topology.Topology;
+import org.apache.stratos.load.balancer.common.domain.Topology;
 
 import java.io.BufferedReader;
 import java.io.File;
@@ -35,8 +35,8 @@ import java.util.Vector;
  * HAProxy load balancer life-cycle implementation.
  */
 public class HAProxy implements LoadBalancer {
+
     private static final Log log = LogFactory.getLog(HAProxy.class);
-    private static final String NEW_LINE = System.getProperty("line.separator");
 
     private String executableFilePath;
     private String processIdFilePath;
@@ -54,43 +54,11 @@ public class HAProxy implements LoadBalancer {
         this.statsSocketFilePath = HAProxyContext.getInstance().getStatsSocketFilePath();
     }
 
-    private void reloadConfiguration() throws LoadBalancerExtensionException {
-
-        try {
-            if (log.isInfoEnabled()) {
-                log.info("Reloading configuration...");
-            }
-
-            // Read pid
-            String pid = "";
-            BufferedReader reader = new BufferedReader(new FileReader(processIdFilePath));
-            String line;
-            while ((line = reader.readLine()) != null) {
-                pid += line + " ";
-            }
-
-            // Execute hot configuration deployment
-            String command = executableFilePath + " -f " + confFilePath + " -p " + processIdFilePath + " -sf " + pid;
-            CommandUtils.executeCommand(command);
-            if (log.isInfoEnabled()) {
-                log.info("Configuration done");
-            }
-        } catch (Exception e) {
-            if (log.isErrorEnabled()) {
-                log.error("Reconfiguration failed");
-            }
-            throw new LoadBalancerExtensionException(e);
-        }
-    }
-
-    public void reload(Topology topology) throws LoadBalancerExtensionException {
-        if(log.isDebugEnabled()) {
-           log.info("Reconfigure and Reload the Load Balancer ");
-        }
-        configure(topology);
-        reloadConfiguration();
-    }
-
+    /**
+     * Configure haproxy instance according to topology given
+     * @param topology
+     * @throws LoadBalancerExtensionException
+     */
     public void configure(Topology topology) throws LoadBalancerExtensionException {
 
         try {
@@ -112,6 +80,10 @@ public class HAProxy implements LoadBalancer {
         }
     }
 
+    /**
+     * Start haproxy instance
+     * @throws LoadBalancerExtensionException
+     */
     public void start() throws LoadBalancerExtensionException {
 
         // Check for configuration file
@@ -135,6 +107,42 @@ public class HAProxy implements LoadBalancer {
         }
     }
 
+    /**
+     * Reload haproxy instance according to the configuration written in configure() method.
+     * @throws LoadBalancerExtensionException
+     */
+    public void reload() throws LoadBalancerExtensionException {
+        try {
+            if (log.isInfoEnabled()) {
+                log.info("Reloading configuration...");
+            }
+
+            // Read pid
+            String pid = "";
+            BufferedReader reader = new BufferedReader(new FileReader(processIdFilePath));
+            String line;
+            while ((line = reader.readLine()) != null) {
+                pid += line + " ";
+            }
+
+            // Execute hot configuration deployment
+            String command = executableFilePath + " -f " + confFilePath + " -p " + processIdFilePath + " -sf " + pid;
+            CommandUtils.executeCommand(command);
+            if (log.isInfoEnabled()) {
+                log.info("Configuration done");
+            }
+        } catch (Exception e) {
+            if (log.isErrorEnabled()) {
+                log.error("Reconfiguration failed");
+            }
+            throw new LoadBalancerExtensionException(e);
+        }
+    }
+
+    /**
+     * Stop haproxy instance
+     * @throws LoadBalancerExtensionException
+     */
     public void stop() throws LoadBalancerExtensionException {
 
         try {

http://git-wip-us.apache.org/repos/asf/stratos/blob/d8d7ca44/extensions/load-balancer/haproxy-extension/src/main/java/org/apache/stratos/haproxy/extension/HAProxyConfigWriter.java
----------------------------------------------------------------------
diff --git a/extensions/load-balancer/haproxy-extension/src/main/java/org/apache/stratos/haproxy/extension/HAProxyConfigWriter.java b/extensions/load-balancer/haproxy-extension/src/main/java/org/apache/stratos/haproxy/extension/HAProxyConfigWriter.java
index 45feb6a..a9f7796 100644
--- a/extensions/load-balancer/haproxy-extension/src/main/java/org/apache/stratos/haproxy/extension/HAProxyConfigWriter.java
+++ b/extensions/load-balancer/haproxy-extension/src/main/java/org/apache/stratos/haproxy/extension/HAProxyConfigWriter.java
@@ -19,10 +19,9 @@
 
 package org.apache.stratos.haproxy.extension;
 
-import org.apache.commons.lang.ObjectUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.messaging.domain.topology.*;
+import org.apache.stratos.load.balancer.common.domain.*;
 import org.apache.velocity.Template;
 import org.apache.velocity.VelocityContext;
 import org.apache.velocity.app.VelocityEngine;
@@ -37,6 +36,7 @@ import java.io.StringWriter;
  * HAProxy load balancer configuration writer.
  */
 public class HAProxyConfigWriter {
+
     private static final Log log = LogFactory.getLog(Main.class);
     private static final String NEW_LINE = System.getProperty("line.separator");
 
@@ -57,10 +57,9 @@ public class HAProxyConfigWriter {
     private String frontEndHttpId, frontEndHttpsId;
     private boolean frontEndHttpAdded, frontEndHttpsAdded;
 
-    private String loadBalancerType;        // Load Balancer type (default, service aware, static)
-    private String loadBalancedServiceType; // Service type if load balancer is a service aware
+    public HAProxyConfigWriter(String templatePath, String templateName, String confFilePath,
+                               String statsSocketFilePath) {
 
-    public HAProxyConfigWriter(String templatePath, String templateName, String confFilePath, String statsSocketFilePath) {
         this.templatePath = templatePath;
         this.templateName = templateName;
         this.confFilePath = confFilePath;
@@ -79,41 +78,8 @@ public class HAProxyConfigWriter {
         frontEndHttpsAdded = false;
 
         for (Service service : topology.getServices()) {
-            if (service.getServiceName().equals(HAProxyContext.getInstance().getServiceName())) {
-                for (Cluster cluster : service.getClusters()) {
-                    if (cluster.getClusterId().equals(HAProxyContext.getInstance().getClusterId())) {
-                        if ((cluster.getProperties().getProperty(Constants.LOAD_BALANCER) != null) && (cluster.getProperties().getProperty(Constants.LOAD_BALANCER_REF) != null)) {
-                            loadBalancerType = cluster.getProperties().getProperty(Constants.LOAD_BALANCER_REF);
-                            if (cluster.getProperties().getProperty(Constants.LB_SERVICE_TYPE) != null)
-                                loadBalancedServiceType = cluster.getProperties().getProperty(Constants.LB_SERVICE_TYPE);
-                            break;
-                        } else {
-                            loadBalancerType = Constants.STATIC_LOAD_BALANCER;
-                            log.debug("Static load balancer");
-                            break;
-                        }
-                    }
-                }
-            }
-        }
-
-        for (Service service : topology.getServices()) {
             for (Cluster cluster : service.getClusters()) {
-                if (cluster.getProperties().getProperty(Constants.LOAD_BALANCER) == null) {
-                    if ((cluster.getProperties().getProperty(Constants.LOAD_BALANCER_REF) != null)) {
-                        if ((cluster.getProperties().getProperty(Constants.LOAD_BALANCER_REF).equals(Constants.NO_LOAD_BALANCER)) &&
-                                Constants.STATIC_LOAD_BALANCER.equals(loadBalancerType) && cluster.getServiceName().equals(HAProxyContext.getInstance().getLbserviceType()))  {
-                            createConfig(service, cluster);
-                        } else if ((cluster.getProperties().getProperty(Constants.LOAD_BALANCER_REF).equals(Constants.DEFAULT_LOAD_BALANCER)) &&
-                                Constants.DEFAULT_LOAD_BALANCER.equals(loadBalancerType)) {
-                            createConfig(service, cluster);
-                        } else if ((cluster.getProperties().getProperty(Constants.LOAD_BALANCER_REF).equals(Constants.SERVICE_LOAD_BALANCER)) &&
-                                Constants.SERVICE_LOAD_BALANCER.equals(loadBalancerType) &&
-                                cluster.getServiceName().equals(loadBalancedServiceType)) {
-                            createConfig(service, cluster);
-                        }
-                    }
-                }
+                createConfig(service, cluster);
             }
         }
 
@@ -164,46 +130,48 @@ public class HAProxyConfigWriter {
             if (port.getProtocol().equals("http")) {
                 if (!frontEndHttpAdded) {
                     frontEndHttp.append("frontend ").append(frontEndHttpId).append(NEW_LINE);
-                    frontEndHttp.append("\tbind ").append(HAProxyContext.getInstance().getHAProxyPrivateIp()).append(":").append(port.getProxy()).append(NEW_LINE);
+                    frontEndHttp.append("\tbind ").append(HAProxyContext.getInstance().getHAProxyPrivateIp())
+                            .append(":").append(port.getProxy()).append(NEW_LINE);
                     frontEndHttp.append("\tmode ").append(port.getProtocol()).append(NEW_LINE);
                     frontEndHttpAdded = true;
                 }
 
                 for (String hostname : cluster.getHostNames()) {
-                    frontEndHttp.append("\tacl ").append("is_").append(hostname).append(" hdr_beg(host) -i ").append(hostname).append(NEW_LINE);
-                    frontEndHttp.append("\tuse_backend ").append(hostname).append("-http-members if is_").append(hostname).append(NEW_LINE);
+                    frontEndHttp.append("\tacl ").append("is_").append(hostname).append(" hdr_beg(host) -i ")
+                            .append(hostname).append(NEW_LINE);
+                    frontEndHttp.append("\tuse_backend ").append(hostname).append("-http-members if is_")
+                            .append(hostname).append(NEW_LINE);
 
                     // Backend block
                     backEndHttp.append("backend ").append(hostname).append("-http-members").append(NEW_LINE);
                     backEndHttp.append("\tmode ").append("http").append(NEW_LINE);
                     for (Member member : cluster.getMembers()) {
-                        if (member.getNetworkPartitionId().equals(HAProxyContext.getInstance().getNetworkPartitionId())) {
-                            backEndHttp.append("\tserver ").append(member.getMemberId()).append(" ")
-                                    .append(member.getDefaultPrivateIP()).append(":").append(port.getValue()).append(NEW_LINE);
-                        }
+                        backEndHttp.append("\tserver ").append(member.getMemberId()).append(" ")
+                                .append(member.getHostName()).append(":").append(port.getValue()).append(NEW_LINE);
                     }
                     backEndHttp.append(NEW_LINE);
                 }
             } else if (port.getProtocol().equals("https")) {
                 if (!frontEndHttpsAdded) {
                     frontEndHttp.append("frontend ").append(frontEndHttpsId).append(NEW_LINE);
-                    frontEndHttp.append("\tbind ").append(HAProxyContext.getInstance().getHAProxyPrivateIp()).append(":").append(port.getProxy()).append(NEW_LINE);
+                    frontEndHttp.append("\tbind ").append(HAProxyContext.getInstance().getHAProxyPrivateIp())
+                            .append(":").append(port.getProxy()).append(NEW_LINE);
                     frontEndHttp.append("\tmode ").append("http").append(NEW_LINE);
                     frontEndHttpsAdded = true;
                 }
 
                 for (String hostname : cluster.getHostNames()) {
-                    frontEndHttps.append("\tacl ").append("is_").append(hostname).append(" hdr_beg(host) -i ").append(hostname).append(NEW_LINE);
-                    frontEndHttps.append("\tuse_backend ").append(hostname).append("-https-members if is_").append(hostname).append(NEW_LINE);
+                    frontEndHttps.append("\tacl ").append("is_").append(hostname).append(" hdr_beg(host) -i ")
+                            .append(hostname).append(NEW_LINE);
+                    frontEndHttps.append("\tuse_backend ").append(hostname).append("-https-members if is_")
+                            .append(hostname).append(NEW_LINE);
 
                     // Backend block
                     backEndHttps.append("backend ").append(hostname).append("-http-members").append(NEW_LINE);
                     backEndHttps.append("\tmode ").append("https").append(NEW_LINE);
                     for (Member member : cluster.getMembers()) {
-                        if (member.getNetworkPartitionId().equals(HAProxyContext.getInstance().getNetworkPartitionId())) {
-                            backEndHttps.append("\tserver ").append(member.getMemberId()).append(" ")
-                                    .append(member.getDefaultPrivateIP()).append(":").append(port.getValue()).append(NEW_LINE);
-                        }
+                        backEndHttps.append("\tserver ").append(member.getMemberId()).append(" ")
+                                .append(member.getHostName()).append(":").append(port.getValue()).append(NEW_LINE);
                     }
                     backEndHttps.append(NEW_LINE);
                 }