Updated Branches: refs/heads/master 3780649d9 -> c30afba9d
Added properties service.multi-tenant, cluster.tenant-range to load balancer configuration and updated unit tests Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/c30afba9 Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/c30afba9 Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/c30afba9 Branch: refs/heads/master Commit: c30afba9d439735e31f2865edc3a92023262fa15 Parents: 3780649 Author: Imesh Gunaratne <[email protected]> Authored: Sun Dec 8 12:50:10 2013 +0530 Committer: Imesh Gunaratne <[email protected]> Committed: Sun Dec 8 12:50:10 2013 +0530 ---------------------------------------------------------------------- .../balancer/conf/LoadBalancerConfiguration.java | 19 ++++++++++++++++--- .../load/balancer/conf/util/Constants.java | 2 ++ .../test/LoadBalancerConfigurationTest.java | 5 ++++- .../sample/configuration/loadbalancer2.conf | 2 ++ .../distribution/src/main/conf/loadbalancer.conf | 2 ++ 5 files changed, 26 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/c30afba9/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 cb2397d..a977391 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 @@ -374,14 +374,27 @@ public class LoadBalancerConfiguration { validateRequiredNode(servicesNode, Constants.CONF_ELEMENT_SERVICES); for (Node serviceNode : servicesNode.getChildNodes()) { - // TODO: Add service type to service node - Service service = new Service(serviceNode.getName(), ServiceType.SingleTenant); + ServiceType serviceType = ServiceType.SingleTenant; + String multiTenant = serviceNode.getProperty(Constants.CONF_PROPERTY_MULTI_TENANT); + if (StringUtils.isNotBlank(multiTenant) && (Boolean.parseBoolean(multiTenant))) { + serviceType = ServiceType.MultiTenant; + } + Service service = new Service(serviceNode.getName(), serviceType); Node clustersNode = serviceNode.findChildNodeByName(Constants.CONF_ELEMENT_CLUSTERS); for (Node clusterNode : clustersNode.getChildNodes()) { String clusterId = clusterNode.getName(); Cluster cluster = new Cluster(service.getServiceName(), clusterId, null); + String tenantRange = clusterNode.getProperty(Constants.CONF_PROPERTY_TENANT_RANGE); + if (StringUtils.isNotBlank(tenantRange)) { + if (service.getServiceType() != ServiceType.MultiTenant) { + throw new InvalidConfigurationException(String.format("%s property is not valid for non multi-tenant service cluster: [service] %s [cluster] %s", + Constants.CONF_PROPERTY_TENANT_RANGE, service.getServiceName(), cluster.getClusterId())); + } + cluster.setTenantRange(tenantRange); + } + String algorithm = clusterNode.getProperty(Constants.CONF_PROPERTY_ALGORITHM); if (StringUtils.isNotBlank(algorithm)) { cluster.setLoadBalanceAlgorithmName(algorithm); @@ -426,7 +439,7 @@ public class LoadBalancerConfiguration { // Add service to topology manager if not exists try { TopologyManager.acquireWriteLock(); - if(!TopologyManager.getTopology().serviceExists(service.getServiceName())) { + if (!TopologyManager.getTopology().serviceExists(service.getServiceName())) { TopologyManager.getTopology().addService(service); } } finally { http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/c30afba9/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/conf/util/Constants.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/conf/util/Constants.java b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/conf/util/Constants.java index cc5181b..e858858 100755 --- a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/conf/util/Constants.java +++ b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/conf/util/Constants.java @@ -49,7 +49,9 @@ public class Constants { public static final String CONF_PROPERTY_TOPOLOGY_SERVICE_FILTER = "topology-service-filter"; public static final String CONF_PROPERTY_TOPOLOGY_CLUSTER_FILTER = "topology-cluster-filter"; public static final String CONF_PROPERTY_MULTI_TENANCY = "multi-tenancy"; + public static final String CONF_PROPERTY_MULTI_TENANT = "multi-tenant"; public static final String CONF_PROPERTY_TENANT_IDENTIFIER = "tenant-identifier"; + public static final String CONF_PROPERTY_TENANT_RANGE = "tenant-range"; public static final String CONF_PROPERTY_VALUE_TENANT_ID = "tenant-id"; public static final String CONF_PROPERTY_VALUE_TENANT_DOMAIN = "tenant-domain"; public static final String CONF_PROPERTY_TENANT_IDENTIFIER_REGEX = "tenant-identifier-regex"; http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/c30afba9/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 89ee6f3..7353fed 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 @@ -80,7 +80,7 @@ public class LoadBalancerConfigurationTest { Assert.assertEquals(String.format("%s, cep port is not valid", validationError), 7615, configuration.getCepPort()); Assert.assertTrue(String.format("%s, multi-tenancy is not true", validationError), configuration.isMultiTenancyEnabled()); Assert.assertEquals(String.format("%s, tenant-identifier is not valid", validationError), TenantIdentifier.TenantDomain, configuration.getTenantIdentifier()); - Assert.assertEquals(String.format("%s, tenant-identifier-regex is not valid", validationError), "t/(.+)/", configuration.getTenantIdentifierRegex()); + Assert.assertEquals(String.format("%s, tenant-identifier-regex is not valid", validationError), "t/([^/]*)/", configuration.getTenantIdentifierRegex()); } finally { LoadBalancerConfiguration.clear(); } @@ -108,9 +108,12 @@ public class LoadBalancerConfigurationTest { Service appServer = topology.getService(serviceName); Assert.assertNotNull(String.format("%s, service not found: [service] %s", validationError, serviceName), appServer); + Assert.assertTrue(String.format("%s, multi-tenant is not true: [service] %s", validationError, serviceName), appServer.getServiceType() == ServiceType.MultiTenant); + String clusterId = "app-server-cluster1"; Cluster cluster1 = appServer.getCluster(clusterId); Assert.assertNotNull(String.format("%s, cluster not found: [cluster] %s", validationError, clusterId), cluster1); + Assert.assertEquals(String.format("%s, tenant range is not valid: [cluster] %s", validationError, clusterId), cluster1.getTenantRange(), "1-100"); String hostName = "cluster1.appserver.foo.org"; Assert.assertTrue(String.format("%s, hostname not found: [hostname] %s", validationError, hostName), hostNameExist(cluster1, hostName)); http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/c30afba9/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 4663336..d49d4ab 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 @@ -87,9 +87,11 @@ loadbalancer { services { app-server { # service name, a unique identifier to identify a service + multi-tenant: true; # Set to true if the service is multi-tenant clusters { app-server-cluster1 { # cluster id, a unique identifier to identify a cluster hosts: cluster1.appserver.foo.org, cluster1.org; # comma separated hostname list + tenant-range: 1-100; # Tenant range of the cluster 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/c30afba9/products/load-balancer/modules/distribution/src/main/conf/loadbalancer.conf ---------------------------------------------------------------------- diff --git a/products/load-balancer/modules/distribution/src/main/conf/loadbalancer.conf b/products/load-balancer/modules/distribution/src/main/conf/loadbalancer.conf index ce9967f..789f12a 100644 --- a/products/load-balancer/modules/distribution/src/main/conf/loadbalancer.conf +++ b/products/load-balancer/modules/distribution/src/main/conf/loadbalancer.conf @@ -85,9 +85,11 @@ loadbalancer { # # services { # app-server { # service name, a unique identifier to identify a service + # multi-tenant: true; # Set to true if the service is multi-tenant # clusters { # app-server-cluster1 { # cluster id, a unique identifier to identify a cluster # hosts: cluster1.appserver.foo.org, cluster1.org; # comma separated hostname list + # tenant-range: 1-100; # Tenant range of the cluster # algorithm: round-robin; # algorithm name # members { # m1 { # member id, a unique identifier to identify a member
