Merge with tenant-isolation branch
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/2c34f816 Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/2c34f816 Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/2c34f816 Branch: refs/heads/master Commit: 2c34f816cfbd5a93c62ecc4dffe1d87026e7c329 Parents: eefef71 3ab0f9e Author: gayangunarathne <[email protected]> Authored: Tue Sep 1 11:18:43 2015 +0530 Committer: gayangunarathne <[email protected]> Committed: Tue Sep 1 11:18:43 2015 +0530 ---------------------------------------------------------------------- .../networkpartition/AllAtOnceAlgorithm.java | 4 +- .../OneAfterAnotherAlgorithm.java | 8 +- .../applications/ApplicationUtils.java | 6 +- .../applications/ClusterInformation.java | 4 +- .../applications/MTClusterInformation.java | 8 +- .../applications/STClusterInformation.java | 8 +- .../dependency/DependencyBuilder.java | 1 - .../context/ApplicationChildContextFactory.java | 1 + .../dependency/context/ClusterChildContext.java | 9 + .../parser/DefaultApplicationParser.java | 157 +- .../applications/parser/ParserUtils.java | 2 +- .../applications/payload/BasicPayloadData.java | 11 + .../pojo/ApplicationClusterContext.java | 18 +- .../applications/pojo/ApplicationContext.java | 23 +- .../applications/pojo/CartridgeContext.java | 27 +- .../applications/pojo/GroupContext.java | 28 + .../pojo/SubscribableInfoContext.java | 40 +- .../applications/topic/ApplicationBuilder.java | 52 +- .../client/AutoscalerCloudControllerClient.java | 57 +- .../autoscaler/context/AutoscalerContext.java | 17 +- .../context/cluster/ClusterContext.java | 30 +- .../context/cluster/ClusterContextFactory.java | 2 - .../context/partition/PartitionContext.java | 2 +- .../AutoscalerTopologyEventReceiver.java | 85 +- .../internal/AutoscalerServiceComponent.java | 8 +- .../autoscaler/monitor/MonitorFactory.java | 20 +- .../monitor/cluster/ClusterMonitor.java | 209 ++- .../monitor/component/ApplicationMonitor.java | 141 +- .../monitor/component/GroupMonitor.java | 24 +- .../component/ParentComponentMonitor.java | 2 +- .../stratos/autoscaler/pojo/ServiceGroup.java | 30 +- .../autoscaler/pojo/policy/PolicyManager.java | 266 ++- .../pojo/policy/autoscale/AutoscalePolicy.java | 24 +- .../policy/deployment/ApplicationPolicy.java | 27 + .../policy/deployment/DeploymentPolicy.java | 35 +- .../autoscaler/registry/RegistryManager.java | 62 +- .../autoscaler/rule/RuleTasksDelegator.java | 42 +- .../autoscaler/services/AutoscalerService.java | 107 +- .../services/impl/AutoscalerServiceImpl.java | 703 ++++++-- .../group/GroupStatusInactiveProcessor.java | 2 +- .../processor/group/GroupStatusProcessor.java | 2 +- .../util/AutoscalerObjectConverter.java | 7 +- .../stratos/autoscaler/util/AutoscalerUtil.java | 209 ++- .../stratos/autoscaler/AutoscalerUtilTest.java | 64 - .../publisher/HealthStatisticsNotifier.java | 10 +- .../agent/test/JavaCartridgeAgentTest.java | 9 +- .../concurrent/PartitionValidatorCallable.java | 2 +- .../context/CloudControllerContext.java | 82 +- .../domain/ApplicationClusterContext.java | 14 +- .../cloud/controller/domain/Cartridge.java | 18 + .../cloud/controller/domain/ClusterContext.java | 18 +- .../controller/domain/NetworkPartition.java | 38 +- .../cloud/controller/domain/Partition.java | 36 +- .../domain/kubernetes/KubernetesCluster.java | 36 +- .../CloudStackPartitionValidator.java | 2 +- .../iaases/ec2/EC2PartitionValidator.java | 4 +- .../iaases/kubernetes/KubernetesIaas.java | 38 +- .../KubernetesPartitionValidator.java | 4 +- .../cloud/controller/iaases/mock/MockIaas.java | 2 +- .../openstack/OpenstackPartitionValidator.java | 4 +- .../publisher/TopologyEventPublisher.java | 20 +- .../messaging/topology/TopologyBuilder.java | 1457 ++++++++-------- .../services/CloudControllerService.java | 66 +- .../impl/CloudControllerServiceImpl.java | 512 ++++-- .../impl/CloudControllerServiceUtil.java | 19 +- .../services/impl/InstanceCreator.java | 17 +- .../publisher/BAMUsageDataPublisher.java | 44 +- .../util/CloudControllerConstants.java | 4 + .../controller/util/CloudControllerUtil.java | 12 +- .../beans/application/ApplicationBean.java | 5 +- .../beans/application/SubscribableInfo.java | 12 +- .../beans/cartridge/CartridgeGroupBean.java | 18 +- .../cartridge/CartridgeGroupReferenceBean.java | 19 +- .../beans/cartridge/CartridgeReferenceBean.java | 18 + .../beans/kubernetes/KubernetesClusterBean.java | 18 +- .../beans/partition/NetworkPartitionBean.java | 1 - .../common/beans/partition/PartitionBean.java | 19 +- .../beans/partition/PartitionReferenceBean.java | 19 +- .../deployment/ApplicationPolicyBean.java | 9 + .../beans/topology/ApplicationInstanceBean.java | 19 +- .../common/client/AutoscalerServiceClient.java | 81 +- .../client/CloudControllerServiceClient.java | 68 +- .../client/StratosManagerServiceClient.java | 20 +- .../common/constants/StratosConstants.java | 8 +- .../common/partition/NetworkPartitionRef.java | 11 +- .../stratos/common/partition/PartitionRef.java | 37 +- .../publisher/HealthStatisticsPublisher.java | 3 +- .../publisher/InFlightRequestPublisher.java | 4 +- .../publisher/StatisticsPublisherType.java | 2 +- .../publisher/ThriftClientConfig.java | 101 ++ .../publisher/ThriftClientConfigParser.java | 173 ++ .../statistics/publisher/ThriftClientInfo.java | 71 + .../publisher/ThriftStatisticsPublisher.java | 116 ++ .../publisher/wso2/cep/ThriftClientConfig.java | 81 - .../wso2/cep/ThriftClientConfigParser.java | 139 -- .../publisher/wso2/cep/ThriftClientInfo.java | 63 - .../cep/WSO2CEPHealthStatisticsPublisher.java | 29 +- .../cep/WSO2CEPInFlightRequestPublisher.java | 28 +- .../wso2/cep/WSO2CEPStatisticsPublisher.java | 114 -- .../common/threading/StratosThreadPool.java | 21 +- .../test/ThriftClientConfigParserTest.java | 23 +- .../src/test/resources/thrift-client-config.xml | 22 +- .../KubernetesAPIClientInterface.java | 13 +- ...LoadBalancerCommonTopologyEventReceiver.java | 2 +- .../LoadBalancerStatisticsNotifier.java | 3 +- .../schema/configure/application-policies.json | 4 +- .../schema/configure/autoscaling-policies.json | 2 +- .../schema/configure/deployment-policies.json | 2 +- .../schema/configure/network-partitions.json | 2 +- .../themes/theme0/partials/configure_form.hbs | 4 + components/org.apache.stratos.manager/pom.xml | 1 + .../manager/context/StratosManagerContext.java | 148 +- .../manager/services/StratosManagerService.java | 42 +- .../impl/StratosManagerServiceImpl.java | 44 +- .../domain/application/Application.java | 26 +- .../domain/application/Applications.java | 18 +- .../domain/application/ClusterDataHolder.java | 15 +- .../domain/application/ParentComponent.java | 4 +- .../messaging/domain/instance/Instance.java | 10 +- .../messaging/domain/topology/Service.java | 12 +- .../messaging/domain/topology/Topology.java | 20 +- .../topology/locking/TopologyLockHierarchy.java | 8 +- .../topology/ClusterInstanceCreatedEvent.java | 12 +- .../event/topology/ServiceCreatedEvent.java | 8 +- .../event/topology/ServiceRemovedEvent.java | 18 +- ...licationInstanceCreatedMessageProcessor.java | 44 +- ...licationClustersCreatedMessageProcessor.java | 21 +- .../ClusterInstanceCreatedMessageProcessor.java | 14 +- .../ServiceCreatedMessageProcessor.java | 4 +- .../ServiceRemovedMessageProcessor.java | 8 +- .../topology/updater/TopologyUpdater.java | 10 +- .../publisher/MockHealthStatisticsNotifier.java | 3 + .../test/PythonCartridgeAgentTest.java | 9 +- .../rest/endpoint/api/StratosApiV40Utils.java | 7 +- .../rest/endpoint/api/StratosApiV41.java | 302 ++-- .../rest/endpoint/api/StratosApiV41Utils.java | 1277 ++++++++------ .../util/converter/ObjectConverter.java | 337 ++-- dependencies/fabric8/pom.xml | 2 +- .../streamdefinitions/stream-manager-config.xml | 486 +++--- extensions/das/README.md | 10 + .../CloudControllerEventReceiver.xml | 29 + .../eventreceivers/HealthStatsEventReceiver.xml | 29 + .../eventreceivers/RIFEventReceiver.xml | 29 + .../eventsink/cartridge_agent_health_stats.xml | 85 + .../artifacts/eventsink/in_flight_requests.xml | 64 + .../org_apache_stratos_cloud_controller.xml | 211 +++ .../cartridge_agent_health_stats_1.0.0.json | 40 + .../eventstreams/in_flight_requests_1.0.0.json | 28 + ...g.apache.stratos.cloud.controller_1.0.0.json | 112 ++ extensions/das/artifacts/sparkscript/CCEvent | 18 + extensions/das/pom.xml | 40 + extensions/das/spark-udf/pom.xml | 36 + .../das/extension/spark/udf/TimeUDF.java | 49 + .../pom.xml | 3 +- .../src/main/conf/drools/dependent-scaling.drl | 11 +- .../src/main/conf/drools/mincheck.drl | 22 +- .../src/main/conf/drools/scaling.drl | 17 +- .../src/main/conf/thrift-client-config.xml | 22 +- products/stratos/modules/integration/pom.xml | 2 +- .../integration/tests/RestConstants.java | 8 + .../tests/StratosTestServerManager.java | 42 +- .../integration/tests/TopologyHandler.java | 88 +- .../application/ApplicationBurstingTest.java | 143 +- .../application/ApplicationUpdateTest.java | 312 ++-- .../application/GroupStartupOrderTest.java | 358 ++-- .../GroupTerminationBehaviorTest.java | 111 +- .../PartitionOneAfterAnotherClusterTest.java | 56 +- .../PartitionRoundRobinClusterTest.java | 90 +- .../application/SampleApplicationsTest.java | 233 +-- .../application/SingleClusterScalingTest.java | 196 +-- .../tests/group/CartridgeGroupTest.java | 226 +-- .../integration/tests/group/CartridgeTest.java | 138 +- .../tests/policies/ApplicationPolicyTest.java | 179 +- .../tests/policies/AutoscalingPolicyTest.java | 146 +- .../tests/policies/DeploymentPolicyTest.java | 199 +-- .../tests/policies/NetworkPartitionTest.java | 108 +- .../tests/rest/IntegrationMockClient.java | 2 +- .../integration/tests/rest/RestClient.java | 22 +- .../integration/tests/users/TenantTest.java | 2 +- .../integration/tests/users/UserTest.java | 12 +- ...cation-policy-application-bursting-test.json | 18 + .../app-bursting-single-cartriddge-group.json | 70 + ...caling-policy-application-bursting-test.json | 14 + ...esb-php-group-application-bursting-test.json | 19 + .../mock/esb-application-bursting-test.json | 50 + .../mock/php-application-bursting-test.json | 51 + .../mock/tomcat-application-bursting-test.json | 53 + ...oyment-policy-application-bursting-test.json | 32 + ...k-partition-application-bursting-test-1.json | 15 + ...k-partition-application-bursting-test-2.json | 24 + .../RegionOne.json | 17 + .../application-martin.json | 100 ++ .../application-policy-1.json | 17 + .../application-s-g-c1-c2-c3-s.json | 130 ++ .../application.json | 108 ++ .../startup-order-termination-behavior/c1.json | 45 + .../startup-order-termination-behavior/c2.json | 45 + .../startup-order-termination-behavior/c3.json | 45 + .../startup-order-termination-behavior/c4.json | 45 + .../startup-order-termination-behavior/c5.json | 132 ++ .../cartridge-groups-s-g-c1-c2-c3-s.json | 26 + .../cartridge-groups-working.json | 34 + .../cartridge-groups.json | 77 + .../cartridge-groups.json.back | 53 + .../deploy.sh | 43 + .../economy-policy.json | 15 + .../static-1.json | 17 + .../wso2carbon 2.log | 992 +++++++++++ .../wso2carbon-working 2.log | 1053 +++++++++++ .../wso2carbon-working.log | 1053 +++++++++++ .../wso2carbon.log | 992 +++++++++++ .../src/test/resources/mock-iaas.xml | 26 +- .../single-cluster-scaling-test.json | 2 +- .../src/test/resources/stratos-testing.xml | 118 +- .../src/test/resources/tenant/tenant1.json | 9 + .../src/test/resources/tenant/tenant2.json | 9 + .../artifacts/application.json | 2 +- .../scripts/common/deploy.sh | 25 +- .../scripts/common/undeploy.sh | 16 +- .../scripts/kubernetes/deploy.sh | 8 +- .../single-cartridge-app/scripts/mock/deploy.sh | 2 +- .../scripts/mock/undeploy.sh | 2 +- .../single-group-app/scripts/common/deploy.sh | 29 +- .../single-group-app/scripts/common/undeploy.sh | 27 +- .../single-group-app/scripts/mock/deploy.sh | 2 +- .../single-group-app/scripts/mock/undeploy.sh | 2 +- samples/cartridges/kubernetes/php.json | 2 +- .../kubernetes-cluster-1.json | 2 +- .../kubernetes-cluster-2.json | 2 +- samples/tenants/tenant1.json | 9 + samples/tenants/tenant2.json | 9 + .../src/main/resources/AutoscalerService.wsdl | 1639 +++++++++++++----- .../main/resources/CloudControllerService.wsdl | 1369 +++++++++------ .../main/resources/StratosManagerService.wsdl | 268 +-- 234 files changed, 15320 insertions(+), 6538 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/2c34f816/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/ApplicationUtils.java ---------------------------------------------------------------------- diff --cc components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/ApplicationUtils.java index d43f364,4eec5f9..dbf264e --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/ApplicationUtils.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/ApplicationUtils.java @@@ -37,11 -37,11 +37,12 @@@ import java.util.Set import java.util.regex.Pattern; public class ApplicationUtils { + private static final Log log = LogFactory.getLog(ApplicationUtils.class); + public static final String TOKEN_PAYLOAD_PARAM_NAME = "TOKEN"; public static final String DEPLOYMENT = "DEPLOYMENT"; + private static final String PORT_SEPARATOR="|"; public static final String PAYLOAD_PARAMETER = "payload_parameter."; - private static final Log log = LogFactory.getLog(ApplicationUtils.class); public static Pattern ALIAS_PATTERN = Pattern.compile("([a-z0-9]+([-][a-z0-9])*)+"); public static boolean isAliasValid(String alias) { @@@ -259,11 -221,9 +260,12 @@@ basicPayloadData.setSubscriptionKey(subscriptionKey); //basicPayloadData.setDeployment("default");//currently hard coded to default basicPayloadData.setMultitenant(String.valueOf(cartridge.getMultiTenant())); - basicPayloadData.setPortMappings(createPortMappingPayloadString(cartridge)); + basicPayloadData.setPorts(createPortsToPayloadString(cartridge)); + basicPayloadData.setPortMappings(createPortMappingsToPayloadString(cartridge)); - basicPayloadData.setServiceName(cartridge.getType()); + basicPayloadData.setServiceName(cartridge.getUuid()); ++ basicPayloadData.setServiceType(cartridge.getType()); basicPayloadData.setProvider(cartridge.getProvider()); + basicPayloadData.setLvsVirtualIP(lvsVirtualIP); if (repoUrl != null) { basicPayloadData.setGitRepositoryUrl(repoUrl); http://git-wip-us.apache.org/repos/asf/stratos/blob/2c34f816/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/DependencyBuilder.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/2c34f816/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java ---------------------------------------------------------------------- diff --cc components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java index d9378ab,9ef6180..3c8f65a --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java @@@ -471,14 -452,14 +475,14 @@@ public class DefaultApplicationParser i isLB = true; } // create and collect this cluster's information - ApplicationClusterContext appClusterCtxt = createApplicationClusterContext(appId, groupName, cartridge, + ApplicationClusterContext appClusterCtxt = createApplicationClusterContext(appUuid, groupName, cartridge, key, tenantId, repoUrl, subscriptionAlias, clusterId, hostname, - subscribableInfoContext.getDeploymentPolicy(), isLB, + subscribableInfoContext.getDeploymentPolicyUuid(), isLB, tenantRange, subscribableInfoContext.getDependencyAliases(), subscribableInfoContext.getProperties(), arrDependencyClusterIDs, arrExportMetadata, - arrImportMetadata, subscribableInfoContext.getLvsVirtualIP()); - arrImportMetadata); ++ arrImportMetadata,subscribableInfoContext.getLvsVirtualIP()); - appClusterCtxt.setAutoscalePolicyName(subscribableInfoContext.getAutoscalingPolicy()); + appClusterCtxt.setAutoscalePolicyName(subscribableInfoContext.getAutoscalingPolicyUuid()); appClusterCtxt.setProperties(subscribableInfoContext.getProperties()); if (subscribableInfoContext.getPersistenceContext() != null) { appClusterCtxt.setPersistenceContext(subscribableInfoContext.getPersistenceContext()); @@@ -935,17 -941,19 +941,19 @@@ * @return ApplicationClusterContext object with relevant information * @throws ApplicationDefinitionException If any error occurs */ - private ApplicationClusterContext createApplicationClusterContext(String appId, String groupName, Cartridge cartridge, + private ApplicationClusterContext createApplicationClusterContext(String applicationUuid, String groupName, + Cartridge cartridge, String subscriptionKey, int tenantId, String repoUrl, String alias, String clusterId, String hostname, - String deploymentPolicy, boolean isLB, String tenantRange, + String deploymentPolicyUuid, boolean isLB, + String tenantRange, String[] dependencyAliases, Properties properties, String[] dependencyClustorIDs, - String[] exportMetadata, String[] importMetadata, String lvsVirtualIP) - String[] exportMetadata, String[] importMetadata) ++ String[] exportMetadata, String[] importMetadata,String lvsVirtualIP) throws ApplicationDefinitionException { // Create text payload - PayloadData payloadData = ApplicationUtils.createPayload(appId, groupName, cartridge, subscriptionKey, tenantId, clusterId, - hostname, repoUrl, alias, null, dependencyAliases, properties, oauthToken, dependencyClustorIDs, exportMetadata, importMetadata, lvsVirtualIP); + PayloadData payloadData = ApplicationUtils.createPayload(applicationUuid, groupName, cartridge, subscriptionKey, tenantId, clusterId, - hostname, repoUrl, alias, null, dependencyAliases, properties, oauthToken, dependencyClustorIDs, exportMetadata, importMetadata); ++ hostname, repoUrl, alias, null, dependencyAliases, properties, oauthToken, dependencyClustorIDs, exportMetadata, importMetadata,lvsVirtualIP); String textPayload = payloadData.toString(); if (log.isDebugEnabled()) { http://git-wip-us.apache.org/repos/asf/stratos/blob/2c34f816/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/ParserUtils.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/2c34f816/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/payload/BasicPayloadData.java ---------------------------------------------------------------------- diff --cc components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/payload/BasicPayloadData.java index 67d88e4,89eed10..ee14a56 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/payload/BasicPayloadData.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/payload/BasicPayloadData.java @@@ -36,6 -36,6 +36,7 @@@ public class BasicPayloadData implement private String appId; private String groupName; private String serviceName; ++ private String serviceType; private String clusterId; private String hostName; private int tenantId; @@@ -73,6 -73,6 +74,8 @@@ payloadBuilder.append(","); payloadBuilder.append("SERVICE_NAME=" + getServiceName()); payloadBuilder.append(","); ++ payloadBuilder.append("SERVICE_TYPE=" + getServiceType()); ++ payloadBuilder.append(","); payloadBuilder.append("HOST_NAME=" + getHostName()); payloadBuilder.append(","); payloadBuilder.append("MULTITENANT=" + getMultitenant()); @@@ -403,12 -388,4 +406,20 @@@ public void setImportMetadataKeys(String[] importMetadataKeys) { this.importMetadataKeys = importMetadataKeys; } + + public String getLvsVirtualIP() { + return lvsVirtualIP; + } + + public void setLvsVirtualIP(String lvsVirtualIP) { + this.lvsVirtualIP = lvsVirtualIP; + } ++ ++ public String getServiceType() { ++ return serviceType; ++ } ++ ++ public void setServiceType(String serviceType) { ++ this.serviceType = serviceType; ++ } } http://git-wip-us.apache.org/repos/asf/stratos/blob/2c34f816/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/ApplicationClusterContext.java ---------------------------------------------------------------------- diff --cc components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/ApplicationClusterContext.java index cd48cd4,e666e54..35c68d2 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/ApplicationClusterContext.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/ApplicationClusterContext.java @@@ -45,9 -47,18 +47,9 @@@ public class ApplicationClusterContext private Properties properties; private String[] dependencyClusterIds; - - public PersistenceContext getPersistenceContext() { - return persistenceContext; - } - - public void setPersistenceContext(PersistenceContext persistenceContext) { - this.persistenceContext = persistenceContext; - } - private PersistenceContext persistenceContext; - public ApplicationClusterContext(String cartridgeType, String clusterId, String hostName, + public ApplicationClusterContext(String cartridgeUuid, String clusterId, String hostName, String textPayload, String deploymentPolicyName, boolean isLbCluster, String tenantRange, String[] dependencyClusterIds) { http://git-wip-us.apache.org/repos/asf/stratos/blob/2c34f816/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/SubscribableInfoContext.java ---------------------------------------------------------------------- diff --cc components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/SubscribableInfoContext.java index c4b57f0,119c162..01c0b98 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/SubscribableInfoContext.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/SubscribableInfoContext.java @@@ -111,11 -111,19 +113,27 @@@ public class SubscribableInfoContext im this.persistenceContext = persistenceContext; } - public String getLvsVirtualIP() { ++ public String getLvsVirtualIP() { + return lvsVirtualIP; + } + + public void setLvsVirtualIP(String lvsVirtualIP) { + this.lvsVirtualIP = lvsVirtualIP; + } ++ + public String getDeploymentPolicy() { + return deploymentPolicy; + } + + public void setDeploymentPolicy(String deploymentPolicy) { + this.deploymentPolicy = deploymentPolicy; + } + + public String getAutoscalingPolicy() { + return autoscalingPolicy; + } + + public void setAutoscalingPolicy(String autoscalingPolicy) { + this.autoscalingPolicy = autoscalingPolicy; + } } http://git-wip-us.apache.org/repos/asf/stratos/blob/2c34f816/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java ---------------------------------------------------------------------- diff --cc components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java index 912a2f6,f865d4b..7dd33c5 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java @@@ -74,16 -74,16 +73,16 @@@ public class ApplicationBuilder log.debug("Handling application creation event: [application-id] " + application.getUniqueIdentifier()); } - AutoscalerCloudControllerClient.getInstance().createApplicationClusters(application.getUniqueIdentifier(), - appClusterContexts); ApplicationHolder.persistApplication(application); ApplicationsEventPublisher.sendApplicationCreatedEvent(application); + AutoscalerCloudControllerClient.getInstance().createApplicationClusters(application.getUniqueIdentifier(), + appClusterContexts); } - public static ApplicationInstance handleApplicationInstanceCreatedEvent(String appId, - String networkPartitionId) { + public static ApplicationInstance handleApplicationInstanceCreatedEvent(String appUuid, + String networkPartitionUuid) { if (log.isDebugEnabled()) { - log.debug("Handling application instance creation event: [application-id] " + appId); + log.debug("Handling application instance creation event: [application-id] " + appUuid); } ApplicationInstance applicationInstance = null; //acquiring write lock to add the required instances @@@ -366,7 -361,7 +360,7 @@@ cluster.getInstanceIdToInstanceContextMap().values()) { ClusterStatusEventPublisher. sendClusterStatusClusterTerminatingEvent(applicationId, -- aClusterData.getServiceType(), ++ aClusterData.getServiceUuid(), aClusterData.getClusterId(), instance.getInstanceId()); } @@@ -427,9 -422,9 +421,9 @@@ monitor1.destroy(); } } - org.apache.stratos.autoscaler.context.partition.network.ParentLevelNetworkPartitionContext networkPartitionContext = - (org.apache.stratos.autoscaler.context.partition.network.ParentLevelNetworkPartitionContext) monitor. + org.apache.stratos.autoscaler.context.partition.network.NetworkPartitionContext networkPartitionContext = + (org.apache.stratos.autoscaler.context.partition.network.NetworkPartitionContext) monitor. - getNetworkPartitionContext(groupInstance.getNetworkPartitionId()); + getNetworkPartitionContext(groupInstance.getNetworkPartitionUuid()); networkPartitionContext.removeInstanceContext(instanceId); if (groupInstance.getPartitionId() != null) { networkPartitionContext.getPartitionCtxt(groupInstance.getPartitionId()). http://git-wip-us.apache.org/repos/asf/stratos/blob/2c34f816/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/AutoscalerCloudControllerClient.java ---------------------------------------------------------------------- diff --cc components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/AutoscalerCloudControllerClient.java index 0124206,f19531b..5a9aab2 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/AutoscalerCloudControllerClient.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/AutoscalerCloudControllerClient.java @@@ -224,12 -250,4 +250,5 @@@ public class AutoscalerCloudControllerC log.debug(String.format("Service call terminateInstances() returned in %dms", (endTime - startTime))); } } -} + - /* An instance of a CloudControllerClient is created when the class is loaded. - * Since the class is loaded only once, it is guaranteed that an object of - * CloudControllerClient is created only once. Hence it is singleton. - */ - private static class InstanceHolder { - private static final AutoscalerCloudControllerClient INSTANCE = new AutoscalerCloudControllerClient(); - } - } ++ } http://git-wip-us.apache.org/repos/asf/stratos/blob/2c34f816/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/AutoscalerContext.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/2c34f816/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterContext.java ---------------------------------------------------------------------- diff --cc components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterContext.java index 235b7b7,8055cb0..b1e3bd4 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterContext.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterContext.java @@@ -137,11 -137,11 +137,11 @@@ public class ClusterContext extends Abs if (networkPartition == null) { //Parent should have the partition specified - networkPartitionContext = new ClusterLevelNetworkPartitionContext( + networkPartitionContext = new NetworkPartitionContext( - clusterInstance.getNetworkPartitionId()); + clusterInstance.getNetworkPartitionUuid()); } else { - networkPartitionContext = new ClusterLevelNetworkPartitionContext(networkPartition.getUuid(), - networkPartition.getPartitionAlgo(), 0); + networkPartitionContext = new NetworkPartitionContext(networkPartition.getId(), + networkPartition.getPartitionAlgo()); } } http://git-wip-us.apache.org/repos/asf/stratos/blob/2c34f816/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java ---------------------------------------------------------------------- diff --cc components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java index 2573991,9388985..56a567e --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java @@@ -276,15 -285,9 +285,15 @@@ public class AutoscalerTopologyEventRec monitor.notifyParentMonitor(ClusterStatus.Terminating, clusterInstanceId); InstanceNotificationPublisher.getInstance(). sendInstanceCleanupEventForCluster(clusterId, clusterInstanceId); + //Terminating the pending members + monitor.terminatePendingMembers(clusterInstanceId, - clusterInstance.getNetworkPartitionId()); ++ clusterInstance.getNetworkPartitionUuid()); + //Move all members to terminating pending list + monitor.moveMembersToTerminatingPending(clusterInstanceId, - clusterInstance.getNetworkPartitionId()); ++ clusterInstance.getNetworkPartitionUuid()); } else { monitor.notifyParentMonitor(ClusterStatus.Terminating, clusterInstanceId); - monitor.terminateAllMembers(clusterInstanceId, clusterInstance.getNetworkPartitionId()); + monitor.terminateAllMembers(clusterInstanceId, clusterInstance.getNetworkPartitionUuid()); } ServiceReferenceHolder.getInstance().getClusterStatusProcessorChain(). process("", clusterId, clusterInstanceId); http://git-wip-us.apache.org/repos/asf/stratos/blob/2c34f816/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServiceComponent.java ---------------------------------------------------------------------- diff --cc components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServiceComponent.java index 48ee481,3671762..030a8b5 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServiceComponent.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServiceComponent.java @@@ -136,8 -135,8 +138,9 @@@ public class AutoscalerServiceComponen } else { executeCoordinatorTasks(); } + - componentStartUpSynchronizer.waitForWebServiceActivation("AutoscalerService"); + componentStartUpSynchronizer.waitForAxisServiceActivation(Component.Autoscaler, + "AutoscalerService"); componentStartUpSynchronizer.setComponentStatus(Component.Autoscaler, true); if (log.isInfoEnabled()) { log.info("Autoscaler service component activated"); http://git-wip-us.apache.org/repos/asf/stratos/blob/2c34f816/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/MonitorFactory.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/2c34f816/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java ---------------------------------------------------------------------- diff --cc components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java index 43493bd,f700dbc..952be10 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java @@@ -84,16 -84,16 +84,18 @@@ import java.util.concurrent.atomic.Atom */ public class ClusterMonitor extends Monitor { - private static final Log log = LogFactory.getLog(ClusterMonitor.class); private final ScheduledExecutorService scheduler; private final ExecutorService executorService; + protected boolean hasFaultyMember = false; protected ClusterContext clusterContext; + protected String serviceType; + protected String clusterId; // future to cancel it when destroying monitors private ScheduledFuture<?> schedulerFuture; + protected String serviceUuid; private AtomicBoolean monitoringStarted; - protected String clusterId; ++ private Cluster cluster; private int monitoringIntervalMilliseconds; //has scaling dependents http://git-wip-us.apache.org/repos/asf/stratos/blob/2c34f816/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java ---------------------------------------------------------------------- diff --cc components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java index 70ee9d4,8638dcb..787458c --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java @@@ -167,9 -150,9 +152,9 @@@ public class ApplicationMonitor extend executorService.execute(monitoringRunnable); } - private void handleScalingMaxOut(ParentInstanceContext instanceContext, + private void handleScalingMaxOut(InstanceContext instanceContext, NetworkPartitionContext networkPartitionContext) { - if (((ParentLevelNetworkPartitionContext) networkPartitionContext).getPendingInstancesCount() == 0) { + if (((NetworkPartitionContext) networkPartitionContext).getPendingInstancesCount() == 0) { //handling the application bursting only when there are no pending instances found try { if (log.isInfoEnabled()) { @@@ -546,9 -454,9 +456,9 @@@ return false; } - for (String networkPartitionIds : nextNetworkPartitions) { + for (String networkPartitionUuids : nextNetworkPartitions) { - ParentLevelNetworkPartitionContext context = - new ParentLevelNetworkPartitionContext(networkPartitionUuids); + NetworkPartitionContext context = - new NetworkPartitionContext(networkPartitionIds); ++ new NetworkPartitionContext(networkPartitionUuids); //If application instances found in the ApplicationsTopology, // then have to add them first before creating new one ApplicationInstance appInstance = (ApplicationInstance) application. @@@ -566,17 -471,17 +476,17 @@@ } instanceIds.add(instanceId); - log.info("Application instance has been added for the [network partition uuid] " + + log.info("Application instance has been added for the [network partition] " + - networkPartitionIds + " [appInstanceId] " + instanceId); + networkPartitionUuids + " [appInstanceId] " + instanceId); } //Find whether any other instances exists in cluster // which has not been added to in-memory model in the restart Map<String, ApplicationInstance> instanceMap = application.getInstanceIdToInstanceContextMap(); - for(ApplicationInstance instance : instanceMap.values()) { - if(!instanceIds.contains(instance.getInstanceId())) { - ParentLevelNetworkPartitionContext context = - new ParentLevelNetworkPartitionContext(instance.getNetworkPartitionUuid()); + for (ApplicationInstance instance : instanceMap.values()) { + if (!instanceIds.contains(instance.getInstanceId())) { + NetworkPartitionContext context = - new NetworkPartitionContext(instance.getNetworkPartitionId()); ++ new NetworkPartitionContext(instance.getNetworkPartitionUuid()); //If application instances found in the ApplicationsTopology, // then have to add them first before creating new one ApplicationInstance appInstance = (ApplicationInstance) application. http://git-wip-us.apache.org/repos/asf/stratos/blob/2c34f816/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java ---------------------------------------------------------------------- diff --cc components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java index bc3052a,3bb2254..ffa9552 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java @@@ -155,69 -155,66 +155,69 @@@ public class GroupMonitor extends Paren } } - ParentLevelNetworkPartitionContext parentLevelNetworkPartitionContext - = (ParentLevelNetworkPartitionContext) networkPartitionContext; - Collection<Instance> parentInstances = parent.getInstances(); - - for (Instance parentInstance : parentInstances) { - int nonTerminatedInstancesCount = parentLevelNetworkPartitionContext. - getNonTerminatedInstancesCount(parentInstance.getInstanceId()); - int minInstances = parentLevelNetworkPartitionContext. - getMinInstanceCount(); - int maxInstances = parentLevelNetworkPartitionContext. - getMaxInstanceCount(); - int activeInstances = parentLevelNetworkPartitionContext. - getActiveInstancesCount(parentInstance.getInstanceId()); - - if (nonTerminatedInstancesCount < minInstances) { - int instancesToBeCreated = minInstances - nonTerminatedInstancesCount; - for (int i = 0; i < instancesToBeCreated; i++) { - for (InstanceContext parentInstanceContext : parent. - getNetworkPartitionContext(parentLevelNetworkPartitionContext.getId()). - getInstanceIdToInstanceContextMap().values()) { - //keep on scale-up/scale-down only if the application is active - ApplicationMonitor appMonitor = AutoscalerContext.getInstance(). - getAppMonitor(appId); - int activeAppInstances = ((ParentLevelNetworkPartitionContext) appMonitor. - getNetworkPartitionContext(parentLevelNetworkPartitionContext.getId())). - getActiveInstancesCount(); - if (activeAppInstances > 0) { - //Creating new group instance based on the existing parent instances - if (log.isDebugEnabled()) { - log.debug("Creating a group instance of [application] " - + appId + " [group] " + id + - " as the the minimum required instances not met"); - + ApplicationMonitor applicationMonitor = AutoscalerContext.getInstance(). + getAppMonitor(appId); + + //When the application is getting un-deployed, need to avoid + // checking the minimum count sanctification + if (!applicationMonitor.isTerminating()) { + Collection<Instance> parentInstances = parent.getInstances(); + + for (Instance parentInstance : parentInstances) { - if (parentInstance.getNetworkPartitionId().equals(networkPartitionContext.getId())) { ++ if (parentInstance.getNetworkPartitionUuid().equals(networkPartitionContext.getId())) { + int nonTerminatedInstancesCount = networkPartitionContext. + getNonTerminatedInstancesCount(parentInstance.getInstanceId()); + int minInstances = networkPartitionContext. + getMinInstanceCount(); + int maxInstances = networkPartitionContext. + getMaxInstanceCount(); + int activeInstances = networkPartitionContext. + getActiveInstancesCount(parentInstance.getInstanceId()); + + if (nonTerminatedInstancesCount < minInstances) { + int instancesToBeCreated = minInstances - nonTerminatedInstancesCount; + for (int i = 0; i < instancesToBeCreated; i++) { + for (InstanceContext parentInstanceContext : parent. + getNetworkPartitionContext(networkPartitionContext.getId()). + getInstanceIdToInstanceContextMap().values()) { + //keep on scale-up/scale-down only if the application is active + ApplicationMonitor appMonitor = AutoscalerContext.getInstance(). + getAppMonitor(appId); + int activeAppInstances = appMonitor. + getNetworkPartitionContext(networkPartitionContext.getId()). + getActiveInstancesCount(); + if (activeAppInstances > 0) { + //Creating new group instance based on the existing parent instances + log.info("Creating a group instance of [application] " + + appId + " [group] " + id + + " as the the minimum required instances are not met"); + + createInstanceOnDemand(parentInstanceContext.getId()); + } } - createInstanceOnDemand(parentInstanceContext.getId()); + } } + //If the active instances are higher than the max instances, + // the group instance has to get terminated + if (activeInstances > maxInstances) { + int instancesToBeTerminated = activeInstances - maxInstances; + List<InstanceContext> contexts = + networkPartitionContext.getInstanceIdToInstanceContextMap( + parentInstance.getInstanceId()); + List<InstanceContext> contextList = new ArrayList<InstanceContext>(contexts); + for (int i = 0; i < instancesToBeTerminated; i++) { + InstanceContext instanceContext = contextList.get(i); + //scale down only when extra instances found + log.info("Terminating a group instance of [application] " + + appId + " [group] " + id + " as it exceeded the " + + "maximum no of instances by " + instancesToBeTerminated); + + handleScalingDownBeyondMin((ParentInstanceContext) instanceContext, + networkPartitionContext, true); - } - } - //If the active instances are higher than the max instances, - // the group instance has to get terminated - if (activeInstances > maxInstances) { - int instancesToBeTerminated = activeInstances - maxInstances; - List<InstanceContext> contexts = - ((ParentLevelNetworkPartitionContext) networkPartitionContext). - getInstanceIdToInstanceContextMap(parentInstance.getInstanceId()); - List<InstanceContext> contextList = new ArrayList<InstanceContext>(contexts); - for (int i = 0; i < instancesToBeTerminated; i++) { - InstanceContext instanceContext = contextList.get(i); - //scale down only when extra instances found - if (log.isDebugEnabled()) { - log.debug("Terminating a group instance of [application] " - + appId + " [group] " + id + " as it exceeded the " + - "maximum no of instances by " + instancesToBeTerminated); - + } } - handleScalingDownBeyondMin(instanceContext, - networkPartitionContext, true); - } } } @@@ -686,9 -694,9 +686,9 @@@ String deploymentPolicyId = AutoscalerUtil.getDeploymentPolicyIdByAlias(appId, groupAlias); DeploymentPolicy deploymentPolicy = PolicyManager.getInstance().getDeploymentPolicy(deploymentPolicyId); - String networkPartitionId = parentInstanceContext.getNetworkPartitionId(); + String networkPartitionId = parentInstanceContext.getNetworkPartitionUuid(); if (this.getNetworkPartitionContextsMap().containsKey(networkPartitionId)) { - parentLevelNetworkPartitionContext = (ParentLevelNetworkPartitionContext) this.getNetworkPartitionContextsMap(). + parentLevelNetworkPartitionContext = this.getNetworkPartitionContextsMap(). get(networkPartitionId); } else { if (deploymentPolicy != null) { @@@ -731,9 -739,9 +731,9 @@@ * @param groupAlias alias of the group */ private void addPartitionContext(Instance parentInstanceContext, - ParentLevelNetworkPartitionContext networkPartitionContext, String groupAlias) { + NetworkPartitionContext networkPartitionContext, String groupAlias) { - String networkPartitionId = parentInstanceContext.getNetworkPartitionId(); + String networkPartitionId = parentInstanceContext.getNetworkPartitionUuid(); String deploymentPolicyId = AutoscalerUtil.getDeploymentPolicyIdByAlias(appId, groupAlias); DeploymentPolicy deploymentPolicy = PolicyManager.getInstance().getDeploymentPolicy(deploymentPolicyId); @@@ -767,14 -775,14 +767,14 @@@ if (partitions != null && partitions.length != 0) { for (PartitionRef partition : partitions) { - if (networkPartitionContext.getPartitionCtxt(partition.getId()) == null) { + if (networkPartitionContext.getPartitionCtxt(partition.getUuid()) == null) { - GroupLevelPartitionContext groupLevelPartitionContext = new GroupLevelPartitionContext( + ParentLevelPartitionContext parentLevelPartitionContext = new ParentLevelPartitionContext( - partition.getId(), networkPartitionId, deploymentPolicyId); + partition.getUuid(), networkPartitionId, deploymentPolicyId); - networkPartitionContext.addPartitionContext(groupLevelPartitionContext); + networkPartitionContext.addPartitionContext(parentLevelPartitionContext); if (log.isInfoEnabled()) { log.info(String.format("[Partition] %s has been added for the [Group] %s", - partition.getId(), this.id)); + partition.getUuid(), this.id)); } } } @@@ -788,7 -796,7 +788,7 @@@ * Creates the group instance and adds the required context objects * * @param group the group - * @param parentInstance the parent instance context - * @param parentInstanceContext the parent instance context ++ * @param partitionContext the parent instance context * @param partitionContext partition-context used to create the group instance * @param parentLevelNetworkPartitionContext the group level network partition context */ @@@ -804,8 -812,8 +804,8 @@@ partitionId = partitionContext.getPartitionId(); } - groupInstance = createGroupInstance(group, parentInstance.getNetworkPartitionId(), - groupInstance = createGroupInstance(group, parentInstanceContext.getNetworkPartitionUuid(), - parentInstanceContext.getInstanceId(), partitionId); ++ groupInstance = createGroupInstance(group, parentInstance.getNetworkPartitionUuid(), + parentInstance.getInstanceId(), partitionId); } this.addInstance(groupInstance); http://git-wip-us.apache.org/repos/asf/stratos/blob/2c34f816/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/2c34f816/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/PolicyManager.java ---------------------------------------------------------------------- diff --cc components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/PolicyManager.java index 3336776,957386b..3854544 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/PolicyManager.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/PolicyManager.java @@@ -350,11 -411,10 +411,11 @@@ public class PolicyManager RegistryManager.getInstance().persistApplicationPolicy(applicationPolicy); if (log.isInfoEnabled()) { - log.info(String - .format("Application policy is added successfully: [application-policy-id] %s", - applicationPolicyId)); + log.info(String.format("Application policy added successfully: [tenant-id] %d [application-policy-uuid] %s " + + "[application-policy-id] %s", applicationPolicy.getTenantId(), applicationPolicyUuid, + applicationPolicy.getId())); } + } public boolean removeApplicationPolicy(String applicationPolicyId) throws InvalidPolicyException { http://git-wip-us.apache.org/repos/asf/stratos/blob/2c34f816/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/2c34f816/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java ---------------------------------------------------------------------- diff --cc components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java index f0e797f,76d527b..6f447cb --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java @@@ -1130,36 -1472,35 +1472,36 @@@ public class AutoscalerServiceImpl impl for (ClusterMonitor clusterMonitor : AutoscalerContext.getInstance().getClusterMonitors().values()) { //Following if statement checks the relevant clusters for the updated deployment policy - if (deploymentPolicy.getDeploymentPolicyID().equals(clusterMonitor.getDeploymentPolicyId())) { + if (deploymentPolicy.getUuid().equals(clusterMonitor.getDeploymentPolicyId())) { for (NetworkPartitionRef networkPartition : deploymentPolicy.getNetworkPartitionRefs()) { - ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext - = clusterMonitor.getClusterContext().getNetworkPartitionCtxt(networkPartition.getUuid()); - - try { - addNewPartitionsToClusterMonitor(clusterLevelNetworkPartitionContext, networkPartition, - deploymentPolicy.getUuid(), clusterMonitor.getClusterContext().getServiceId()); - } catch (RemoteException e) { - - String message = "Connection to cloud controller failed, Cluster monitor update failed for" + - " [deployment-policy] " + deploymentPolicy.getId(); - log.error(message); - throw new CloudControllerConnectionException(message, e); - } catch (CloudControllerServiceInvalidPartitionExceptionException e) { - - String message = "Invalid partition, Cluster monitor update failed for [deployment-policy] " - + deploymentPolicy.getId(); - log.error(message); - throw new InvalidDeploymentPolicyException(message, e); - } catch (CloudControllerServiceInvalidCartridgeTypeExceptionException e) { - - String message = "Invalid cartridge type, Cluster monitor update failed for [deployment-policy] " - + deploymentPolicy.getId() + " [cartridge] " - + clusterMonitor.getClusterContext().getServiceId(); - log.error(message); - throw new InvalidDeploymentPolicyException(message, e); + NetworkPartitionContext clusterLevelNetworkPartitionContext + = clusterMonitor.getClusterContext().getNetworkPartitionCtxt(networkPartition.getId()); + if (clusterLevelNetworkPartitionContext != null) { + try { + addNewPartitionsToClusterMonitor(clusterLevelNetworkPartitionContext, networkPartition, - deploymentPolicy.getDeploymentPolicyID(), clusterMonitor.getClusterContext().getServiceId()); ++ deploymentPolicy.getUuid(), clusterMonitor.getClusterContext().getServiceId()); + } catch (RemoteException e) { + + String message = "Connection to cloud controller failed, Cluster monitor update failed for" + - " [deployment-policy] " + deploymentPolicy.getDeploymentPolicyID(); ++ " [deployment-policy] " + deploymentPolicy.getId(); + log.error(message); + throw new CloudControllerConnectionException(message, e); + } catch (CloudControllerServiceInvalidPartitionExceptionException e) { + + String message = "Invalid partition, Cluster monitor update failed for [deployment-policy] " - + deploymentPolicy.getDeploymentPolicyID(); ++ + deploymentPolicy.getId(); + log.error(message); + throw new InvalidDeploymentPolicyException(message, e); + } catch (CloudControllerServiceInvalidCartridgeTypeExceptionException e) { + + String message = "Invalid cartridge type, Cluster monitor update failed for [deployment-policy] " - + deploymentPolicy.getDeploymentPolicyID() + " [cartridge] " ++ + deploymentPolicy.getId() + " [cartridge] " + + clusterMonitor.getClusterContext().getServiceId(); + log.error(message); + throw new InvalidDeploymentPolicyException(message, e); + } + removeOldPartitionsFromClusterMonitor(clusterLevelNetworkPartitionContext, networkPartition); } - removeOldPartitionsFromClusterMonitor(clusterLevelNetworkPartitionContext, networkPartition); } } } http://git-wip-us.apache.org/repos/asf/stratos/blob/2c34f816/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java ---------------------------------------------------------------------- diff --cc components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java index 18a6956,85a4acc..5e992ae --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java @@@ -259,6 -269,80 +260,65 @@@ public class AutoscalerUtil return toCommonProperties(properties); } - public synchronized void startApplicationMonitor(String applicationId) { - - AutoscalerContext autoscalerContext = AutoscalerContext.getInstance(); - if (autoscalerContext.getAppMonitor(applicationId) == null) { - autoscalerContext.addApplicationPendingMonitor(applicationId); - ServiceReferenceHolder.getInstance().getExecutorService().submit(new ApplicationMonitorAdder(applicationId)); - - log.info(String.format("Monitor scheduled: [application] %s ", applicationId)); - } else { - if (log.isDebugEnabled()) { - log.debug(String.format("Application monitor thread already exists: " + - "[application] %s ", applicationId)); - } - } - } + + private class ApplicationMonitorAdder implements Runnable { + private String applicationId; + + public ApplicationMonitorAdder(String applicationId) { + this.applicationId = applicationId; + } + + public void run() { + long startTime = System.currentTimeMillis(); + long endTime = startTime; + int retries = 5; + boolean success = false; + ApplicationMonitor applicationMonitor = null; + while (!success && retries != 0) { + + try { + startTime = System.currentTimeMillis(); + log.info("Starting monitor: [application] " + applicationId); + try { + applicationMonitor = MonitorFactory.getApplicationMonitor(applicationId); + } catch (PolicyValidationException e) { + String msg = "Monitor creation failed: [application] " + applicationId; + log.warn(msg, e); + retries--; + } + success = true; + endTime = System.currentTimeMillis(); + } catch (DependencyBuilderException e) { + String msg = "Monitor creation failed: [application] " + applicationId; + log.warn(msg, e); + retries--; + } catch (TopologyInConsistentException e) { + String msg = "Monitor creation failed: [application] " + applicationId; + log.warn(msg, e); + retries--; + } + } + + if (applicationMonitor == null) { + String msg = "Monitor creation failed, even after retrying for 5 times: " + + "[application] " + applicationId; + log.error(msg); + throw new RuntimeException(msg); + } + AutoscalerContext autoscalerContext = AutoscalerContext.getInstance(); + autoscalerContext.removeApplicationPendingMonitor(applicationId); + autoscalerContext.removeAppMonitor(applicationId); + autoscalerContext.addAppMonitor(applicationMonitor); + + long startupTime = ((endTime - startTime) / 1000); + if (log.isInfoEnabled()) { + log.info(String.format("Monitor started successfully: [application] %s [dependents] %s " + + "[startup-time] %d seconds", applicationMonitor.getId(), + applicationMonitor.getStartupDependencyTree(), startupTime)); + } + } + } + public static Monitor.MonitorType findMonitorType(ApplicationChildContext context) { if (context instanceof GroupChildContext) { return Monitor.MonitorType.Group; @@@ -951,66 -908,53 +1029,9 @@@ } } - public static void validateStartupOrders(String groupName, String[] startupOrders) throws InvalidServiceGroupException { - - if (startupOrders == null || startupOrders.length == 0) { - if (log.isDebugEnabled()) { - log.debug("No Startup Order defined for group " + groupName); - } - return; - } - - for (String startupOrder : startupOrders) { - // split comma separated startup orders - String[] splittedStartupOrders = startupOrder.split(","); - for (String splittedStartupOrder : splittedStartupOrders) { - if (!splittedStartupOrder.trim().startsWith("cartridge.") && !splittedStartupOrder.trim().startsWith("group.")) { - // invalid startup order; should prefixed by either 'cartridge.' or 'group.' - throw new InvalidServiceGroupException("Invalid cartridge group: startup order [" + startupOrder + - "] for group " + groupName + - ", should prefixed by either 'cartridge.' or 'group.'"); - } - } - } - } - - public static void validateScalingDependencies(String groupName, String[] scalingDependents) throws InvalidServiceGroupException { - - if (scalingDependents == null || scalingDependents.length == 0) { - if (log.isDebugEnabled()) { - log.debug("No Scaling Dependents defined for group " + groupName); - } - return; - } - - for (String scalingDependent : scalingDependents) { - // split comma separated scaling dependents - String[] splittedDependents = scalingDependent.split(","); - for (String splittedDependent : splittedDependents) { - if (!splittedDependent.trim().startsWith("cartridge.") && !splittedDependent.trim().startsWith("group.")) { - // invalid startup order; should prefixed by either 'cartridge.' or 'group.' - throw new InvalidServiceGroupException("Invalid cartridge group: Scaling Dependency [" + - scalingDependent + "] for group " + groupName + - ", should prefixed by either 'cartridge.' or 'group.'"); - } - } - } + private static class Holder { + private static final AutoscalerUtil INSTANCE = new AutoscalerUtil(); } - private class ApplicationMonitorAdder implements Runnable { - private String applicationId; - - public ApplicationMonitorAdder(String applicationId) { - this.applicationId = applicationId; - } - - public void run() { - long startTime = System.currentTimeMillis(); - long endTime = startTime; - int retries = 5; - boolean success = false; - ApplicationMonitor applicationMonitor = null; - while (!success && retries != 0) { - - try { - startTime = System.currentTimeMillis(); - log.info("Starting monitor: [application] " + applicationId); - try { - applicationMonitor = MonitorFactory.getApplicationMonitor(applicationId); - } catch (PolicyValidationException e) { - String msg = "Monitor creation failed: [application] " + applicationId; - log.warn(msg, e); - retries--; - } - success = true; - endTime = System.currentTimeMillis(); - } catch (DependencyBuilderException e) { - String msg = "Monitor creation failed: [application] " + applicationId; - log.warn(msg, e); - retries--; - } catch (TopologyInConsistentException e) { - String msg = "Monitor creation failed: [application] " + applicationId; - log.warn(msg, e); - retries--; - } - } - - if (applicationMonitor == null) { - String msg = "Monitor creation failed, even after retrying for 5 times: " - + "[application] " + applicationId; - log.error(msg); - throw new RuntimeException(msg); - } - AutoscalerContext autoscalerContext = AutoscalerContext.getInstance(); - autoscalerContext.removeApplicationPendingMonitor(applicationId); - autoscalerContext.removeAppMonitor(applicationId); - autoscalerContext.addAppMonitor(applicationMonitor); - - long startupTime = ((endTime - startTime) / 1000); - if (log.isInfoEnabled()) { - log.info(String.format("Monitor started successfully: [application] %s [dependents] %s " + - "[startup-time] %d seconds", applicationMonitor.getId(), - applicationMonitor.getStartupDependencyTree(), startupTime)); - } - } - } - public void updateMonitors() { - } } http://git-wip-us.apache.org/repos/asf/stratos/blob/2c34f816/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/AutoscalerUtilTest.java ---------------------------------------------------------------------- diff --cc components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/AutoscalerUtilTest.java index c676ed1,3706fd4..60b2fae --- a/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/AutoscalerUtilTest.java +++ b/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/AutoscalerUtilTest.java @@@ -75,62 -68,4 +68,5 @@@ public class AutoscalerUtilTest tenantRange = AutoscalerUtil.findTenantRange(tenantId, null); assertEquals(tenantRange, "*"); } + - @Test - public void testRemovalOfAutoscalingPolicy() { - List<CartridgeContext> cartridgeContexts = new ArrayList<CartridgeContext>(); - for (int i = 0; i < 12; i++) { - CartridgeContext cartridgeContext = new CartridgeContext(); - SubscribableInfoContext subscribableContext = new SubscribableInfoContext(); - subscribableContext.setAlias("cart-" + i); - subscribableContext.setDeploymentPolicy("dep-" + i); - subscribableContext.setAutoscalingPolicy("auto-" + i); - cartridgeContext.setSubscribableInfoContext(subscribableContext); - cartridgeContexts.add(cartridgeContext); - } - List<GroupContext> groupContextList = new ArrayList<GroupContext>(); - for (int i = 0; i < 5; i++) { - GroupContext groupContext = new GroupContext(); - groupContext.setAlias("group-" + i); - CartridgeContext[] cartridgeContexts1 = new CartridgeContext[2]; - cartridgeContexts1[0] = cartridgeContexts.get(i); - cartridgeContexts1[1] = cartridgeContexts.get(i + 5); - - groupContext.setCartridgeContexts(cartridgeContexts1); - groupContextList.add(groupContext); - } - - //Application-1 - ApplicationContext applicationContext = new ApplicationContext(); - applicationContext.setApplicationId("application-1"); - ComponentContext componentContext = new ComponentContext(); - CartridgeContext[] cartridgeContexts1 = new CartridgeContext[2]; - cartridgeContexts1[0] = cartridgeContexts.get(10); - cartridgeContexts1[1] = cartridgeContexts.get(11); - componentContext.setCartridgeContexts(cartridgeContexts1); - GroupContext[] groupContexts = new GroupContext[groupContextList.size()]; - componentContext.setGroupContexts(groupContextList.toArray(groupContexts)); - applicationContext.setComponents(componentContext); - - ServiceReferenceHolder holder = ServiceReferenceHolder.getInstance(); - holder.setDistributedObjectProvider(new HazelcastDistributedObjectProvider()); - - AutoscalerContext.getInstance().addApplicationContext(applicationContext); - - - boolean canRemove; - - canRemove = AutoscalerUtil.removableAutoScalerPolicy("test"); - assertEquals(canRemove, true); - - for (int i = 0; i < 12; i++) { - canRemove = AutoscalerUtil.removableAutoScalerPolicy("auto-" + i); - assertEquals(canRemove, false); - - } - } - - public void testRemovalOfDeploymentPolicy() { - - } } http://git-wip-us.apache.org/repos/asf/stratos/blob/2c34f816/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/cloudstack/CloudStackPartitionValidator.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/2c34f816/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/ec2/EC2PartitionValidator.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/2c34f816/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaas.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/2c34f816/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/openstack/OpenstackPartitionValidator.java ----------------------------------------------------------------------
