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/11/05 11:06:08 UTC
[2/2] git commit: Cleaned load balancer common component
Cleaned load balancer common component
Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/b975aa3c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/b975aa3c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/b975aa3c
Branch: refs/heads/master
Commit: b975aa3c1dad3de01e4953860ad3d8ecc204f6d8
Parents: 812c115
Author: Imesh Gunaratne <im...@apache.org>
Authored: Tue Nov 5 15:35:55 2013 +0530
Committer: Imesh Gunaratne <im...@apache.org>
Committed: Tue Nov 5 15:35:55 2013 +0530
----------------------------------------------------------------------
.../load/balancer/common/cache/LRUCache.java | 103 --
.../balancer/common/cache/URLMappingCache.java | 47 -
.../common/conf/LoadBalancerConfiguration.java | 1202 ------------------
.../LoadBalancerConfigurationDSComponent.java | 47 -
.../balancer/common/conf/structure/Node.java | 356 ------
.../common/conf/structure/NodeBuilder.java | 140 --
.../balancer/common/conf/util/Constants.java | 50 -
.../balancer/common/conf/util/HostContext.java | 161 ---
.../conf/util/LoadBalancerConfigUtil.java | 305 -----
.../common/conf/util/TenantDomainContext.java | 80 --
.../mgt/SubDomainAwareGroupManagementAgent.java | 58 -
.../LoadBalancerCommonServiceComponent.java | 41 +
.../common/mb/connect/TopicConnector.java | 103 --
.../common/mb/heartbeat/TopicHealthChecker.java | 81 --
.../common/mb/publish/TopicPublisher.java | 109 --
.../common/mb/subscribe/TopicSubscriber.java | 119 --
.../RequestTokenReplicationCommand.java | 73 --
.../LoadBalancerConfigurationService.java | 79 --
.../LoadBalancerConfigurationServiceImpl.java | 48 -
.../balancer/common/util/DomainMapping.java | 45 -
.../stratos/load/balancer/common/util/Util.java | 54 -
.../src/main/resources/META-INF/services.xml | 31 -
.../common/test/LoadBalancerConfigUtilTest.java | 48 -
.../test/LoadBalancerConfigurationTest.java | 169 ---
.../balancer/common/test/NodeBuilderTest.java | 123 --
.../src/test/resources/loadbalancer.conf | 84 --
.../src/test/resources/loadbalancer1.conf | 60 -
.../src/test/resources/loadbalancer2.conf | 50 -
.../src/test/resources/testng.xml | 36 -
29 files changed, 41 insertions(+), 3861 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/b975aa3c/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/cache/LRUCache.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/cache/LRUCache.java b/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/cache/LRUCache.java
deleted file mode 100644
index a8eed1c..0000000
--- a/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/cache/LRUCache.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/**
- * 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.common.cache;
-
-
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.concurrent.locks.ReadWriteLock;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-
-/**
- * A simple, thread-safe LRU cache implementation. This cache allows concurrent reads.
- * Concurrent write attempts are synchronized using an exclusive lock.
- */
-public class LRUCache<K,V> extends LinkedHashMap<K,V> {
-
- private static final long serialVersionUID = 5901026458782787628L;
- private int maxEntries;
- private ReadWriteLock lock;
-
- public LRUCache(int maxEntries) {
- super(maxEntries + 1, 1, false);
- this.maxEntries = maxEntries;
- this.lock = new ReentrantReadWriteLock();
- }
-
- @Override
- public V get(Object key) {
- lock.readLock().lock();
- try {
- return super.get(key);
- } finally {
- lock.readLock().unlock();
- }
- }
-
- @Override
- public V put(K key, V value) {
- lock.writeLock().lock();
- try {
- return super.put(key, value);
- } finally {
- lock.writeLock().unlock();
- }
- }
-
- @Override
- public V remove(Object key) {
- lock.writeLock().lock();
- try {
- return super.remove(key);
- } finally {
- lock.writeLock().unlock();
- }
- }
-
- @Override
- public void clear() {
- lock.writeLock().lock();
- try {
- super.clear();
- } finally {
- lock.writeLock().unlock();
- }
- }
-
- @Override
- protected boolean removeEldestEntry(Map.Entry<K,V> eldest) {
- boolean remove = size() > maxEntries;
- if (remove) {
- handleRemovableEntry(eldest);
- }
- return remove;
- }
-
- protected void handleRemovableEntry(Map.Entry<K,V> entry) {
-
- }
-
- public void exclusiveLock() {
- lock.writeLock().lock();
- }
-
- public void release() {
- lock.writeLock().unlock();
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/b975aa3c/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/cache/URLMappingCache.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/cache/URLMappingCache.java b/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/cache/URLMappingCache.java
deleted file mode 100644
index e08a5d3..0000000
--- a/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/cache/URLMappingCache.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * 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.common.cache;
-
-import org.apache.stratos.load.balancer.common.util.DomainMapping;
-import java.util.Map;
-
-public class URLMappingCache {
- private Map<String,DomainMapping> validMappings;
-
- private static URLMappingCache instance = null;
- protected URLMappingCache(int maxValidKeys) {
- validMappings = new LRUCache<String, DomainMapping>(maxValidKeys);
- }
-
- public void addValidMapping(String hostName, DomainMapping mapping) {
- validMappings.put(hostName, mapping);
- }
-
- public DomainMapping getMapping(String hostName) {
- return validMappings.get(hostName);
- }
-
- public static URLMappingCache getInstance(int maxValidKeys) {
- if(instance == null) {
-
- instance = new URLMappingCache(maxValidKeys);
- }
- return instance;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/b975aa3c/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/conf/LoadBalancerConfiguration.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/conf/LoadBalancerConfiguration.java b/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/conf/LoadBalancerConfiguration.java
deleted file mode 100644
index 952c651..0000000
--- a/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/conf/LoadBalancerConfiguration.java
+++ /dev/null
@@ -1,1202 +0,0 @@
-/**
- * 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.common.conf;
-
-import org.apache.commons.lang.builder.HashCodeBuilder;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.synapse.commons.util.PropertyHelper;
-import org.apache.stratos.load.balancer.common.conf.structure.Node;
-import org.apache.stratos.load.balancer.common.conf.structure.NodeBuilder;
-import org.apache.stratos.load.balancer.common.conf.util.Constants;
-import org.apache.stratos.load.balancer.common.conf.util.HostContext;
-import org.apache.stratos.load.balancer.common.conf.util.LoadBalancerConfigUtil;
-
-import java.io.*;
-import java.net.URL;
-import java.util.*;
-
-/**
- * Data object which hold configuration data of the load analyzer task
- */
-@SuppressWarnings("unused")
-public class LoadBalancerConfiguration implements Serializable {
-
- protected static final long serialVersionUID = -5553545217542808233L;
-
- private static final Log log = LogFactory.getLog(LoadBalancerConfiguration.class);
-
- /**
- * This map is there to speed up the lookup time.
- * Key: domain
- * <p/>
- * Value: A map whose key is sub domain and value is ServiceConfiguration
- */
- private Map<String, Map<String, ServiceConfiguration>> serviceConfigurations =
- new HashMap<String, Map<String, ServiceConfiguration>>();
-
- /**
- * Key - host name
- * Value - {@link HostContext}
- */
- private transient Map<String, HostContext> hostCtxt = new HashMap<String, HostContext>();
-
- /**
- * This map is there to speed up the lookup time.
- * Key: service name/cartridge type (Stratos2). NOTE: that this is not the service cluster domain.
- * Value: list of {@link ServiceConfiguration} - corresponding objects under a service name.
- */
- private Map<String, List<ServiceConfiguration>> serviceNameToServiceConfigurations =
- new HashMap<String, List<ServiceConfiguration>>();
-
- /**
- * This list will be used to identify host name duplications among different services.
- * Within a service there can be duplications, but among different services you can't have duplications.
- * Key - service name
- * Value - hosts under the respective service.
- */
- private Map<String, Set<String>> hostNamesTracker = new HashMap<String, Set<String>>();
-
- protected ServiceConfiguration defaultServiceConfig;
- protected LBConfiguration lbConfig;
-
- /**
- * LBConfig file as a String
- */
- protected String lbConfigString;
-
- /**
- * Root node object for loadbalancer.conf
- */
- protected Node rootNode;
-
- private LoadBalancerConfiguration(){
- init(System.getProperty("loadbalancer.conf"));
- }
-
- private static LoadBalancerConfiguration instance ;
-
- public static LoadBalancerConfiguration getInstance(){
- if(instance == null){
- instance = new LoadBalancerConfiguration();
- }
- return instance;
- }
-
- /**
- * Sample loadbalancer.conf:
- * <p/>
- * loadbalancer {
- * # minimum number of load balancer instances
- * instances 1;
- * # whether autoscaling enable or not
- * enable_autoscaler true;
- * # End point reference of the Autoscaler Service
- * autoscaler_service_epr https://10.100.3.81:9443/services/AutoscalerService/;
- * # interval between two task executions in milliseconds
- * autoscaler_task_interval 1000;
- * # after an instance booted up, task will wait till this much of time and let the server started up
- * server_startup_delay 15000;
- * }
- * <p/>
- * services {
- * defaults {
- * min_app_instances 1;
- * max_app_instances 5;
- * queue_length_per_node 400;
- * rounds_to_average 10;
- * instances_per_scale_up 1;
- * message_expiry_time 60000;
- * }
- * <p/>
- * appserver {
- * hosts appserver.cloud-test.wso2.com,as.cloud-test.wso2.com;
- * domains {
- * wso2.as1.domain {
- * tenant_range 1-100;
- * }
- * wso2.as2.domain {
- * tenant_range 101-200;
- * }
- * wso2.as3.domain {
- * tenant_range *;
- * }
- * }
- * }
- * }
- *
- * @param configURL URL of the load balancer config
- */
- public void init(String configURL) {
-
- if(configURL == null){
- String msg = "Cannot locate the location of the loadbalancer.conf file." +
- " You need to set the 'loadbalancer.conf' system property.";
- log.error(msg);
- throw new RuntimeException(msg);
- }
-
- if (configURL.startsWith("$system:")) {
- configURL = System.getProperty(configURL.substring("$system:".length()));
- }
-
- try {
-
- // get loadbalancer.conf file as a String
- if (configURL.startsWith(File.separator)) {
- lbConfigString = createLBConfigString(configURL);
- } else {
- lbConfigString = createLBConfigString(new URL(configURL).openStream());
- }
-
- } catch (Exception e) {
- String msg = "Cannot read configuration file from " + configURL;
- log.error(msg, e);
- throw new RuntimeException(msg, e);
- }
-
- // build a Node object for whole loadbalancer.conf
- rootNode = new Node();
- rootNode.setName("root");
- rootNode = NodeBuilder.buildNode(rootNode, lbConfigString);
-
- // load 'loadbalancer' node
- Node lbConfigNode = rootNode.findChildNodeByName(Constants.LOAD_BALANCER_ELEMENT);
-
- if(lbConfigNode != null){
- createConfiguration(lbConfig = new LBConfiguration(), lbConfigNode);
- }
-
- // load services node
- Node servicesConfigNode = rootNode.findChildNodeByName(Constants.SERVICES_ELEMENT);
-
- if (servicesConfigNode == null) {
- String msg = "Mandatory " + Constants.SERVICES_ELEMENT +
- " element can not be found in the configuration file.";
- log.error(msg);
- throw new RuntimeException(msg);
- }
-
- // Set services configuration
- createServicesConfig(servicesConfigNode);
-
- }
-
-
- /**
- * Process the content of the following 'services' element
- * <p/>
- * services {
- * defaults {
- * min_app_instances 1;
- * max_app_instances 5;
- * queue_length_per_node 400;
- * rounds_to_average 10;
- * instances_per_scale_up 1;
- * message_expiry_time 60000;
- * }
- * <p/>
- * appserver {
- * hosts appserver.cloud-test.wso2.com,as.cloud-test.wso2.com;
- * domains {
- * wso2.as1.domain {
- * tenant_range 1-100;
- * }
- * wso2.as2.domain {
- * tenant_range 101-200;
- * }
- * wso2.as3.domain {
- * tenant_range *;
- * }
- * }
- * }
- * }
- *
- * @param servicesConfigNode services element's Node
- */
- public List<ServiceConfiguration> createServicesConfig(Node servicesConfigNode) {
-
- // current list of service configs
- List<ServiceConfiguration> currentServiceConfigs = new ArrayList<ServiceConfiguration>();
-
- // Building default configuration
- Node defaultNode = servicesConfigNode.findChildNodeByName(Constants.DEFAULTS_ELEMENT);
-
- if (defaultNode != null) {
-
- createConfiguration(defaultServiceConfig = new ServiceConfiguration(), defaultNode);
- }
-
- // Building custom services configuration
- for (Node serviceNode : servicesConfigNode.getChildNodes()) {
- //skip default node
- if (serviceNode != defaultNode) {
-
- String serviceName = serviceNode.getName();
-
- // reading domains
-
- Node domainsNode;
-
- if (serviceNode.getChildNodes().isEmpty() ||
- !(domainsNode = serviceNode.getChildNodes().get(0)).getName().equals(
- Constants.DOMAIN_ELEMENT)) {
-
- String msg = "The mandatory domains element, child of the " + serviceName +
- " element is not specified in the configuration file. \n"+
- serviceNode.toString();
- log.error(msg);
- throw new RuntimeException(msg);
- }
-
- if (domainsNode.getChildNodes().isEmpty()) {
- // this is probably a mistake, so we don't proceed
- String msg = "No domain is specified under " + Constants.DOMAIN_ELEMENT +
- " of " + serviceName + " element.";
- log.error(msg);
- throw new RuntimeException(msg);
- }
-
- ServiceConfiguration serviceConfig;
-
- // iterates through all the service domain specified in this service element.
- for (Node domain : domainsNode.getChildNodes()) {
-
- // create a new service configuration
- serviceConfig = new ServiceConfiguration();
-
- // set service name
- serviceConfig.setServiceName(serviceName);
-
- // set domain name
- serviceConfig.setDomain(domain.getName());
-
- // let's set properties common to all domains specified in this service element.
- createConfiguration(serviceConfig, serviceNode);
-
- // load properties specified under this service domain element.
- createConfiguration(serviceConfig, domain);
-
- // check host name duplication
- if(isDuplicatedHost(serviceNode.getName(), serviceConfig)){
- // this is probably a mistake, so we don't proceed
- String msg = "Duplicated host names detected for different service domains.\n" +
- "Element: \n"+serviceNode.toString();
- log.error(msg);
- throw new RuntimeException(msg);
- }
-
- currentServiceConfigs.add(serviceConfig);
-
- }
- }
- }
-
- for (ServiceConfiguration serviceConfiguration : currentServiceConfigs) {
-
- // add the built ServiceConfiguration, to the map
- addServiceConfiguration(serviceConfiguration);
-
- }
-
- return currentServiceConfigs;
-
- }
-
-
- public boolean addServiceConfiguration(ServiceConfiguration serviceConfig) {
-
- Map<String, ServiceConfiguration> map;
- String domain = serviceConfig.getDomain();
-
- if(domain == null){
- String msg = "Domain of a Service Configuration cannot be null. Hence this " +
- "Configuration will be neglected.";
- log.error(msg);
- return false;
- }
-
- String subDomain = serviceConfig.getSubDomain();
-
- if (serviceConfigurations.containsKey(domain)) {
- map = serviceConfigurations.get(domain);
- } else {
- map = new HashMap<String, ServiceConfiguration>();
- }
- // put this serviceConfig
- map.put(subDomain, serviceConfig);
-
- // update the parent map
- serviceConfigurations.put(domain, map);
-
- // add to serviceNameToServiceConfiguration map
- List<ServiceConfiguration> configs;
- if(serviceNameToServiceConfigurations.get(serviceConfig.getServiceName()) == null){
- configs = new ArrayList<ServiceConfiguration>();
-
- }else{
- configs = serviceNameToServiceConfigurations.get(serviceConfig.getServiceName());
- }
-
- if(!configs.contains(serviceConfig)){
- configs.add(serviceConfig);
- }
- serviceNameToServiceConfigurations.put(serviceConfig.getServiceName(), configs);
-
- return true;
- }
-
- public ServiceConfiguration removeServiceConfiguration(String domain, String subDomain) {
-
- Map<String, ServiceConfiguration> map;
- ServiceConfiguration serviceConfig = null;
-
- if(domain == null){
- String msg = "Domain of a Service Configuration cannot be null. Hence this " +
- "Configuration will be neglected.";
- log.error(msg);
- return null;
- }
-
- if (serviceConfigurations.containsKey(domain)) {
- map = serviceConfigurations.get(domain);
-
- if(map != null){
- serviceConfig = map.remove(subDomain);
- }
- }
-
- if(serviceConfig == null){
- String msg = "No matching service configuration found for domain: "+domain+
- ", sub domain: "+subDomain;
- log.error(msg);
- return null;
- }
-
- String serviceName = serviceConfig.getServiceName();
-
- if (serviceName != null && serviceNameToServiceConfigurations.containsKey(serviceName)) {
- if(serviceConfig != null){
- List<ServiceConfiguration> list = serviceNameToServiceConfigurations.get(serviceName);
-
- list.remove(serviceConfig);
-
- serviceNameToServiceConfigurations.put(serviceName, list);
- }
- }
-
- Set<String> allHosts;
-
- if (hostNamesTracker.containsKey(serviceName)) {
- allHosts = hostNamesTracker.get(serviceName);
-
- for (String hostName : serviceConfig.getHosts()) {
-
- if (hostName != null) {
-
- allHosts.remove(hostName);
-
- hostCtxt.remove(hostName);
- }
- }
- }
-
- return serviceConfig;
- }
-
- public void resetData(){
- serviceConfigurations =
- new HashMap<String, Map<String, ServiceConfiguration>>();
-
- serviceNameToServiceConfigurations =
- new HashMap<String, List<ServiceConfiguration>>();
-
- }
-
-
- /**
- * Duplications can only be seen, when you traverse down the configuration file.
- *
- */
- public boolean isDuplicatedHost(String name, ServiceConfiguration serviceConfig) {
-
- /**
- * This will be populated with host names of all other services other than the
- * service subjected to the test.
- */
- List<String> hostsOtherThanMine = new ArrayList<String>(hostNamesTracker.values().size());
-
- for (Map.Entry<String, Set<String>> entry : hostNamesTracker.entrySet()) {
- if (!entry.getKey().equals(name)) {
- hostsOtherThanMine.addAll(entry.getValue());
- }
- }
-
- for (String host : serviceConfig.getHosts()) {
- if (!hostsOtherThanMine.isEmpty() && hostsOtherThanMine.contains(host)) {
- return true;
- }
- }
-
- addToHostNameTrackerMap(name, serviceConfig.getHosts());
-
- return false;
- }
-
-
- public void addToHostNameTrackerMap(String name, List<String> hosts) {
-
- Set<String> allHosts;
-
- if (hostNamesTracker.containsKey(name)) {
- allHosts = hostNamesTracker.get(name);
- allHosts.addAll(hosts);
- } else {
- allHosts = new HashSet<String>(hosts);
- }
- hostNamesTracker.put(name, allHosts);
- }
-
- public void addToHostContextMap(String hostName, HostContext ctxt) {
-
- if (hostName != null && ctxt != null) {
- hostCtxt.put(hostName, ctxt);
- }
- }
-
- /**
- * Return a map of {@link HostContext}.
- * @return
- */
- public Map<String, HostContext> getHostContextMap() {
-
- List<Integer> tenantIds;
- Map<String, String> URLSuffixes;
-
- // FIXME if possible! I couldn't think of any other way to do this, at this moment.
- // Note: some of these for-loops are pretty small, thus no considerable performance overhead.
- // iterate through each service
- for (Iterator<Set<String>> it = hostNamesTracker.values().iterator(); it.hasNext();) {
-
- // iterate through host names of this service
- for (String hostName : ((Set<String>) it.next())) {
-
- // building HostContext
- HostContext ctxt = new HostContext(hostName);
-
- // iterate through domains of this host
- for (Map.Entry<String, Map<String, ServiceConfiguration>> parentMap : serviceConfigurations.entrySet()) {
-
- // iterate through sub domain of this domain
- for (Map.Entry<String, ServiceConfiguration> childMap : parentMap.getValue()
- .entrySet()) {
- // iterate through hosts of this
- for (String host : childMap.getValue().getHosts()) {
- // if a matching Service configuration is found.
- if (host.equals(hostName)) {
-
- String tenantRange = childMap.getValue().getTenantRange();
- String domain = parentMap.getKey();
- String subDomain = childMap.getKey();
-
- ctxt.addTenantDomainContexts(LoadBalancerConfigUtil.getTenantDomainContexts(tenantRange, domain, subDomain));
-
- break;
- }
- }
-
- //iterate through URL suffixes
- for(Map.Entry<String, String> entry : childMap.getValue().getUrl_suffix().entrySet()) {
- if(entry.getKey().equals(hostName)) {
-
- ctxt.setUrlSuffix(entry.getValue());
-
- break;
- }
-
- }
- }
- }
-
- // add this hostCtxt
- hostCtxt.put(hostName, ctxt);
- }
-
- }
-
- return hostCtxt;
-
- }
-
- protected void createConfiguration(Configuration config, Node node) {
-
- if (node == null) {
- String msg = "The configuration element for " +
- config.getClass().getName() + " is null.";
- throw new RuntimeException(msg);
- }
-
- try {
- // load properties
- for (Map.Entry<String, String> entry : node.getProperties().entrySet()) {
- String key = entry.getKey();
- String value = entry.getValue();
-
- PropertyHelper.setInstanceProperty(key, value, config);
- }
-
- } catch (Exception e) {
- String msg = "Error setting values to " + config.getClass().getName();
- log.error(msg, e);
- throw new RuntimeException(msg, e);
- }
- }
-
- public LBConfiguration getLoadBalancerConfig() {
- return lbConfig;
- }
-
- public String[] getServiceDomains() {
-
- Object[] objs = serviceConfigurations.keySet().toArray();
-
- return Arrays.copyOf(objs, objs.length, String[].class);
-
- }
-
- public String[] getServiceSubDomains(String domain) {
-
- if (serviceConfigurations.get(domain) != null) {
- Object[] objs = serviceConfigurations.get(domain).keySet().toArray();
- return Arrays.copyOf(objs, objs.length, String[].class);
- }
-
- return new String[0];
- }
-
- public ServiceConfiguration getServiceConfig(String domain, String subDomain) {
- if (serviceConfigurations.get(domain) != null) {
- return serviceConfigurations.get(domain).get(subDomain);
- }
- return null;
- }
-
-
- public List<ServiceConfiguration> getServiceConfigs(String serviceName) {
- return serviceNameToServiceConfigurations.get(serviceName);
- }
-
- /**
- * Convert given configuration file to a single String
- *
- * @param configFileName - file name to convert
- * @return String with complete lb configuration
- * @throws FileNotFoundException
- */
- public String createLBConfigString(String configFileName) throws FileNotFoundException {
- StringBuilder lbConfigString = new StringBuilder("");
-
- File configFile = new File(configFileName);
- Scanner scanner;
-
- scanner = new Scanner(configFile);
-
- while (scanner.hasNextLine()) {
- lbConfigString.append(scanner.nextLine().trim() + "\n");
- }
-
- return lbConfigString.toString().trim();
- }
-
- public String createLBConfigString(InputStream configFileName) throws IOException {
-
- // read the stream with BufferedReader
- BufferedReader br = new BufferedReader(new InputStreamReader(configFileName));
-
- StringBuilder sb = new StringBuilder();
-
- String line;
- while ((line = br.readLine()) != null) {
- sb.append(line.trim() + "\n");
- }
-
- return sb.toString().trim();
- }
-
- public abstract class Configuration implements Serializable {
-
- private static final long serialVersionUID = -5433889427746551250L;
- protected String imageId = System.getenv("ami_id");
- protected String payload;
- protected boolean payloadSet;
-
- protected String availability_zone = "us-east-1c";
- protected boolean availabilityZoneSet;
-
- protected String[] security_groups = new String[]{"default"};
- protected boolean securityGroupsSet;
-
- protected String instance_type = "m1.large";
- protected boolean instanceTypeSet;
-
- protected String additional_info;
-
- public String getImageId() {
- return imageId;
- }
-
- public String getAdditionalInfo() {
- return additional_info;
- }
-
- public String getAvailability_zone() {
- if (this instanceof LBConfiguration) {
- return availability_zone;
- }
- if (availabilityZoneSet) {
- return availability_zone;
- } else if (defaultServiceConfig != null && defaultServiceConfig.availabilityZoneSet) {
- return defaultServiceConfig.availability_zone;
- }
- return availability_zone;
- }
-
- public String[] getSecurityGroups() {
- if (this instanceof LBConfiguration) {
- return security_groups;
- }
- if (securityGroupsSet) {
- return security_groups;
- } else if (defaultServiceConfig != null && defaultServiceConfig.securityGroupsSet) {
- return defaultServiceConfig.security_groups;
- }
- return security_groups;
- }
-
- public String getInstanceType() {
- if (this instanceof LBConfiguration) {
- return instance_type;
- }
- if (instanceTypeSet) {
- return instance_type;
- } else if (defaultServiceConfig != null && defaultServiceConfig.instanceTypeSet) {
- return defaultServiceConfig.instance_type;
- }
- return instance_type;
- }
-
-
- public String getUserData() {
- if (payload == null) {
- payload = LoadBalancerConfigUtil.getUserData("resources/cluster_node.zip");
- }
- if (this instanceof LBConfiguration) {
- return payload;
- }
- if (payloadSet) {
- return payload;
- } else if (defaultServiceConfig != null && defaultServiceConfig.payloadSet) {
- return defaultServiceConfig.payload;
- }
- return payload;
- }
-
- public void setPayload(String payload) {
- this.payload = LoadBalancerConfigUtil.getUserData(LoadBalancerConfigUtil.replaceVariables(payload));
- this.payloadSet = true;
- }
-
- public void setAvailability_zone(String availabilityZone) {
- this.availability_zone = LoadBalancerConfigUtil.replaceVariables(availabilityZone);
- this.availabilityZoneSet = true;
- }
-
- public void setSecurity_groups(String securityGroups) {
- this.security_groups = LoadBalancerConfigUtil.replaceVariables(securityGroups).split(",");
- this.securityGroupsSet = true;
- }
-
- public void setInstance_type(String instanceType) {
- this.instance_type = LoadBalancerConfigUtil.replaceVariables(instanceType);
- this.instanceTypeSet = true;
- }
-
- }
-
- public class LBConfiguration extends Configuration implements Serializable {
-
- private static final long serialVersionUID = 1357143883932816418L;
- private String elasticIP;//= LoadBalancerConfigUtil.replaceVariables("${ELASTIC_IP}");
- private int instances = 1;
- private boolean isAutoscaleEnabled;
- private int autoscalerTaskInterval = 30000;
- private String autoscalerServiceEpr;
- private int serverStartupDelay = 60000;
- private int sizeOfCache = 0 ;
- private boolean failOver;
- private int sessionTimeOut = -1;
- private String groupManagementAgentClass;
- private String autoscalerTaskClass;
- private String mbServerUrl;
- private boolean useEmbeddedAutoscaler = true;
- private String algorithm = "org.apache.synapse.endpoints.algorithms.RoundRobin";
-
- public String getElasticIP() {
- return elasticIP;
- }
-
- public int getInstances() {
- return instances;
- }
-
- public boolean isAutoscaleEnabled() {
- return isAutoscaleEnabled;
- }
-
- public boolean useEmbeddedAutoscaler() {
- return useEmbeddedAutoscaler;
- }
-
- public boolean getFailOver() {
- return failOver;
- }
-
- public String getAutoscalerServiceEpr() {
- return autoscalerServiceEpr;
- }
-
- public int getAutoscalerTaskInterval() {
- return autoscalerTaskInterval;
- }
-
- public int getServerStartupDelay() {
- return serverStartupDelay;
- }
-
- public int getSessionTimeOut() {
- return sessionTimeOut;
- }
-
- public void setElasticIP(String elasticIP) {
- this.elasticIP = LoadBalancerConfigUtil.replaceVariables(elasticIP);
- }
-
- public void setInstances(int instances) {
- this.instances = instances;
- }
-
- public void setEnable_autoscaler(String isEnabled) {
- this.isAutoscaleEnabled = Boolean.parseBoolean(isEnabled);
- }
-
- public void setUse_embedded_autoscaler(String use) {
- this.useEmbeddedAutoscaler = Boolean.parseBoolean(use);
- }
-
- public void setFail_over(String isEnabled) {
- this.failOver = Boolean.parseBoolean(isEnabled);
- }
-
- public void setAutoscaler_service_epr(String epr) {
- this.autoscalerServiceEpr = epr;
- }
-
- public void setMb_server_url(String url) {
- this.mbServerUrl = url;
- }
-
- public String getMbServerUrl() {
- return mbServerUrl;
- }
-
- public void setAutoscaler_task_interval(String interval) {
- this.autoscalerTaskInterval = Integer.parseInt(interval);
- }
-
- public void setServer_startup_delay(String delay) {
- this.serverStartupDelay = Integer.parseInt(delay);
- }
-
- public void setSession_timeout(String timeout) {
- this.sessionTimeOut = Integer.parseInt(timeout);
- }
-
- public String getAlgorithm() {
- return algorithm;
- }
-
- public void setAlgorithm(String algorithm) {
- if (algorithm != null) {
- this.algorithm = algorithm;
- }
- }
-
- public int getSizeOfCache() {
- return sizeOfCache;
- }
-
- public void setSize_of_cache(int sizeOfCache) {
- this.sizeOfCache = sizeOfCache;
- }
-
- public String getGroupManagementAgentClass() {
- return groupManagementAgentClass;
- }
-
- public String getAutoscalerTaskClass() {
- return autoscalerTaskClass;
- }
-
- public void setGroup_mgt_agent(String groupManagementAgentClass){
- this.groupManagementAgentClass = groupManagementAgentClass;
- }
-
- public void setAutoscaler_task(String autoscalerTaskClass){
- this.autoscalerTaskClass = autoscalerTaskClass;
- }
- }
-
- public class ServiceConfiguration extends Configuration implements Serializable {
-
- private String serviceName;
-
- public String getServiceName() {
- return serviceName;
- }
-
- public void setServiceName(String name) {
- this.serviceName = name;
- }
-
- public String getPublicIp() {
- return publicIp;
- }
-
- public void setPublic_ip(String publicIp) {
- this.publicIp = publicIp;
- }
-
- private String publicIp;
-
- private static final long serialVersionUID = 8707314702788040116L;
- private int minAppInstances = 1;
- private boolean minAppInstancesSet;
-
- private int maxAppInstances = 3;
- private boolean maxAppInstancesSet;
-
- private int maxRequestsPerSecond = 100;
- private boolean maxRequestsPerSecondSet;
-
- private double alarmingUpperRate = 0.7;
- private boolean alarmingUpperRateSet;
-
- private double alarmingLowerRate = 0.2;
- private boolean alarmingLowerRateSet;
-
- private double scaleDownFactor = 0.25;
- private boolean scaleDownFactorSet;
-
- private int roundsToAverage = 10;
- private boolean roundsToAverageSet;
-
- private int instancesPerScaleUp = 1;
- private boolean instancesPerScaleUpSet;
-
- private int messageExpiryTime = 60000; // milliseconds
- private boolean messageExpiryTimeSet;
-
- private List<String> hosts = new ArrayList<String>();
- private Map<String, String> urlSuffixes = new HashMap<String, String>();
- private boolean hostsSet;
-
- private String domain;
-
- private String tenantRange;
- private boolean tenantRangeSet;
-
- private String subDomain = Constants.DEFAULT_SUB_DOMAIN;
- private boolean subDomainSet;
-
- public String getTenantRange() {
- if (tenantRangeSet) {
- return tenantRange;
- } else if (defaultServiceConfig != null && defaultServiceConfig.tenantRangeSet) {
- return defaultServiceConfig.tenantRange;
- }
- return tenantRange;
- }
-
- public String getDomain() {
- return domain;
- }
-
- public List<String> getHosts() {
- if (hostsSet) {
- return hosts;
- } else if (defaultServiceConfig != null && defaultServiceConfig.hostsSet) {
- return defaultServiceConfig.hosts;
- }
- return hosts;
- }
-
- public int getMinAppInstances() {
- if (minAppInstancesSet) {
- return minAppInstances;
- } else if (defaultServiceConfig != null && defaultServiceConfig.minAppInstancesSet) {
- return defaultServiceConfig.minAppInstances;
- }
- return minAppInstances;
- }
-
- public int getMaxAppInstances() {
- if (maxAppInstancesSet) {
- return maxAppInstances;
- } else if (defaultServiceConfig != null && defaultServiceConfig.maxAppInstancesSet) {
- return defaultServiceConfig.maxAppInstances;
- }
- return maxAppInstances;
- }
-
- public int getMaxRequestsPerSecond() {
- if (maxRequestsPerSecondSet) {
- return maxRequestsPerSecond;
- } else if (defaultServiceConfig != null && defaultServiceConfig.maxRequestsPerSecondSet) {
- return defaultServiceConfig.maxRequestsPerSecond;
- }
- return maxRequestsPerSecond;
- }
-
- public int getRoundsToAverage() {
- if (roundsToAverageSet) {
- return roundsToAverage;
- } else if (defaultServiceConfig != null && defaultServiceConfig.roundsToAverageSet) {
- return defaultServiceConfig.roundsToAverage;
- }
- return roundsToAverage;
- }
-
- public int getInstancesPerScaleUp() {
- if (instancesPerScaleUpSet) {
- return instancesPerScaleUp;
- } else if (defaultServiceConfig != null && defaultServiceConfig.instancesPerScaleUpSet) {
- return defaultServiceConfig.instancesPerScaleUp;
- }
- return instancesPerScaleUp;
- }
-
- public int getMessageExpiryTime() {
- if (messageExpiryTimeSet) {
- return messageExpiryTime;
- } else if (defaultServiceConfig != null && defaultServiceConfig.messageExpiryTimeSet) {
- return defaultServiceConfig.messageExpiryTime;
- }
- return messageExpiryTime;
- }
-
- public String getSubDomain() {
- if (subDomainSet) {
- return subDomain;
- } else if (defaultServiceConfig != null && defaultServiceConfig.subDomainSet) {
- return defaultServiceConfig.subDomain;
- }
- return subDomain;
- }
-
- public void setMin_app_instances(int minAppInstances) {
- this.minAppInstances = minAppInstances;
- this.minAppInstancesSet = true;
- }
-
- public void setMax_app_instances(int maxAppInstances) {
- if (maxAppInstances < 1) {
- LoadBalancerConfigUtil.handleException("maxAppInstances in the autoscaler task configuration " +
- "should be at least 1");
- }
- this.maxAppInstances = maxAppInstances;
- this.maxAppInstancesSet = true;
- }
-
- public void setAlarming_upper_rate(double rate) {
- if (rate > 0 && rate <= 1) {
- this.alarmingUpperRate = rate;
- this.alarmingUpperRateSet = true;
- }
- }
-
- public void setAlarming_lower_rate(double rate) {
- if (rate > 0 && rate <= 1) {
- this.alarmingLowerRate = rate;
- this.alarmingLowerRateSet = true;
- }
- }
-
- public void setScale_down_factor(double factor) {
- if (factor > 0 && factor <= 1) {
- this.scaleDownFactor = factor;
- this.scaleDownFactorSet = true;
- }
- }
-
- public void setMax_requests_per_second(int rps) {
- this.maxRequestsPerSecond = rps;
- this.maxRequestsPerSecondSet = true;
- }
-
- public void setRounds_to_average(int roundsToAverage) {
- this.roundsToAverage = roundsToAverage;
- this.roundsToAverageSet = true;
- }
-
- public void setInstances_per_scale_up(int instancesPerScaleUp) {
- if (instancesPerScaleUp < 1) {
- LoadBalancerConfigUtil.handleException("instancesPerScaleUp in the autoscaler task configuration " +
- "should be at least 1");
- }
- this.instancesPerScaleUp = instancesPerScaleUp;
- this.instancesPerScaleUpSet = true;
- }
-
- public void setMessage_expiry_time(int messageExpiryTime) {
- if (messageExpiryTime < 1) {
- LoadBalancerConfigUtil.handleException("messageExpiryTime in the autoscaler task configuration " +
- "should be at least 1");
- }
- this.messageExpiryTime = messageExpiryTime;
- this.messageExpiryTimeSet = true;
- }
-
- public void setHosts(String hostsStr) {
- // clear all unnecessary values --> property will get overwritten
- hosts = new ArrayList<String>();
- // there can be multiple hosts, let's find out.
- String[] host = hostsStr.split(Constants.HOSTS_DELIMITER);
-
- for (String string : host) {
- if (!string.isEmpty()) {
- this.hosts.add(string);
- }
- }
-
- }
-
- public void setUrl_suffix(String suffix) {
- // clear all unnecessary values --> property will get overwritten
- //hosts = new ArrayList<String>();
- // there can be multiple hosts, let's find out.
- String[] suffixes = suffix.split(Constants.HOSTS_DELIMITER);
- int count = 0;
- if(suffixes.length == this.hosts.size()) {
- for (String string : suffixes) {
- if (!string.isEmpty()) {
- this.urlSuffixes.put(this.hosts.get(count), string);
- count++;
- }
- }
-
- } else {
- //Error
- }
- }
-
- public Map<String, String> getUrl_suffix() {
- return this.urlSuffixes;
- }
-
- public void setTenant_range(String range) {
- this.tenantRange = range;
- }
-
- public void setSub_domain(String subDomain) {
- this.subDomain = subDomain;
- this.subDomainSet = true;
- }
-
- public void setDomain(String domain) {
- this.domain = domain;
- }
-
- public boolean equals(ServiceConfiguration config) {
- return this.domain.equals(config.getDomain()) &&
- this.subDomain.equals(config.getSubDomain());
- }
-
- public int hashCode() {
- return new HashCodeBuilder(17, 31). // two randomly chosen prime numbers
- append(domain).
- append(subDomain).
- toHashCode();
- }
-
- public double getAlarmingUpperRate() {
- if (alarmingUpperRateSet) {
- return alarmingUpperRate;
- } else if (defaultServiceConfig != null && defaultServiceConfig.alarmingUpperRateSet) {
- return defaultServiceConfig.alarmingUpperRate;
- }
- return alarmingUpperRate;
- }
-
- public double getAlarmingLowerRate() {
- if (alarmingLowerRateSet) {
- return alarmingLowerRate;
- } else if (defaultServiceConfig != null && defaultServiceConfig.alarmingLowerRateSet) {
- return defaultServiceConfig.alarmingLowerRate;
- }
- return alarmingLowerRate;
- }
-
- public double getScaleDownFactor() {
- if (scaleDownFactorSet) {
- return scaleDownFactor;
- } else if (defaultServiceConfig != null && defaultServiceConfig.scaleDownFactorSet) {
- return defaultServiceConfig.scaleDownFactor;
- }
- return scaleDownFactor;
- }
- }
-
- public Map<String, Set<String>> getHostNamesTracker() {
- return hostNamesTracker;
- }
-
-
- public Map<String, Map<String, ServiceConfiguration>> getServiceConfigurations() {
- return serviceConfigurations;
- }
-
-
- public Node getRootNode() {
- return rootNode;
- }
-
-
- public void setRootNode(Node rootNode) {
- this.rootNode = rootNode;
- }
-
- public static void setInstance(LoadBalancerConfiguration instance) {
- LoadBalancerConfiguration.instance = instance;
- }
-
- public Map<String, List<ServiceConfiguration>> getServiceNameToServiceConfigurations() {
- return serviceNameToServiceConfigurations;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/b975aa3c/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/conf/internal/LoadBalancerConfigurationDSComponent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/conf/internal/LoadBalancerConfigurationDSComponent.java b/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/conf/internal/LoadBalancerConfigurationDSComponent.java
deleted file mode 100644
index c0f9aea..0000000
--- a/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/conf/internal/LoadBalancerConfigurationDSComponent.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * 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.common.conf.internal;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.load.balancer.common.service.LoadBalancerConfigurationService;
-import org.apache.stratos.load.balancer.common.service.impl.LoadBalancerConfigurationServiceImpl;
-import org.osgi.framework.BundleContext;
-import org.osgi.service.component.ComponentContext;
-
-/**
- * Registering {@link org.apache.stratos.load.balancer.common.service.LoadBalancerConfigurationService} .
- * @scr.component name="org.wso2.carbon.lb.common" immediate="true"
- */
-public class LoadBalancerConfigurationDSComponent {
-
- private static final Log log = LogFactory.getLog(LoadBalancerConfigurationDSComponent.class);
-
- protected void activate(ComponentContext context) {
- try {
- BundleContext bundleContext = context.getBundleContext();
- bundleContext.registerService(LoadBalancerConfigurationService.class.getName(),
- new LoadBalancerConfigurationServiceImpl(), null);
-
- log.debug("******* Load Balancer Configuration Service bundle is activated ******* ");
- } catch (Exception e) {
- log.error("******* Load Balancer Configuration Service bundle is failed to activate ****", e);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/b975aa3c/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/conf/structure/Node.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/conf/structure/Node.java b/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/conf/structure/Node.java
deleted file mode 100644
index 2707612..0000000
--- a/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/conf/structure/Node.java
+++ /dev/null
@@ -1,356 +0,0 @@
-/**
- * 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.common.conf.structure;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import org.apache.commons.lang.builder.HashCodeBuilder;
-
-/**
- * This is the basic data structure which holds a <i>Nginx</i> formatted configuration file.
- *
- */
-public class Node implements Serializable{
-
- private static final long serialVersionUID = 4071569903421115370L;
-
- /**
- * Name of this Node element
- */
- private String name;
-
- /**
- * Every node can have 0..n child nodes.
- * They are kept in a List.
- */
- private List<Node> childNodes = new ArrayList<Node>();
-
- /**
- * Every node can have 0..n properties.
- * They are kept in a Map, in the order they appear.
- * Key: property name
- * Value: property value
- */
- private Map<String, String> properties = new LinkedHashMap<String, String>();
-
- public void setChildNodes(List<Node> childNodes) {
- this.childNodes = childNodes;
- }
-
- public void setProperties(Map<String, String> properties) {
- this.properties = properties;
- }
-
- /**
- * This will convert each child Node of this Node to a String.
- * @return a string which represents child nodes of this node.
- */
- public String childNodesToString(int indentation) {
- StringBuilder childNodesString = new StringBuilder();
- indentation++;
-
- for (Node node : childNodes) {
- childNodesString.append(node.toString(indentation)+"\n");
- }
-
- return childNodesString.toString();
- }
-
- /**
- * This will try to find a child Node of this Node, which has the given name.
- * @param name name of the child node to find.
- * @return child Node object if found or else <code>null</code>.
- */
- public Node findChildNodeByName(String name) {
- for (Node aNode : childNodes) {
- if (aNode.getName().equals(name)) {
- return aNode;
- }
- }
-
- return null;
- }
-
- /**
- * Returns the name of this Node.
- * @return name of the node.
- */
- public String getName() {
- return name;
- }
-
- /**
- * Returns child nodes List of this Node.
- * @return List of Node
- */
- public List<Node> getChildNodes() {
- return childNodes;
- }
-
- /**
- * Returns properties Map of this Node.
- * @return Map whose keys and values are String.
- */
- public Map<String, String> getProperties() {
- return properties;
- }
-
- /**
- * Returns the value of a given property.
- * @param key name of a property.
- * @return trimmed value if the property is found in this Node, or else <code>null</code>.
- */
- public String getProperty(String key) {
- if (properties.get(key) == null) {
- return null;
- }
- return properties.get(key).trim();
- }
-
- /**
- * Returns all the properties of this Node as a String.
- * Key and value of the property is separated by a tab (\t) character and
- * each property is separated by a new line character.
- * @param indentation relative number of tabs
- * @return properties of this node as a String.
- */
- public String propertiesToString(int indentation) {
-
- String indent = getIndentation(indentation);
-
- StringBuilder sb = new StringBuilder();
- for (Map.Entry<String, String> entry : properties.entrySet()) {
- // hack to get a quick fix in.
- if (!"tenant_id".equals(entry.getKey()) && !"alias".equals(entry.getKey())) {
- sb.append(indent + entry.getKey() + "\t" + entry.getValue() + ";\n");
- }
- }
- return sb.toString();
- }
-
- /**
- * Removes the first occurrence of a node having the given name
- * and returns the removed {@link Node}.
- * @param name name of the child node to be removed.
- * @return removed {@link Node} or else <code>null</code>.
- */
- public Node removeChildNode(String name) {
- Node aNode = findChildNodeByName(name);
-
- if(aNode != null){
- if(childNodes.remove(aNode)){
- return aNode;
- }
- }
-
- return null;
- }
-
- /**
- * Removes the first occurrence of a node equals to the given node.
- * @param node {@link Node} to be removed.
- * @return whether the removal is successful or not.
- */
- public boolean removeChildNode(Node node){
-
- return childNodes.remove(node);
- }
-
- /**
- * Sets the name of this Node.
- * @param name String to be set as the name.
- */
- public void setName(String name) {
- this.name = name;
- }
-
- /**
- * Appends a child node at the end of the List of child nodes of this Node, if
- * a similar node is not already present as a child node.
- * @param aNode child Node to be appended.
- */
- public void appendChild(Node aNode) {
- if (aNode != null && !nodeAlreadyPresent(aNode)) {
- childNodes.add(aNode);
- }
- }
-
- /**
- * Adds a new property to properties Map of this Node if and only if
- * key is not <code>null</code>.
- * @param key name of the property to be added.
- * @param value value of the property to be added.
- */
- public void addProperty(String key, String value) {
- if (key != null) {
- properties.put(key, value);
- }
- }
-
- /**
- * Convert this Node to a String which is in <i>Nginx</i> format.
- * <br/>
- * Sample:
- * <br></br>
- * <code>
- * ij {
- * <br/>
- * klm n;
- * <br/>
- * pq {
- * <br/>
- * rst u;
- * <br/>
- * }
- * <br/>
- * }
- * <br/>
- * </code>
- */
- public String toString() {
-
- String nodeString =
- getName()+" {\n" +
- (propertiesToString(1)) +
- (childNodesToString(1)) +
- "}";
-
- return nodeString;
- }
-
- public boolean equals(Object node) {
-
- if(node instanceof Node){
- return this.getName().equals(((Node) node).getName()) &&
- isIdenticalProperties(this.getProperties(), ((Node) node).getProperties()) &&
- isIdenticalChildren(this.getChildNodes(), ((Node) node).getChildNodes());
- }
-
- return false;
-
- }
-
- public int hashCode() {
- return new HashCodeBuilder(17, 31). // two randomly chosen prime numbers
- append(name).
- append(properties).
- append(childNodes).
- toHashCode();
- }
-
- private boolean isIdenticalChildren(List<Node> childNodes1, List<Node> childNodes2) {
-
- if(childNodes1.size() != childNodes2.size()){
- return false;
- }
-
- for (Node node1 : childNodes1) {
- int i=0;
- for (Node node2 : childNodes2) {
-
- i++;
- if(node1.equals(node2)){
- break;
- }
-
- if(i == childNodes1.size()){
- return false;
- }
-
- }
- }
-
- return true;
- }
-
- private boolean nodeAlreadyPresent(Node aNode){
-
- for(Node node : this.childNodes){
- if(node.equals(aNode)){
- return true;
- }
- }
-
- return false;
- }
-
- private boolean isIdenticalProperties(Map<String, String> map1,
- Map<String, String> map2) {
-
- if(map1.size() != map2.size()){
- return false;
- }
-
- for (Iterator<Entry<String, String>> iterator1 = map1.entrySet().iterator(); iterator1.hasNext();) {
- Map.Entry<String, String> entry1 = (Map.Entry<String, String>) iterator1.next();
-
- int i=0;
-
- for(Iterator<Entry<String, String>> iterator2 = map2.entrySet().iterator(); iterator2.hasNext();) {
- Map.Entry<String, String> entry2 = (Map.Entry<String, String>) iterator2.next();
-
- i++;
-
- if((entry1.getKey().equals(entry2.getKey()) &&
- entry1.getValue().equals(entry2.getValue()))){
-
- break;
- }
-
- if(i == map1.size()){
- return false;
- }
-
- }
- }
-
- return true;
- }
-
- private String toString(int indentation){
-
- String indent = getIndentation(indentation-1);
-
- String nodeString =
- indent + getName()+" {\n" +
- (propertiesToString(indentation)) +
- (childNodesToString(indentation)) +
- indent + "}";
-
- return nodeString;
- }
-
- private String getIndentation(int tabs){
-
- StringBuilder indent = new StringBuilder("");
-
- for (int i = 0; i < tabs; i++) {
- indent.append("\t");
- }
-
- return indent.toString();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/b975aa3c/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/conf/structure/NodeBuilder.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/conf/structure/NodeBuilder.java b/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/conf/structure/NodeBuilder.java
deleted file mode 100644
index 7cfbc1e..0000000
--- a/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/conf/structure/NodeBuilder.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/**
- * 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.common.conf.structure;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.load.balancer.common.conf.util.Constants;
-
-/**
- * This responsible for build up a Node object from a given content.
- * Every closing brace should be in a new line.
- */
-public class NodeBuilder {
-
- private static final Log log = LogFactory.getLog(NodeBuilder.class);
-
- /**
- * This method is useful when you do not have a root node in your content.
- * @param aNode
- * Node object whose name set.
- * @param content
- * should be something similar to following.
- *
- * abc d;
- * efg h;
- * # comment
- * ij { # comment
- * klm n;
- *
- * pq {
- * rst u;
- * }
- * }
- *
- * @return fully constructed Node
- */
- public static Node buildNode(Node aNode, String content) {
-
- if(content == null || content.isEmpty()){
- return aNode;
- }
-
- String[] lines = content.split("\n");
-
- for (int i = 0; i < lines.length; i++) {
- String line = lines[i].trim();
-
- // avoid line comments
- if (!line.startsWith(Constants.NGINX_COMMENT)) {
-
- // skip comments in-line
- if(line.contains(Constants.NGINX_COMMENT)){
- line = line.substring(0, line.indexOf(Constants.NGINX_COMMENT));
- }
-
- // another node is detected and it is not a variable starting from $
- if (line.contains(Constants.NGINX_NODE_START_BRACE) &&
- !line.contains(Constants.NGINX_VARIABLE)) {
-
- try {
- Node childNode = new Node();
- childNode.setName(line.substring(0, line.indexOf(Constants.NGINX_NODE_START_BRACE)).trim());
-
- StringBuilder sb = new StringBuilder();
-
- int matchingBraceTracker = 1;
-
- while (!line.contains(Constants.NGINX_NODE_END_BRACE) || matchingBraceTracker != 0) {
- i++;
- if (i == lines.length) {
- break;
- }
- line = lines[i];
- if (line.contains(Constants.NGINX_NODE_START_BRACE)) {
- matchingBraceTracker++;
- }
- if (line.contains(Constants.NGINX_NODE_END_BRACE)) {
- matchingBraceTracker--;
- }
- sb.append(line + "\n");
- }
-
- childNode = buildNode(childNode, sb.toString());
- if (aNode == null) {
- aNode = childNode;
- } else {
- aNode.appendChild(childNode);
- }
-
- } catch (Exception e) {
- String msg = "Malformatted element is defined in the configuration file. [" +
- i + "] \n";
- log.error(msg , e);
- throw new RuntimeException(msg + line, e);
- }
-
- }
- // this is a property
- else {
- if (!line.isEmpty() && !Constants.NGINX_NODE_END_BRACE.equals(line)) {
- String[] prop = line.split(Constants.NGINX_SPACE_REGEX);
- String value = line.substring(prop[0].length(), line.indexOf(Constants.NGINX_LINE_DELIMITER)).trim();
- try {
- aNode.addProperty(prop[0], value);
- } catch (Exception e) {
- String msg = "Malformatted property is defined in the configuration file. [" +
- i + "] \n";
- log.error(msg, e);
- throw new RuntimeException(msg + line, e);
- }
- }
- }
-
- }
- }
-
- return aNode;
-
- }
-
- public static Node buildNode(String content) {
- return buildNode(null, content);
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/b975aa3c/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/conf/util/Constants.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/conf/util/Constants.java b/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/conf/util/Constants.java
deleted file mode 100644
index 61d6bb7..0000000
--- a/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/conf/util/Constants.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * 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.common.conf.util;
-
-/**
- * This keeps the element names used in loadbalancer.conf file
- */
-public class Constants {
-
- public static final String LOAD_BALANCER_ELEMENT = "loadbalancer";
- public static final String SERVICES_ELEMENT = "services";
- public static final String DEFAULTS_ELEMENT = "defaults";
- public static final String HOSTS_ELEMENT = "hosts";
- public static final String HOSTS_DELIMITER = ",";
- public static final String DOMAIN_ELEMENT = "domains";
- public static final String TENANT_RANGE_ELEMENT = "tenant_range";
- public static final String SUB_DOMAIN_ELEMENT = "sub_domain";
- public static final String TENANT_RANGE_DELIMITER = "-";
- public static final String UNLIMITED_TENANT_RANGE = "*";
- public static final String AUTOSCALER_ENABLE_ELEMENT = "enable_autoscaler";
- public static final String SUB_DOMAIN_DELIMITER = "#";
- public static final String DEFAULT_SUB_DOMAIN = "__$default";
-
- /* Nginx format related constants */
-
- public static final String NGINX_COMMENT = "#";
- public static final String NGINX_NODE_START_BRACE = "{";
- public static final String NGINX_NODE_END_BRACE = "}";
- public static final String NGINX_VARIABLE = "${";
- public static final String NGINX_LINE_DELIMITER = ";";
- public static final String NGINX_SPACE_REGEX = "[\\s]+";
-
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/b975aa3c/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/conf/util/HostContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/conf/util/HostContext.java b/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/conf/util/HostContext.java
deleted file mode 100644
index f7322b1..0000000
--- a/components/org.apache.stratos.load.balancer.common/src/main/java/org/apache/stratos/load/balancer/common/conf/util/HostContext.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/**
- * 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.common.conf.util;
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.synapse.endpoints.algorithms.AlgorithmContext;
-import org.apache.synapse.endpoints.algorithms.LoadbalanceAlgorithm;
-
-/**
- * For each unique host name defined in loadbalancer configuration, we'll generate
- * this object.
- */
-public class HostContext {
-
- /**
- * A unique identifier to identify this {@link #HostContext()}
- */
- private String hostName;
-
- /**
- * Key - tenant id
- * Value - <code>TenantDomainContext</code> of the corresponding tenant
- */
- private Map<Integer, TenantDomainContext> tenantIdToTenantDomainContextMap = new HashMap<Integer, TenantDomainContext>();
-
- /**
- * AlgorithmContext of this host
- */
- private AlgorithmContext algorithmContext;
-
- /**
- * Load balance algorithm of this host
- */
- private LoadbalanceAlgorithm algorithm;
-
- private String urlSuffix;
-
- public HostContext(String hostName) {
- this.hostName = hostName;
- }
-
- public void addTenantDomainContexts(List<TenantDomainContext> ctxts) {
-
- for (TenantDomainContext tenantDomainContext : ctxts) {
- tenantIdToTenantDomainContextMap.put(tenantDomainContext.getTenantId(), tenantDomainContext);
- }
- }
-
- @Deprecated
- public void addTenantDomainContext(TenantDomainContext ctxt) {
- tenantIdToTenantDomainContextMap.put(ctxt.getTenantId(), ctxt);
- }
-
- public TenantDomainContext getTenantDomainContext(int tenantId) {
- return tenantIdToTenantDomainContextMap.get(tenantId);
- }
-
- /**
- * Returns all the {@link TenantDomainContext} entries.
- */
- public Collection<TenantDomainContext> getTenantDomainContexts() {
- return tenantIdToTenantDomainContextMap.values();
- }
-
- /**
- * Given a tenant id, this will return its domain.
- * @param tenantId
- * @return domain if this tenant has a dedicated one, it will be returned.
- * If not, and there's a default (*) domain, it will be returned.
- * If neither of the above is defined, null will be returned.
- */
- public String getDomainFromTenantId(int tenantId) {
- if (tenantIdToTenantDomainContextMap.get(tenantId) == null) {
- // if there's no specific domain for this tenant, we will redirect it to the default
- // cluster
-
- if(tenantIdToTenantDomainContextMap.get(0) == null){
- return null;
- }
-
- return tenantIdToTenantDomainContextMap.get(0).getDomain();
- }
-
- return tenantIdToTenantDomainContextMap.get(tenantId).getDomain();
- }
-
- /**
- * Given a tenant id, this will return its sub domain.
- * @param tenantId
- * @return sub_domain if this tenant has a dedicated one, it will be returned.
- * If not, and there's a default (*) sub domain, it will be returned.
- * If neither of the above is defined, null will be returned.
- */
- public String getSubDomainFromTenantId(int tenantId) {
- if (tenantIdToTenantDomainContextMap.get(tenantId) == null) {
- // if there's no specific domain for this tenant, we will redirect it to the default
- // cluster
-
- if(tenantIdToTenantDomainContextMap.get(0) == null){
- return null;
- }
-
- return tenantIdToTenantDomainContextMap.get(0).getSubDomain();
- }
-
- return tenantIdToTenantDomainContextMap.get(tenantId).getSubDomain();
- }
-
- public String getHostName() {
- return hostName;
- }
-
- public LoadbalanceAlgorithm getAlgorithm() {
- return algorithm;
- }
-
- public AlgorithmContext getAlgorithmContext() {
- return algorithmContext;
- }
-
- public void setAlgorithmContext(AlgorithmContext algorithmContext) {
- this.algorithmContext = algorithmContext;
- }
-
- public void setAlgorithm(LoadbalanceAlgorithm algorithm) {
- this.algorithm = algorithm;
- }
-
- public Map<Integer, TenantDomainContext> getTenantIdToTenantDomainContextMap() {
- return tenantIdToTenantDomainContextMap;
- }
-
- public void setUrlSuffix(String suffix) {
- this.urlSuffix = suffix;
- }
-
- public String getUrlSuffix() {
- return this.urlSuffix;
- }
-
-}