Repository: stratos Updated Branches: refs/heads/4.1.0-test 8540e700b -> 71605eb03
Adding configuration to enable/disable mock iaas service Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/71605eb0 Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/71605eb0 Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/71605eb0 Branch: refs/heads/4.1.0-test Commit: 71605eb0335ac29f29941cdbe32cfe89b1fb4624 Parents: 8540e70 Author: Imesh Gunaratne <[email protected]> Authored: Thu Dec 11 22:55:17 2014 +0530 Committer: Imesh Gunaratne <[email protected]> Committed: Thu Dec 11 22:55:17 2014 +0530 ---------------------------------------------------------------------- .../controller/iaases/mock/MockIaasService.java | 4 + .../MockHealthStatisticsConfigParser.java | 136 ----------------- .../iaases/mock/config/MockIaasConfig.java | 22 ++- .../mock/config/MockIaasConfigParser.java | 147 +++++++++++++++++++ .../CloudControllerServiceComponent.java | 7 +- 5 files changed, 172 insertions(+), 144 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/71605eb0/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockIaasService.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockIaasService.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockIaasService.java index a026cfc..a68bab5 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockIaasService.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockIaasService.java @@ -25,6 +25,7 @@ import org.apache.stratos.cloud.controller.domain.ClusterContext; import org.apache.stratos.cloud.controller.domain.MemberContext; import org.apache.stratos.cloud.controller.domain.Partition; import org.apache.stratos.cloud.controller.exception.*; +import org.apache.stratos.cloud.controller.iaases.mock.config.MockIaasConfig; import org.apache.stratos.cloud.controller.iaases.mock.statistics.generator.MockHealthStatisticsGenerator; import org.apache.stratos.cloud.controller.iaases.validators.PartitionValidator; import org.apache.stratos.cloud.controller.registry.RegistryManager; @@ -73,6 +74,9 @@ public class MockIaasService { if (instance == null) { synchronized (MockIaasService.class) { if (instance == null) { + if(!MockIaasConfig.getInstance().isEnabled()) { + throw new RuntimeException("Mock IaaS is not enabled"); + } instance = new MockIaasService(); } } http://git-wip-us.apache.org/repos/asf/stratos/blob/71605eb0/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/config/MockHealthStatisticsConfigParser.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/config/MockHealthStatisticsConfigParser.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/config/MockHealthStatisticsConfigParser.java deleted file mode 100644 index fe61078..0000000 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/config/MockHealthStatisticsConfigParser.java +++ /dev/null @@ -1,136 +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.cloud.controller.iaases.mock.config; - -import org.apache.axiom.om.OMAttribute; -import org.apache.axiom.om.OMElement; -import org.apache.stratos.cloud.controller.iaases.mock.MockAutoscalingFactor; -import org.apache.stratos.cloud.controller.iaases.mock.statistics.generator.MockHealthStatisticsPattern; -import org.apache.stratos.cloud.controller.util.AxiomXpathParserUtil; - -import javax.xml.namespace.QName; -import java.io.File; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -/** - * Mock health statistics configuration parser. - */ -public class MockHealthStatisticsConfigParser { - private static final QName TYPE_ATTRIBUTE = new QName("type"); - private static final QName FACTOR_ATTRIBUTE = new QName("factor"); - private static final String HEALTH_STATISTICS_ELEMENT = "health-statistics"; - private static final String SAMPLE_VALUES_ELEMENT = "sampleValues"; - private static final String SAMPLE_DURATION_ELEMENT = "sampleDuration"; - - /** - * Parse mock iaas health statistics configuration and return configuration object. - * @param filePath - * @return - */ - public static MockHealthStatisticsConfig parse(String filePath) { - try { - MockHealthStatisticsConfig mockHealthStatisticsConfig = new MockHealthStatisticsConfig(); - OMElement document = AxiomXpathParserUtil.parse(new File(filePath)); - Iterator statisticsIterator = document.getChildElements(); - - while (statisticsIterator.hasNext()) { - OMElement statisticsElement = (OMElement) statisticsIterator.next(); - - if (HEALTH_STATISTICS_ELEMENT.equals(statisticsElement.getQName().getLocalPart())) { - Iterator cartridgeIterator = statisticsElement.getChildElements(); - - while (cartridgeIterator.hasNext()) { - OMElement cartridgeElement = (OMElement) cartridgeIterator.next(); - OMAttribute typeAttribute = cartridgeElement.getAttribute(TYPE_ATTRIBUTE); - if (typeAttribute == null) { - throw new RuntimeException("Type attribute not found in cartridge element"); - } - String cartridgeType = typeAttribute.getAttributeValue(); - Iterator patternIterator = cartridgeElement.getChildElements(); - - while (patternIterator.hasNext()) { - OMElement patternElement = (OMElement) patternIterator.next(); - OMAttribute factorAttribute = patternElement.getAttribute(FACTOR_ATTRIBUTE); - - if (factorAttribute == null) { - throw new RuntimeException("Factor attribute not found in pattern element: " + - "[cartridge-type] " + cartridgeType); - } - String factorStr = factorAttribute.getAttributeValue(); - MockAutoscalingFactor autoscalingFactor = convertAutoscalingFactor(factorStr); - String sampleValuesStr = null; - String sampleDurationStr = null; - Iterator patternChildIterator = patternElement.getChildElements(); - - while (patternChildIterator.hasNext()) { - OMElement patternChild = (OMElement) patternChildIterator.next(); - if (SAMPLE_VALUES_ELEMENT.equals(patternChild.getQName().getLocalPart())) { - sampleValuesStr = patternChild.getText(); - } else if (SAMPLE_DURATION_ELEMENT.equals(patternChild.getQName().getLocalPart())) { - sampleDurationStr = patternChild.getText(); - } - } - - if (sampleValuesStr == null) { - throw new RuntimeException("Sample values not found in pattern [factor] " + factorStr); - } - if (sampleDurationStr == null) { - throw new RuntimeException("Sample duration not found in pattern [factor] " + factorStr); - } - - String[] sampleValuesArray = sampleValuesStr.split(","); - List<Integer> sampleValues = convertStringArrayToIntegerList(sampleValuesArray); - MockHealthStatisticsPattern mockHealthStatisticsPattern = new MockHealthStatisticsPattern - (cartridgeType, autoscalingFactor, sampleValues, Integer.parseInt(sampleDurationStr)); - - mockHealthStatisticsConfig.addStatisticsPattern(mockHealthStatisticsPattern); - } - } - } - } - return mockHealthStatisticsConfig; - } catch (Exception e) { - throw new RuntimeException("Could not parse mock health statistics configuration", e); - } - } - - private static MockAutoscalingFactor convertAutoscalingFactor(String factorStr) { - if("memory-consumption".equals(factorStr)) { - return MockAutoscalingFactor.MemoryConsumption; - } - else if("load-average".equals(factorStr)) { - return MockAutoscalingFactor.LoadAverage; - } - else if("request-in-flight".equals(factorStr)) { - return MockAutoscalingFactor.RequestInFlight; - } - throw new RuntimeException("An unknown autoscaling factor found: " + factorStr); - } - - private static List<Integer> convertStringArrayToIntegerList(String[] stringArray) { - List<Integer> integerList = new ArrayList<Integer>(); - for (String value : stringArray) { - integerList.add(Integer.parseInt(value)); - } - return integerList; - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/71605eb0/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/config/MockIaasConfig.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/config/MockIaasConfig.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/config/MockIaasConfig.java index 8452f56..8e47f18 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/config/MockIaasConfig.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/config/MockIaasConfig.java @@ -19,8 +19,6 @@ package org.apache.stratos.cloud.controller.iaases.mock.config; -import org.wso2.carbon.context.CarbonContext; - /** * Mock iaas configuration. */ @@ -31,25 +29,37 @@ public class MockIaasConfig { private static volatile MockIaasConfig instance; + private boolean enabled; private MockHealthStatisticsConfig mockHealthStatisticsConfig; public static MockIaasConfig getInstance() { if (instance == null) { synchronized (MockIaasConfig.class) { if (instance == null) { - instance = new MockIaasConfig(); + String confPath = System.getProperty(CARBON_HOME) + REPOSITORY_CONF; + instance = MockIaasConfigParser.parse(confPath + MOCK_IAAS_CONFIG_FILE_NAME); } } } return instance; } - private MockIaasConfig() { - String confPath = System.getProperty(CARBON_HOME) + REPOSITORY_CONF; - mockHealthStatisticsConfig = MockHealthStatisticsConfigParser.parse(confPath + MOCK_IAAS_CONFIG_FILE_NAME); + MockIaasConfig() { + } + + void setEnabled(boolean enabled) { + this.enabled = enabled; + } + + void setMockHealthStatisticsConfig(MockHealthStatisticsConfig mockHealthStatisticsConfig) { + this.mockHealthStatisticsConfig = mockHealthStatisticsConfig; } public MockHealthStatisticsConfig getMockHealthStatisticsConfig() { return mockHealthStatisticsConfig; } + + public boolean isEnabled() { + return enabled; + } } http://git-wip-us.apache.org/repos/asf/stratos/blob/71605eb0/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/config/MockIaasConfigParser.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/config/MockIaasConfigParser.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/config/MockIaasConfigParser.java new file mode 100644 index 0000000..796afeb --- /dev/null +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/config/MockIaasConfigParser.java @@ -0,0 +1,147 @@ +/* + * 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.cloud.controller.iaases.mock.config; + +import org.apache.axiom.om.OMAttribute; +import org.apache.axiom.om.OMElement; +import org.apache.commons.lang3.StringUtils; +import org.apache.stratos.cloud.controller.iaases.mock.MockAutoscalingFactor; +import org.apache.stratos.cloud.controller.iaases.mock.statistics.generator.MockHealthStatisticsPattern; +import org.apache.stratos.cloud.controller.util.AxiomXpathParserUtil; + +import javax.xml.namespace.QName; +import java.io.File; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +/** + * Mock health statistics configuration parser. + */ +public class MockIaasConfigParser { + private static final QName ENABLED_ATTRIBUTE = new QName("enabled"); + private static final QName TYPE_ATTRIBUTE = new QName("type"); + private static final QName FACTOR_ATTRIBUTE = new QName("factor"); + private static final String HEALTH_STATISTICS_ELEMENT = "health-statistics"; + private static final String SAMPLE_VALUES_ELEMENT = "sampleValues"; + private static final String SAMPLE_DURATION_ELEMENT = "sampleDuration"; + + /** + * Parse mock iaas configuration and return configuration object. + * @param filePath + * @return + */ + public static MockIaasConfig parse(String filePath) { + try { + MockIaasConfig mockIaasConfig = new MockIaasConfig(); + MockHealthStatisticsConfig mockHealthStatisticsConfig = new MockHealthStatisticsConfig(); + mockIaasConfig.setMockHealthStatisticsConfig(mockHealthStatisticsConfig); + + OMElement document = AxiomXpathParserUtil.parse(new File(filePath)); + String enabledStr = document.getAttributeValue(ENABLED_ATTRIBUTE); + if(StringUtils.isEmpty(enabledStr)) { + throw new RuntimeException("Enabled attribute not found in mock-iaas element"); + } + mockIaasConfig.setEnabled(Boolean.parseBoolean(enabledStr)); + + Iterator statisticsIterator = document.getChildElements(); + + while (statisticsIterator.hasNext()) { + OMElement statisticsElement = (OMElement) statisticsIterator.next(); + + if (HEALTH_STATISTICS_ELEMENT.equals(statisticsElement.getQName().getLocalPart())) { + Iterator cartridgeIterator = statisticsElement.getChildElements(); + + while (cartridgeIterator.hasNext()) { + OMElement cartridgeElement = (OMElement) cartridgeIterator.next(); + OMAttribute typeAttribute = cartridgeElement.getAttribute(TYPE_ATTRIBUTE); + if (typeAttribute == null) { + throw new RuntimeException("Type attribute not found in cartridge element"); + } + String cartridgeType = typeAttribute.getAttributeValue(); + Iterator patternIterator = cartridgeElement.getChildElements(); + + while (patternIterator.hasNext()) { + OMElement patternElement = (OMElement) patternIterator.next(); + OMAttribute factorAttribute = patternElement.getAttribute(FACTOR_ATTRIBUTE); + + if (factorAttribute == null) { + throw new RuntimeException("Factor attribute not found in pattern element: " + + "[cartridge-type] " + cartridgeType); + } + String factorStr = factorAttribute.getAttributeValue(); + MockAutoscalingFactor autoscalingFactor = convertAutoscalingFactor(factorStr); + String sampleValuesStr = null; + String sampleDurationStr = null; + Iterator patternChildIterator = patternElement.getChildElements(); + + while (patternChildIterator.hasNext()) { + OMElement patternChild = (OMElement) patternChildIterator.next(); + if (SAMPLE_VALUES_ELEMENT.equals(patternChild.getQName().getLocalPart())) { + sampleValuesStr = patternChild.getText(); + } else if (SAMPLE_DURATION_ELEMENT.equals(patternChild.getQName().getLocalPart())) { + sampleDurationStr = patternChild.getText(); + } + } + + if (sampleValuesStr == null) { + throw new RuntimeException("Sample values not found in pattern [factor] " + factorStr); + } + if (sampleDurationStr == null) { + throw new RuntimeException("Sample duration not found in pattern [factor] " + factorStr); + } + + String[] sampleValuesArray = sampleValuesStr.split(","); + List<Integer> sampleValues = convertStringArrayToIntegerList(sampleValuesArray); + MockHealthStatisticsPattern mockHealthStatisticsPattern = new MockHealthStatisticsPattern + (cartridgeType, autoscalingFactor, sampleValues, Integer.parseInt(sampleDurationStr)); + + mockHealthStatisticsConfig.addStatisticsPattern(mockHealthStatisticsPattern); + } + } + } + } + return mockIaasConfig; + } catch (Exception e) { + throw new RuntimeException("Could not parse mock health statistics configuration", e); + } + } + + private static MockAutoscalingFactor convertAutoscalingFactor(String factorStr) { + if("memory-consumption".equals(factorStr)) { + return MockAutoscalingFactor.MemoryConsumption; + } + else if("load-average".equals(factorStr)) { + return MockAutoscalingFactor.LoadAverage; + } + else if("request-in-flight".equals(factorStr)) { + return MockAutoscalingFactor.RequestInFlight; + } + throw new RuntimeException("An unknown autoscaling factor found: " + factorStr); + } + + private static List<Integer> convertStringArrayToIntegerList(String[] stringArray) { + List<Integer> integerList = new ArrayList<Integer>(); + for (String value : stringArray) { + integerList.add(Integer.parseInt(value)); + } + return integerList; + } +} http://git-wip-us.apache.org/repos/asf/stratos/blob/71605eb0/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/internal/CloudControllerServiceComponent.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/internal/CloudControllerServiceComponent.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/internal/CloudControllerServiceComponent.java index b60021b..5f7c9ff 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/internal/CloudControllerServiceComponent.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/internal/CloudControllerServiceComponent.java @@ -26,6 +26,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.stratos.cloud.controller.context.CloudControllerContext; import org.apache.stratos.cloud.controller.iaases.mock.MockIaasService; +import org.apache.stratos.cloud.controller.iaases.mock.config.MockIaasConfig; import org.apache.stratos.cloud.controller.messaging.receiver.application.ApplicationTopicReceiver; import org.apache.stratos.cloud.controller.messaging.receiver.cluster.status.ClusterStatusTopicReceiver; import org.apache.stratos.cloud.controller.exception.CloudControllerException; @@ -107,8 +108,10 @@ public class CloudControllerServiceComponent { executeCoordinatorTasks(); } - // Start mock members if present in registry - MockIaasService.startMockMembersIfPresentInRegistry(); + if(MockIaasConfig.getInstance().isEnabled()) { + // Start mock members if present in registry + MockIaasService.startMockMembersIfPresentInRegistry(); + } } catch (Throwable e) { log.error("******* Cloud Controller Service bundle is failed to activate ****", e); }
