You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by ga...@apache.org on 2015/09/01 14:30:20 UTC

[42/50] [abbrv] stratos git commit: Merge with tenant-isolation branch

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 <ga...@wso2.com>
Authored: Tue Sep 1 11:18:43 2015 +0530
Committer: gayangunarathne <ga...@wso2.com>
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
----------------------------------------------------------------------