Service aware load balance support in HAProxy
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/0c968f4c Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/0c968f4c Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/0c968f4c Branch: refs/heads/master Commit: 0c968f4c8f251babd205acdcb2f53063d5bb5b09 Parents: 39c4d76 Author: Dinesh Bandara <[email protected]> Authored: Fri Sep 19 02:15:40 2014 +0530 Committer: Nirmal Fernando <[email protected]> Committed: Wed Sep 24 15:50:29 2014 +0530 ---------------------------------------------------------------------- .../src/main/bin/haproxy-extension.sh | 1 + .../stratos/haproxy/extension/Constants.java | 4 ++- .../haproxy/extension/HAProxyConfigWriter.java | 35 +++++++++++++------- .../haproxy/extension/HAProxyContext.java | 8 +++-- 4 files changed, 33 insertions(+), 15 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/0c968f4c/extensions/load-balancer/haproxy-extension/src/main/bin/haproxy-extension.sh ---------------------------------------------------------------------- diff --git a/extensions/load-balancer/haproxy-extension/src/main/bin/haproxy-extension.sh b/extensions/load-balancer/haproxy-extension/src/main/bin/haproxy-extension.sh index 43fa639..3f6bc73 100755 --- a/extensions/load-balancer/haproxy-extension/src/main/bin/haproxy-extension.sh +++ b/extensions/load-balancer/haproxy-extension/src/main/bin/haproxy-extension.sh @@ -40,6 +40,7 @@ properties="-Dhaproxy.private.ip=127.0.0.1 -Dthrift.receiver.port=7615 -Dnetwork.partition.id=network-partition-1 -Dcluster.id=cluster + -Dcep.stats.publisher.enabled=true" # Uncomment below line to enable remote debugging http://git-wip-us.apache.org/repos/asf/stratos/blob/0c968f4c/extensions/load-balancer/haproxy-extension/src/main/java/org/apache/stratos/haproxy/extension/Constants.java ---------------------------------------------------------------------- diff --git a/extensions/load-balancer/haproxy-extension/src/main/java/org/apache/stratos/haproxy/extension/Constants.java b/extensions/load-balancer/haproxy-extension/src/main/java/org/apache/stratos/haproxy/extension/Constants.java index 6fe77ca..eb88c16 100644 --- a/extensions/load-balancer/haproxy-extension/src/main/java/org/apache/stratos/haproxy/extension/Constants.java +++ b/extensions/load-balancer/haproxy-extension/src/main/java/org/apache/stratos/haproxy/extension/Constants.java @@ -38,9 +38,11 @@ public class Constants { public static final String LOAD_BALANCER = "load.balancer"; public static final String LOAD_BALANCER_REF = "load.balancer.ref"; - public static final String NO_LOAD_BALANCER = "no.load.balancer"; + public static final String LB_SERVICE_TYPE ="load.balanced.service.type"; + public static final String DEFAULT_LOAD_BALANCER ="default.load.balancer"; public static final String STATIC_LOAD_BALANCER ="static.load.balancer"; public static final String SERVICE_LOAD_BALANCER = "service.aware.load.balancer"; + public static final String NO_LOAD_BALANCER = "no.load.balancer"; } http://git-wip-us.apache.org/repos/asf/stratos/blob/0c968f4c/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 77f86af..10a4c97 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 @@ -57,8 +57,8 @@ public class HAProxyConfigWriter { private String frontEndHttpId, frontEndHttpsId; private boolean frontEndHttpAdded, frontEndHttpsAdded; - private String loadBalancerType; // Load Balancer type (default, service aware or static) - String loadBalancedServiceType; // Service type if load balancer is a service aware + 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) { this.templatePath = templatePath; @@ -79,14 +79,18 @@ public class HAProxyConfigWriter { frontEndHttpsAdded = false; for (Service service : topology.getServices()) { - if(service.getServiceName().equals("haproxy")) { + if (service.getServiceName().equals("haproxy")) { for (Cluster cluster : service.getClusters()) { - if(cluster.getClusterId().equals(HAProxyContext.getInstance().getClusterId())) - { - 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; + 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 = cluster.getProperties().getProperty(Constants.STATIC_LOAD_BALANCER); + break; + } } } } @@ -94,10 +98,17 @@ public class HAProxyConfigWriter { 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) == null) { if ((cluster.getProperties().getProperty(Constants.LOAD_BALANCER_REF) != null)) { - if(!(cluster.getProperties().getProperty(Constants.LOAD_BALANCER_REF).equals(Constants.NO_LOAD_BALANCER)) && - cluster.getProperties().getProperty(Constants.LOAD_BALANCER_REF).equals(loadBalancerType)) { + if ((cluster.getProperties().getProperty(Constants.LOAD_BALANCER_REF).equals(Constants.NO_LOAD_BALANCER)) && + Constants.STATIC_LOAD_BALANCER.equals(loadBalancerType)) { + 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); } } http://git-wip-us.apache.org/repos/asf/stratos/blob/0c968f4c/extensions/load-balancer/haproxy-extension/src/main/java/org/apache/stratos/haproxy/extension/HAProxyContext.java ---------------------------------------------------------------------- diff --git a/extensions/load-balancer/haproxy-extension/src/main/java/org/apache/stratos/haproxy/extension/HAProxyContext.java b/extensions/load-balancer/haproxy-extension/src/main/java/org/apache/stratos/haproxy/extension/HAProxyContext.java index 55dfecc..f73498a 100644 --- a/extensions/load-balancer/haproxy-extension/src/main/java/org/apache/stratos/haproxy/extension/HAProxyContext.java +++ b/extensions/load-balancer/haproxy-extension/src/main/java/org/apache/stratos/haproxy/extension/HAProxyContext.java @@ -141,7 +141,11 @@ public class HAProxyContext { return cepStatsPublisherEnabled; } - public String getNetworkPartitionId() { return networkPartitionId; }; + public String getNetworkPartitionId() { + return networkPartitionId; + } - public String getClusterId() { return clusterId; }; + public String getClusterId() { + return clusterId; + } }
