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 2013/12/03 11:02:27 UTC
[1/2] git commit: Added support to manage multiple hostnames against
a cluster and implemented unit tests to verify a complete load balancer
configuration
Updated Branches:
refs/heads/master d40d83fcc -> ceb407eb0
Added support to manage multiple hostnames against a cluster and implemented unit tests to verify a complete load balancer configuration
Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/5359937c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/5359937c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/5359937c
Branch: refs/heads/master
Commit: 5359937c7c8c3a3fe7f6f7c149435dc4234ac7ff
Parents: d387d64
Author: Imesh Gunaratne <im...@apache.org>
Authored: Tue Dec 3 15:30:01 2013 +0530
Committer: Imesh Gunaratne <im...@apache.org>
Committed: Tue Dec 3 15:30:01 2013 +0530
----------------------------------------------------------------------
.../controller/topology/TopologyBuilder.java | 11 +-
.../load/balancer/LoadBalancerContext.java | 12 +-
.../balancer/LoadBalancerTopologyReceiver.java | 24 +--
.../conf/LoadBalancerConfiguration.java | 30 +++-
.../test/LoadBalancerConfigurationTest.java | 150 ++++++++++++++++---
.../sample/configuration/loadbalancer1.conf | 8 +-
.../sample/configuration/loadbalancer2.conf | 10 +-
.../sample/configuration/loadbalancer3.conf | 8 +-
.../messaging/domain/topology/Cluster.java | 19 ++-
.../messaging/domain/topology/Topology.java | 3 +
.../topology/ClusterCreatedEventProcessor.java | 2 +-
.../haproxy/extension/HAProxyConfigWriter.java | 29 ++--
12 files changed, 226 insertions(+), 80 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/5359937c/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java
index 7b21c10..db350e1 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java
@@ -173,18 +173,15 @@ public class TopologyBuilder {
if (service.clusterExists(registrant.getClusterId())) {
//update the cluster
cluster = service.getCluster(registrant.getClusterId());
- cluster.
- setHostName(registrant.getHostName());
- cluster.
- setAutoscalePolicyName(registrant.getAutoScalerPolicyName());
- cluster.
- setTenantRange(registrant.getTenantRange());
+ cluster.addHostName(registrant.getHostName());
+ cluster.setAutoscalePolicyName(registrant.getAutoScalerPolicyName());
+ cluster.setTenantRange(registrant.getTenantRange());
cluster.setProperties(props);
} else {
cluster = new Cluster(registrant.getCartridgeType(),
registrant.getClusterId(),
registrant.getAutoScalerPolicyName());
- cluster.setHostName(registrant.getHostName());
+ cluster.addHostName(registrant.getHostName());
cluster.setTenantRange(registrant.getTenantRange());
cluster.setAutoscalePolicyName(registrant.getAutoScalerPolicyName());
cluster.setProperties(props);
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/5359937c/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/LoadBalancerContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/LoadBalancerContext.java b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/LoadBalancerContext.java
index e9080e7..8a89ebe 100644
--- a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/LoadBalancerContext.java
+++ b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/LoadBalancerContext.java
@@ -206,10 +206,6 @@ public class LoadBalancerContext {
// ClusterContextMap methods END
// ClusterMap methods START
- public Collection<Cluster> getClusters() {
- return clusterMap.values();
- }
-
public Cluster getCluster(String hostName) {
return clusterMap.get(hostName);
}
@@ -219,7 +215,13 @@ public class LoadBalancerContext {
}
public void addCluster(Cluster cluster) {
- clusterMap.put(cluster.getHostName(), cluster);
+ for(String hostName : cluster.getHostNames()) {
+ addCluster(hostName, cluster);
+ }
+ }
+
+ public void addCluster(String hostName, Cluster cluster) {
+ clusterMap.put(hostName, cluster);
}
public void removeCluster(String hostName) {
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/5359937c/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/LoadBalancerTopologyReceiver.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/LoadBalancerTopologyReceiver.java b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/LoadBalancerTopologyReceiver.java
index fdbca11..fba24e7 100644
--- a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/LoadBalancerTopologyReceiver.java
+++ b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/LoadBalancerTopologyReceiver.java
@@ -77,7 +77,7 @@ public class LoadBalancerTopologyReceiver implements Runnable {
for(Service service : TopologyManager.getTopology().getServices()) {
for(Cluster cluster : service.getClusters()) {
if(hasActiveMembers(cluster)) {
- addClusterToContext(cluster);
+ addClusterToLbContext(cluster);
}
}
}
@@ -118,7 +118,7 @@ public class LoadBalancerTopologyReceiver implements Runnable {
log.error(String.format("Cluster not found in topology: [cluster] %s", memberActivatedEvent.getClusterId()));
}
}
- addClusterToContext(cluster);
+ addClusterToLbContext(cluster);
}
finally {
TopologyManager.releaseReadLock();
@@ -133,7 +133,7 @@ public class LoadBalancerTopologyReceiver implements Runnable {
// Remove cluster from context
ClusterRemovedEvent clusterRemovedEvent = (ClusterRemovedEvent)event;
- removeClusterFromContext(clusterRemovedEvent.getHostName());
+ removeClusterFromLbContext(clusterRemovedEvent.getHostName());
}
finally {
TopologyManager.releaseReadLock();
@@ -150,7 +150,9 @@ public class LoadBalancerTopologyReceiver implements Runnable {
ServiceRemovedEvent serviceRemovedEvent = (ServiceRemovedEvent)event;
for(Service service : TopologyManager.getTopology().getServices()) {
for(Cluster cluster : service.getClusters()) {
- removeClusterFromContext(cluster.getHostName());
+ for(String hostName : cluster.getHostNames()) {
+ removeClusterFromLbContext(hostName);
+ }
}
}
}
@@ -162,16 +164,18 @@ public class LoadBalancerTopologyReceiver implements Runnable {
return processorChain;
}
- private void addClusterToContext(Cluster cluster) {
- if(!LoadBalancerContext.getInstance().clusterExists(cluster.getHostName())) {
- LoadBalancerContext.getInstance().addCluster(cluster);
- if(log.isDebugEnabled()) {
- log.debug(String.format("Cluster added to load balancer context: [cluster] %s [hostname] %s", cluster.getClusterId(), cluster.getHostName()));
+ private void addClusterToLbContext(Cluster cluster) {
+ for(String hostName : cluster.getHostNames()) {
+ if(!LoadBalancerContext.getInstance().clusterExists(hostName)) {
+ LoadBalancerContext.getInstance().addCluster(hostName, cluster);
+ if(log.isDebugEnabled()) {
+ log.debug(String.format("Cluster added to load balancer context: [cluster] %s [hostname] %s", cluster.getClusterId(), hostName));
+ }
}
}
}
- private void removeClusterFromContext(String hostName) {
+ private void removeClusterFromLbContext(String hostName) {
if(LoadBalancerContext.getInstance().clusterExists(hostName)) {
Cluster cluster = LoadBalancerContext.getInstance().getCluster(hostName);
LoadBalancerContext.getInstance().removeCluster(hostName);
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/5359937c/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 a0ff254..f615090 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
@@ -66,12 +66,14 @@ public class LoadBalancerConfiguration {
this.algorithmMap = new HashMap<String, Algorithm>();
}
+ /**
+ * Get load balancer configuration singleton instance.
+ * @return
+ */
public static synchronized LoadBalancerConfiguration getInstance() {
if (instance == null) {
synchronized (LoadBalancerConfiguration.class) {
if (instance == null) {
- // Clear load balancer context
- LoadBalancerContext.getInstance().clear();
// Read load balancer configuration from file
LoadBalancerConfigurationReader reader = new LoadBalancerConfigurationReader();
instance = reader.readFromFile();
@@ -81,6 +83,19 @@ public class LoadBalancerConfiguration {
return instance;
}
+ /**
+ * Clear load balancer configuration singleton instance and referencing contexts.
+ */
+ public static synchronized void clear() {
+ synchronized (LoadBalancerConfiguration.class) {
+ instance = null;
+ // Clear load balancer context
+ LoadBalancerContext.getInstance().clear();
+ // Clear topology
+ TopologyManager.getTopology().clear();
+ }
+ }
+
public String getDefaultAlgorithmName() {
return defaultAlgorithmName;
}
@@ -329,13 +344,20 @@ public class LoadBalancerConfiguration {
for (Node clusterNode : clustersNode.getChildNodes()) {
String clusterId = clusterNode.getName();
Cluster cluster = new Cluster(service.getServiceName(), clusterId, null);
+
+ String algorithm = clusterNode.getProperty(Constants.CONF_PROPERTY_ALGORITHM);
+ if(StringUtils.isNotBlank(algorithm)) {
+ cluster.setLoadBalanceAlgorithmName(algorithm);
+ }
+
String hosts = clusterNode.getProperty(Constants.CONF_ELEMENT_HOSTS);
if (StringUtils.isBlank(hosts)) {
throw new InvalidConfigurationException(String.format("%s node was not found in cluster %s", Constants.CONF_ELEMENT_HOSTS, clusterNode.getName()));
}
String[] hostsArray = hosts.split(",");
- // TODO: Add multiple host-names to cluster
- cluster.setHostName(hostsArray[0]);
+ for(String hostsName : hostsArray) {
+ cluster.addHostName(hostsName.trim());
+ }
Node membersNode = clusterNode.findChildNodeByName(Constants.CONF_ELEMENT_MEMBERS);
if (membersNode == null) {
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/5359937c/components/org.apache.stratos.load.balancer/src/test/java/org/apache/stratos/load/balancer/test/LoadBalancerConfigurationTest.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.load.balancer/src/test/java/org/apache/stratos/load/balancer/test/LoadBalancerConfigurationTest.java b/components/org.apache.stratos.load.balancer/src/test/java/org/apache/stratos/load/balancer/test/LoadBalancerConfigurationTest.java
index 664d4d8..d1e31a5 100755
--- a/components/org.apache.stratos.load.balancer/src/test/java/org/apache/stratos/load/balancer/test/LoadBalancerConfigurationTest.java
+++ b/components/org.apache.stratos.load.balancer/src/test/java/org/apache/stratos/load/balancer/test/LoadBalancerConfigurationTest.java
@@ -1,40 +1,142 @@
/**
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements. See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership. The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License. You may obtain a copy of the License at
-
-* http://www.apache.org/licenses/LICENSE-2.0
-
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied. See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
package org.apache.stratos.load.balancer.test;
import java.io.File;
+import java.net.URL;
+import org.apache.stratos.messaging.domain.topology.*;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
import org.apache.stratos.load.balancer.conf.LoadBalancerConfiguration;
-import junit.framework.TestCase;
+import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
/**
* Test sample load balancer configurations.
*/
-public class LoadBalancerConfigurationTest extends TestCase {
- private static String configPath = "src/test/resources/sample/configuration";
+@RunWith(JUnit4.class)
+public class LoadBalancerConfigurationTest {
+ private static String configPath = File.separator + "sample" + File.separator + "configuration";
+
+ /**
+ * Test load balancer configuration parser using different configuration files.
+ */
+ @Test
+ public final void testConfigurationParser() {
+ URL resourceUrl = this.getClass().getResource(configPath);
+ File folder = new File(resourceUrl.getFile());
+ for (File configFile : folder.listFiles()) {
+ try {
+ System.setProperty("loadbalancer.conf.file", configFile.getAbsolutePath());
+ LoadBalancerConfiguration.getInstance();
+ } finally {
+ LoadBalancerConfiguration.clear();
+ }
+ }
+ }
- public final void testCreateLoadBalancerConfig() {
- File folder = new File(configPath);
- for(File configFile : folder.listFiles()) {
+ /**
+ * Test load balancer configuration read from a configuration file.
+ */
+ @Test
+ public void testConfiguration() {
+ try {
+ String validationError = "Load balancer configuration validation failed";
+
+ URL resourceUrl = this.getClass().getResource(configPath + File.separator + "loadbalancer1.conf");
+ File configFile = new File(resourceUrl.getFile());
System.setProperty("loadbalancer.conf.file", configFile.getAbsolutePath());
- LoadBalancerConfiguration.getInstance();
+ LoadBalancerConfiguration configuration = LoadBalancerConfiguration.getInstance();
+
+ Assert.assertEquals(String.format("%s, algorithm not valid", validationError), "round-robin", configuration.getDefaultAlgorithmName());
+ Assert.assertTrue(String.format("%s, failover is not true", validationError), configuration.isFailOver());
+ Assert.assertTrue(String.format("%s, session affinity is not true", validationError), configuration.isSessionAffinity());
+ Assert.assertEquals(String.format("%s, session timeout is not valid", validationError), 90000, configuration.getSessionTimeout());
+ Assert.assertTrue(String.format("%s, topology event listener enabled is not true", validationError), configuration.isTopologyEventListenerEnabled());
+ Assert.assertEquals(String.format("%s, mb ip is not valid", validationError), "localhost", configuration.getMbIp());
+ Assert.assertEquals(String.format("%s, mb port is not valid", validationError), 5677, configuration.getMbPort());
+ Assert.assertTrue(String.format("%s, cep stats publisher enabled is not true", validationError), configuration.isCepStatsPublisherEnabled());
+ Assert.assertEquals(String.format("%s, cep ip is not valid", validationError), "localhost", configuration.getCepIp());
+ Assert.assertEquals(String.format("%s, cep port is not valid", validationError), 7615, configuration.getCepPort());
+ } finally {
+ LoadBalancerConfiguration.clear();
+ }
+ }
+
+ /**
+ * Test static topology configuration read from a file
+ */
+ @Test
+ public final void testStaticTopology() {
+ URL resourceUrl = this.getClass().getResource(configPath + File.separator + "loadbalancer2.conf");
+ File configFile = new File(resourceUrl.getFile());
+
+ System.setProperty("loadbalancer.conf.file", configFile.getAbsolutePath());
+ LoadBalancerConfiguration.getInstance();
+
+ try {
+ String validationError = "Static topology validation failed";
+
+ TopologyManager.acquireReadLock();
+ Topology topology = TopologyManager.getTopology();
+ Assert.assertTrue(String.format("%s, services not found", validationError), topology.getServices().size() > 0);
+
+ String serviceName = "app-server";
+ Service appServer = topology.getService(serviceName);
+ Assert.assertNotNull(String.format("%s, service not found: [service] %s", validationError, serviceName), appServer);
+
+ String clusterId = "app-server-cluster1";
+ Cluster cluster1 = appServer.getCluster(clusterId);
+ Assert.assertNotNull(String.format("%s, cluster not found: [cluster] %s", validationError, clusterId), cluster1);
+
+ String hostName = "cluster1.appserver.foo.org";
+ Assert.assertTrue(String.format("%s, hostname not found: [hostname] %s", validationError, hostName), hostNameExist(cluster1, hostName));
+
+ hostName = "cluster1.org";
+ Assert.assertTrue(String.format("%s, hostname not found: [hostname] %s", validationError, hostName), hostNameExist(cluster1, hostName));
+ Assert.assertEquals(String.format("%s, algorithm not valid", validationError), "round-robin", cluster1.getLoadBalanceAlgorithmName());
+
+ String memberId = "m1";
+ Member m1 = cluster1.getMember(memberId);
+ Assert.assertNotNull(String.format("%s, member not found: [member] %s", validationError, memberId), m1);
+ Assert.assertEquals(String.format("%s, member ip not valid", validationError), "10.0.0.10", m1.getMemberIp());
+
+ String portName = "http";
+ Port m1Http = m1.getPort(portName);
+ Assert.assertNotNull(String.format("%s, port not found: [member] %s [port] %s", validationError, memberId, portName), m1Http);
+ Assert.assertEquals(String.format("%s, port value not valid: [member] %s [port] %s", validationError, memberId, portName), 8080, m1Http.getValue());
+ Assert.assertEquals(String.format("%s, port proxy not valid: [member] %s [port] %s", validationError, memberId, portName), 80, m1Http.getProxy());
+
+ } finally {
+ TopologyManager.releaseReadLock();
+ LoadBalancerConfiguration.clear();
+ }
+ }
+
+ private boolean hostNameExist(Cluster cluster, String hostName) {
+ for (String hostName_ : cluster.getHostNames()) {
+ if (hostName_.equals(hostName))
+ return true;
}
+ return false;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/5359937c/components/org.apache.stratos.load.balancer/src/test/resources/sample/configuration/loadbalancer1.conf
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.load.balancer/src/test/resources/sample/configuration/loadbalancer1.conf b/components/org.apache.stratos.load.balancer/src/test/resources/sample/configuration/loadbalancer1.conf
index 794e0c2..c135405 100755
--- a/components/org.apache.stratos.load.balancer/src/test/resources/sample/configuration/loadbalancer1.conf
+++ b/components/org.apache.stratos.load.balancer/src/test/resources/sample/configuration/loadbalancer1.conf
@@ -15,9 +15,11 @@
# specific language governing permissions and limitations
# under the License.
-# Load balancer test configuration
-# ----------------------------------
-# Test case: Verify topology-event-listener-enabled = true scenario
+# Load balancer test configuration 1
+# -----------------------------------
+# topology-event-listener-enabled = true
+# cep-stats-publisher-enabled = true
+#
loadbalancer {
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/5359937c/components/org.apache.stratos.load.balancer/src/test/resources/sample/configuration/loadbalancer2.conf
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.load.balancer/src/test/resources/sample/configuration/loadbalancer2.conf b/components/org.apache.stratos.load.balancer/src/test/resources/sample/configuration/loadbalancer2.conf
index 5d1fd95..159bc2e 100755
--- a/components/org.apache.stratos.load.balancer/src/test/resources/sample/configuration/loadbalancer2.conf
+++ b/components/org.apache.stratos.load.balancer/src/test/resources/sample/configuration/loadbalancer2.conf
@@ -15,9 +15,11 @@
# specific language governing permissions and limitations
# under the License.
-# Load balancer test configuration
-# ----------------------------------
-# Test case: Verify topology-event-listener-enabled = false scenario
+# Load balancer test configuration 2
+# -----------------------------------
+# topology-event-listener-enabled = false
+# cep-stats-publisher-enabled = true
+#
loadbalancer {
@@ -80,7 +82,7 @@ loadbalancer {
app-server { # service name, a unique identifier to identify a service
clusters {
app-server-cluster1 { # cluster id, a unique identifier to identify a cluster
- hosts: cluster1.appserver.foo.org; # comma separated hostname list
+ hosts: cluster1.appserver.foo.org, cluster1.org; # comma separated hostname list
algorithm: round-robin; # algorithm name
members {
m1 { # member id, a unique identifier to identify a member
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/5359937c/components/org.apache.stratos.load.balancer/src/test/resources/sample/configuration/loadbalancer3.conf
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.load.balancer/src/test/resources/sample/configuration/loadbalancer3.conf b/components/org.apache.stratos.load.balancer/src/test/resources/sample/configuration/loadbalancer3.conf
index 3cd20be..dd9be36 100755
--- a/components/org.apache.stratos.load.balancer/src/test/resources/sample/configuration/loadbalancer3.conf
+++ b/components/org.apache.stratos.load.balancer/src/test/resources/sample/configuration/loadbalancer3.conf
@@ -15,9 +15,11 @@
# specific language governing permissions and limitations
# under the License.
-# Load balancer test configuration
-# ----------------------------------
-# Test case: Verify cep-stats-publisher-enabled = false scenario
+# Load balancer test configuration 3
+# -----------------------------------
+# topology-event-listener-enabled = true
+# cep-stats-publisher-enabled = false
+#
loadbalancer {
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/5359937c/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Cluster.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Cluster.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Cluster.java
index 16ec972..e0981a8 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Cluster.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Cluster.java
@@ -34,7 +34,7 @@ public class Cluster implements Serializable {
private String serviceName;
private String clusterId;
- private String hostName;
+ private List<String> hostNames;
private String tenantRange;
private String autoscalePolicyName;
private String deploymentPolicyName = "economy-deployment";
@@ -44,11 +44,13 @@ public class Cluster implements Serializable {
// Key: Member.memberId
private Map<String, Member> memberMap;
+ private String loadBalanceAlgorithmName;
private Properties properties;
public Cluster(String serviceName, String clusterId, String autoscalePolicyName) {
this.serviceName = serviceName;
this.clusterId = clusterId;
+ this.hostNames = new ArrayList<String>();
this.autoscalePolicyName = autoscalePolicyName;
this.memberMap = new HashMap<String, Member>();
}
@@ -61,12 +63,12 @@ public class Cluster implements Serializable {
return clusterId;
}
- public String getHostName() {
- return hostName;
+ public List<String> getHostNames() {
+ return hostNames;
}
- public void setHostName(String hostName) {
- this.hostName = hostName;
+ public void addHostName(String hostName) {
+ this.hostNames.add(hostName);
}
public String getTenantRange() {
@@ -146,5 +148,12 @@ public class Cluster implements Serializable {
this.deploymentPolicyName = deploymentPolicy;
}
+ public String getLoadBalanceAlgorithmName() {
+ return loadBalanceAlgorithmName;
+ }
+
+ public void setLoadBalanceAlgorithmName(String loadBalanceAlgorithmName) {
+ this.loadBalanceAlgorithmName = loadBalanceAlgorithmName;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/5359937c/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Topology.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Topology.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Topology.java
index a510087..57e99e8 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Topology.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Topology.java
@@ -66,4 +66,7 @@ public class Topology implements Serializable {
return this.serviceMap.containsKey(serviceName);
}
+ public void clear() {
+ this.serviceMap.clear();
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/5359937c/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterCreatedEventProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterCreatedEventProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterCreatedEventProcessor.java
index bd3dca6..a4d09ba 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterCreatedEventProcessor.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterCreatedEventProcessor.java
@@ -88,7 +88,7 @@ public class ClusterCreatedEventProcessor extends MessageProcessor {
// Apply changes to the topology
Cluster cluster = new Cluster(event.getServiceName(), event.getClusterId(), event.getAutoscalingPolicyName());
- cluster.setHostName(event.getHostName());
+ cluster.addHostName(event.getHostName());
cluster.setTenantRange(event.getTenantRange());
service.addCluster(cluster);
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/5359937c/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 d282a76..e35e593 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
@@ -66,21 +66,22 @@ public class HAProxyConfigWriter {
}
for (Port port : service.getPorts()) {
-
- String frontendId = cluster.getClusterId() + "-proxy-" + port.getProxy();
- String backendId = frontendId + "-members";
-
- frontendBackendCollection.append("frontend ").append(frontendId).append(NEW_LINE);
- frontendBackendCollection.append("\tbind ").append(cluster.getHostName()).append(":").append(port.getProxy()).append(NEW_LINE);
- frontendBackendCollection.append("\tdefault_backend ").append(backendId).append(NEW_LINE);
- frontendBackendCollection.append(NEW_LINE);
- frontendBackendCollection.append("backend ").append(backendId).append(NEW_LINE);
-
- for (Member member : cluster.getMembers()) {
- frontendBackendCollection.append("\tserver ").append(member.getMemberId()).append(" ")
- .append(member.getMemberIp()).append(":").append(port.getValue()).append(NEW_LINE);
+ for(String hostName : cluster.getHostNames()) {
+ String frontendId = cluster.getClusterId() + "-host-" + hostName + "-proxy-" + port.getProxy();
+ String backendId = frontendId + "-members";
+
+ frontendBackendCollection.append("frontend ").append(frontendId).append(NEW_LINE);
+ frontendBackendCollection.append("\tbind ").append(hostName).append(":").append(port.getProxy()).append(NEW_LINE);
+ frontendBackendCollection.append("\tdefault_backend ").append(backendId).append(NEW_LINE);
+ frontendBackendCollection.append(NEW_LINE);
+ frontendBackendCollection.append("backend ").append(backendId).append(NEW_LINE);
+
+ for (Member member : cluster.getMembers()) {
+ frontendBackendCollection.append("\tserver ").append(member.getMemberId()).append(" ")
+ .append(member.getMemberIp()).append(":").append(port.getValue()).append(NEW_LINE);
+ }
+ frontendBackendCollection.append(NEW_LINE);
}
- frontendBackendCollection.append(NEW_LINE);
}
}
}
[2/2] git commit: Merge remote-tracking branch 'origin/master'
Posted by im...@apache.org.
Merge remote-tracking branch 'origin/master'
Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/ceb407eb
Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/ceb407eb
Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/ceb407eb
Branch: refs/heads/master
Commit: ceb407eb033335b3fb5f324a8f8850734052c4e0
Parents: 5359937 d40d83f
Author: Imesh Gunaratne <im...@apache.org>
Authored: Tue Dec 3 15:32:19 2013 +0530
Committer: Imesh Gunaratne <im...@apache.org>
Committed: Tue Dec 3 15:32:19 2013 +0530
----------------------------------------------------------------------
.../apache/stratos/autoscaler/Constants.java | 2 +
.../health/HealthEventMessageDelegator.java | 34 +------
.../processors/AutoscalerTopologyReceiver.java | 22 +++--
.../src/test/resources/autoscaler-old.drl | 97 ++++++++++++++------
.../src/test/resources/autoscaler.drl | 97 ++++++--------------
.../controller/topology/TopologyBuilder.java | 3 +
.../event/topology/MemberActivatedEvent.java | 10 ++
.../topology/InstanceSpawnedEventProcessor.java | 1 +
.../FaultMessageEventFormatter.xml | 2 +-
tools/stratos-installer/conf/setup.conf | 4 +-
.../config/cc/repository/conf/jndi.properties | 4 +
tools/stratos-installer/setup.sh | 68 ++------------
tools/stratos-installer/start-servers.sh | 2 +-
13 files changed, 145 insertions(+), 201 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/ceb407eb/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java
----------------------------------------------------------------------