http://git-wip-us.apache.org/repos/asf/stratos/blob/6e78131b/0001-adding-Application-instances-update-support.patch ---------------------------------------------------------------------- diff --git a/0001-adding-Application-instances-update-support.patch b/0001-adding-Application-instances-update-support.patch new file mode 100644 index 0000000..0d0c18a --- /dev/null +++ b/0001-adding-Application-instances-update-support.patch @@ -0,0 +1,2137 @@ +From 50bc51def5a2ebadf0de0854a7a06d2defdd9ca6 Mon Sep 17 00:00:00 2001 +From: reka <[email protected]> +Date: Wed, 22 Apr 2015 13:29:14 +0530 +Subject: [PATCH] adding Application instances update support + +--- + .../monitor/component/ApplicationMonitor.java | 6 +- + .../autoscaler/monitor/component/GroupMonitor.java | 29 +- + .../monitor/component/ParentComponentMonitor.java | 10 +- + .../autoscaler/services/AutoscalerService.java | 9 + + .../services/impl/AutoscalerServiceImpl.java | 49 ++ + .../stratos/autoscaler/util/AutoscalerUtil.java | 156 ++++- + .../common/client/AutoscalerServiceClient.java | 8 +- + .../domain/application/ParentComponent.java | 34 ++ + .../stratos/rest/endpoint/api/StratosApiV41.java | 29 + + .../rest/endpoint/api/StratosApiV41Utils.java | 48 ++ + .../single-group-v3/artifacts/application.json | 4 +- + .../src/main/resources/AutoscalerService.wsdl | 664 +++++++++++---------- + 12 files changed, 706 insertions(+), 340 deletions(-) + +diff --git 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 +index 59b4d5f..68b4d28 100644 +--- 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 +@@ -101,7 +101,7 @@ public class ApplicationMonitor extends ParentComponentMonitor { + + public synchronized void monitor() { + final Collection<NetworkPartitionContext> networkPartitionContexts = +- this.networkPartitionCtxts.values(); ++ this.getNetworkPartitionCtxts().values(); + + Runnable monitoringRunnable = new Runnable() { + @Override +@@ -400,7 +400,7 @@ public class ApplicationMonitor extends ParentComponentMonitor { + //adding to instance map + this.instanceIdToInstanceMap.put(instanceId, instance); + //adding ApplicationLevelNetworkPartitionContext to networkPartitionContexts map +- this.networkPartitionCtxts.put(context.getId(), context); ++ this.getNetworkPartitionCtxts().put(context.getId(), context); + + return instanceId; + } +@@ -453,7 +453,7 @@ public class ApplicationMonitor extends ParentComponentMonitor { + } + + for (String networkPartitionId : nextNetworkPartitions) { +- if (!this.networkPartitionCtxts.containsKey(networkPartitionId)) { ++ if (!this.getNetworkPartitionCtxts().containsKey(networkPartitionId)) { + + ApplicationLevelNetworkPartitionContext context = new ApplicationLevelNetworkPartitionContext(networkPartitionId); + +diff --git 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 +index 7c80af1..1de7e90 100644 +--- 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 +@@ -109,7 +109,7 @@ public class GroupMonitor extends ParentComponentMonitor { + + public synchronized void monitor() { + final Collection<NetworkPartitionContext> networkPartitionContexts = +- this.networkPartitionCtxts.values(); ++ this.getNetworkPartitionCtxts().values(); + + Runnable monitoringRunnable = new Runnable() { + @Override +@@ -140,6 +140,23 @@ public class GroupMonitor extends ParentComponentMonitor { + } + } + } ++ ++ int nonTerminatedInstancesCount = networkPartitionContext. ++ getNonTerminatedInstancesCount(); ++ int minInstances = ((GroupLevelNetworkPartitionContext)networkPartitionContext). ++ getMinInstanceCount(); ++ if(nonTerminatedInstancesCount < minInstances) { ++ int instancesToBeCreated = minInstances - nonTerminatedInstancesCount; ++ for(int i = 0; i < instancesToBeCreated; i++) { ++ for(InstanceContext parentInstanceContext : parent. ++ getNetworkPartitionContext(networkPartitionContext.getId()). ++ getInstanceIdToInstanceContextMap().values()) { ++ //Creating new group instance based on the existing parent instances ++ createInstanceOnDemand(parentInstanceContext.getId()); ++ } ++ ++ } ++ } + } + } + }; +@@ -468,7 +485,7 @@ public class GroupMonitor extends ParentComponentMonitor { + //Parent notification always brings up new group instances in order to keep the ratio. + String networkPartitionId = scalingEvent.getNetworkPartitionId(); + final String parentInstanceId = scalingEvent.getInstanceId(); +- final NetworkPartitionContext networkPartitionContext = this.networkPartitionCtxts. ++ final NetworkPartitionContext networkPartitionContext = this.getNetworkPartitionCtxts(). + get(networkPartitionId); + + float factor = scalingEvent.getFactor(); +@@ -544,8 +561,8 @@ public class GroupMonitor extends ParentComponentMonitor { + DeploymentPolicy deploymentPolicy = PolicyManager.getInstance().getDeploymentPolicy(deploymentPolicyId); + + String networkPartitionId = parentInstanceContext.getNetworkPartitionId(); +- if (this.networkPartitionCtxts.containsKey(networkPartitionId)) { +- groupLevelNetworkPartitionContext = (GroupLevelNetworkPartitionContext) this.networkPartitionCtxts. ++ if (this.getNetworkPartitionCtxts().containsKey(networkPartitionId)) { ++ groupLevelNetworkPartitionContext = (GroupLevelNetworkPartitionContext) this.getNetworkPartitionCtxts(). + get(networkPartitionId); + } else { + if (deploymentPolicy != null) { +@@ -885,7 +902,7 @@ public class GroupMonitor extends ParentComponentMonitor { + } + + public void addNetworkPartitionContext(GroupLevelNetworkPartitionContext clusterLevelNetworkPartitionContext) { +- this.networkPartitionCtxts.put(clusterLevelNetworkPartitionContext.getId(), clusterLevelNetworkPartitionContext); ++ this.getNetworkPartitionCtxts().put(clusterLevelNetworkPartitionContext.getId(), clusterLevelNetworkPartitionContext); + } + + +@@ -915,7 +932,7 @@ public class GroupMonitor extends ParentComponentMonitor { + + if (!groupInstances.isEmpty()) { + GroupLevelNetworkPartitionContext networkPartitionContext = +- (GroupLevelNetworkPartitionContext) this.networkPartitionCtxts. ++ (GroupLevelNetworkPartitionContext) this.getNetworkPartitionCtxts(). + get(networkPartitionId); + int minInstances = networkPartitionContext.getMinInstanceCount(); + //if terminated all the instances in this instances map should be in terminated state +diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java +index eb5804c..6b69065 100644 +--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java ++++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java +@@ -239,7 +239,7 @@ public abstract class ParentComponentMonitor extends Monitor implements Runnable + String instanceId = scalingEvent.getInstanceId(); + String id = scalingEvent.getId(); + NetworkPartitionContext networkPartitionContext = +- this.networkPartitionCtxts.get(networkPartitionId); ++ this.getNetworkPartitionCtxts().get(networkPartitionId); + if (networkPartitionContext != null) { + InstanceContext instanceContext = networkPartitionContext. + getInstanceContext(instanceId); +@@ -277,7 +277,7 @@ public abstract class ParentComponentMonitor extends Monitor implements Runnable + String instanceId = scalingUpBeyondMaxEvent.getInstanceId(); + String id = scalingUpBeyondMaxEvent.getId(); + NetworkPartitionContext networkPartitionContext = +- this.networkPartitionCtxts.get(networkPartitionId); ++ this.getNetworkPartitionCtxts().get(networkPartitionId); + if (networkPartitionContext != null) { + InstanceContext instanceContext = networkPartitionContext. + getInstanceContext(instanceId); +@@ -296,7 +296,7 @@ public abstract class ParentComponentMonitor extends Monitor implements Runnable + } + + public NetworkPartitionContext getNetworkPartitionContext(String networkPartitionId) { +- return this.networkPartitionCtxts.get(networkPartitionId); ++ return this.getNetworkPartitionCtxts().get(networkPartitionId); + } + + +@@ -752,6 +752,10 @@ public abstract class ParentComponentMonitor extends Monitor implements Runnable + return startupDependencyTree; + } + ++ public Map<String, NetworkPartitionContext> getNetworkPartitionCtxts() { ++ return networkPartitionCtxts; ++ } ++ + private class MonitorAdder implements Runnable { + + private final ApplicationChildContext context; +diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/AutoscalerService.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/AutoscalerService.java +index ba38727..80b134b 100644 +--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/AutoscalerService.java ++++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/AutoscalerService.java +@@ -88,6 +88,15 @@ public interface AutoscalerService { + public void addApplication(ApplicationContext applicationContext) throws ApplicationDefinitionException; + + /** ++ * update an application ++ * ++ * @param applicationContext {@link org.apache.stratos.autoscaler.applications.pojo.ApplicationContext} ++ * @throws ApplicationDefinitionException if an error occurs ++ */ ++ public void updateApplication(ApplicationContext applicationContext) throws ApplicationDefinitionException; ++ ++ ++ /** + * Get an application + * + * @param applicationId +diff --git 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 +index a9a76a7..ddd69e7 100644 +--- 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 +@@ -149,6 +149,55 @@ public class AutoscalerServiceImpl implements AutoscalerService { + } + + @Override ++ public void updateApplication(ApplicationContext applicationContext) ++ throws ApplicationDefinitionException { ++ ++ String applicationId = applicationContext.getApplicationId(); ++ if (log.isInfoEnabled()) { ++ log.info(String.format("Updating application: [application-id] %s", ++ applicationContext.getApplicationId())); ++ } ++ ++ if(AutoscalerContext.getInstance().getApplicationContext(applicationId) == null) { ++ String msg = "Application is not found as ApplicationContext. Please add application before updating it"; ++ log.error(msg); ++ throw new ApplicationDefinitionException(msg); ++ } ++ ++ if(ApplicationHolder.getApplications().getApplication(applicationId) == null) { ++ String msg = "Application is not found as Application. Please add application before updating it"; ++ log.error(msg); ++ throw new ApplicationDefinitionException(msg); ++ } ++ ++ ++ ApplicationParser applicationParser = new DefaultApplicationParser(); ++ Application application = applicationParser.parse(applicationContext); ++ ++ //Need to update the application ++ AutoscalerUtil.getInstance().updateApplicationsTopology(application); ++ ++ //Update the clusterMonitors ++ AutoscalerUtil.getInstance().updateClusterMonitor(application); ++ ++ List<ApplicationClusterContext> applicationClusterContexts = applicationParser.getApplicationClusterContexts(); ++ ApplicationClusterContext[] applicationClusterContextsArray = applicationClusterContexts.toArray( ++ new ApplicationClusterContext[applicationClusterContexts.size()]); ++ applicationContext.getComponents().setApplicationClusterContexts(applicationClusterContextsArray); ++ ++ ApplicationContext existingApplicationContext = AutoscalerContext.getInstance(). ++ getApplicationContext(applicationId); ++ applicationContext.setStatus(existingApplicationContext.getStatus()); ++ //updating the applicationContext ++ AutoscalerContext.getInstance().updateApplicationContext(applicationContext); ++ ++ if (log.isInfoEnabled()) { ++ log.info(String.format("Application added successfully: [application-id] %s", ++ applicationId)); ++ } ++ } ++ ++ @Override + public ApplicationContext getApplication(String applicationId) { + return AutoscalerContext.getInstance().getApplicationContext(applicationId); + } +diff --git 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 +index 0650bf2..1548e98 100644 +--- 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 +@@ -32,7 +32,13 @@ import org.apache.stratos.autoscaler.applications.pojo.CartridgeContext; + import org.apache.stratos.autoscaler.applications.pojo.ComponentContext; + import org.apache.stratos.autoscaler.applications.pojo.GroupContext; + import org.apache.stratos.autoscaler.context.AutoscalerContext; ++import org.apache.stratos.autoscaler.context.InstanceContext; ++import org.apache.stratos.autoscaler.context.cluster.ClusterInstanceContext; ++import org.apache.stratos.autoscaler.context.partition.network.ClusterLevelNetworkPartitionContext; ++import org.apache.stratos.autoscaler.context.partition.network.GroupLevelNetworkPartitionContext; ++import org.apache.stratos.autoscaler.context.partition.network.NetworkPartitionContext; + import org.apache.stratos.autoscaler.exception.AutoScalerException; ++import org.apache.stratos.autoscaler.exception.application.ApplicationDefinitionException; + import org.apache.stratos.autoscaler.exception.application.DependencyBuilderException; + import org.apache.stratos.autoscaler.exception.application.InvalidApplicationPolicyException; + import org.apache.stratos.autoscaler.exception.application.TopologyInConsistentException; +@@ -40,7 +46,9 @@ import org.apache.stratos.autoscaler.exception.policy.ApplicatioinPolicyNotExist + import org.apache.stratos.autoscaler.exception.policy.PolicyValidationException; + import org.apache.stratos.autoscaler.monitor.Monitor; + import org.apache.stratos.autoscaler.monitor.MonitorFactory; ++import org.apache.stratos.autoscaler.monitor.cluster.ClusterMonitor; + import org.apache.stratos.autoscaler.monitor.component.ApplicationMonitor; ++import org.apache.stratos.autoscaler.monitor.component.GroupMonitor; + import org.apache.stratos.autoscaler.pojo.policy.PolicyManager; + import org.apache.stratos.autoscaler.pojo.policy.deployment.ApplicationPolicy; + import org.apache.stratos.autoscaler.pojo.policy.deployment.DeploymentPolicy; +@@ -53,6 +61,7 @@ import org.apache.stratos.common.partition.NetworkPartition; + import org.apache.stratos.messaging.domain.application.Application; + import org.apache.stratos.messaging.domain.application.Applications; + import org.apache.stratos.messaging.domain.application.ClusterDataHolder; ++import org.apache.stratos.messaging.domain.application.Group; + import org.apache.stratos.messaging.domain.topology.Service; + import org.apache.stratos.messaging.domain.topology.Topology; + import org.apache.stratos.messaging.message.receiver.topology.TopologyManager; +@@ -477,7 +486,7 @@ public class AutoscalerUtil { + /** + * Get alias to deployment policy id map in the given application. + * +- * @param applicationId the application id ++ * @param applicationContext the application context + * @return alias to deployment policy map + */ + public static Map<String, String> getAliasToDeploymentPolicyIdMapOfApplication(ApplicationContext applicationContext) { +@@ -535,10 +544,14 @@ public class AutoscalerUtil { + String deploymentPolicyId = groupContext.getDeploymentPolicy(); + aliasToDeploymentPolicyIdMap.put(groupContext.getAlias(), deploymentPolicyId); + if (groupContext.getCartridgeContexts() != null && groupContext.getCartridgeContexts().length != 0) { +- setDeploymentPolicyIdToChildCartridgeContexts(aliasToDeploymentPolicyIdMap, deploymentPolicyId, groupContext.getCartridgeContexts()); ++ setDeploymentPolicyIdToChildCartridgeContexts(aliasToDeploymentPolicyIdMap, ++ deploymentPolicyId, ++ groupContext.getCartridgeContexts()); + } + if (groupContext.getGroupContexts() != null && groupContext.getGroupContexts().length != 0) { +- setDeploymentPolicyIdToChildGroupContexts(aliasToDeploymentPolicyIdMap, deploymentPolicyId, groupContext.getGroupContexts()); ++ setDeploymentPolicyIdToChildGroupContexts(aliasToDeploymentPolicyIdMap, ++ deploymentPolicyId, ++ groupContext.getGroupContexts()); + } + + } +@@ -548,12 +561,14 @@ public class AutoscalerUtil { + } + + private static void setDeploymentPolicyIdToChildCartridgeContexts( +- Map<String, String> aliasToDeploymentPolicyIdMap, String deploymentPolicyId, CartridgeContext[] cartridgeContexts) { ++ Map<String, String> aliasToDeploymentPolicyIdMap, String deploymentPolicyId, ++ CartridgeContext[] cartridgeContexts) { + + if (cartridgeContexts != null && cartridgeContexts.length != 0) { + for (CartridgeContext cartridgeContext : cartridgeContexts) { + if (cartridgeContext != null) { +- aliasToDeploymentPolicyIdMap.put(cartridgeContext.getSubscribableInfoContext().getAlias(), deploymentPolicyId); ++ aliasToDeploymentPolicyIdMap.put(cartridgeContext.getSubscribableInfoContext().getAlias(), ++ deploymentPolicyId); + } + } + } +@@ -566,10 +581,14 @@ public class AutoscalerUtil { + for (GroupContext groupContext : groupContexts) { + if (groupContext != null) { + if (groupContext.getCartridgeContexts() != null && groupContext.getCartridgeContexts().length != 0) { +- setDeploymentPolicyIdToChildCartridgeContexts(aliasToDeploymentPolicyIdMap, deploymentPolicyId, groupContext.getCartridgeContexts()); ++ setDeploymentPolicyIdToChildCartridgeContexts(aliasToDeploymentPolicyIdMap, ++ deploymentPolicyId, ++ groupContext.getCartridgeContexts()); + } + if (groupContext.getGroupContexts() != null && groupContext.getGroupContexts().length != 0) { +- setDeploymentPolicyIdToChildGroupContexts(aliasToDeploymentPolicyIdMap, deploymentPolicyId, groupContext.getGroupContexts()); ++ setDeploymentPolicyIdToChildGroupContexts(aliasToDeploymentPolicyIdMap, ++ deploymentPolicyId, ++ groupContext.getGroupContexts()); + } + } + } +@@ -603,7 +622,8 @@ public class AutoscalerUtil { + // network partition algorithm can't null or empty + String algorithm = applicationPolicy.getAlgorithm(); + if (algorithm == null || StringUtils.isBlank(algorithm)) { +- String msg = "Invalid Application Policy. Cause -> Network partition algorithm is null or empty"; ++ String msg = "Invalid Application Policy. Cause -> Network " + ++ "partition algorithm is null or empty"; + log.error(msg); + throw new InvalidApplicationPolicyException(msg); + } +@@ -611,7 +631,8 @@ public class AutoscalerUtil { + // network partition algorithm should be either one-after-another or all-at-once + if (!algorithm.equals(StratosConstants.NETWORK_PARTITION_ONE_AFTER_ANOTHER_ALGORITHM_ID) + && !algorithm.equals(StratosConstants.NETWORK_PARTITION_ALL_AT_ONCE_ALGORITHM_ID)) { +- String msg = String.format("Invalid Application Policy. Cause -> Invalid network partition algorithm. " ++ String msg = String.format("Invalid Application Policy. Cause -> " + ++ "Invalid network partition algorithm. " + + "It should be either %s or %s, but found %s", + StratosConstants.NETWORK_PARTITION_ONE_AFTER_ANOTHER_ALGORITHM_ID, + StratosConstants.NETWORK_PARTITION_ALL_AT_ONCE_ALGORITHM_ID, algorithm); +@@ -640,9 +661,11 @@ public class AutoscalerUtil { + } + + // network partitions should be added already +- if (null == CloudControllerServiceClient.getInstance().getNetworkPartition(networkPartitionId)) { ++ if (null == CloudControllerServiceClient.getInstance(). ++ getNetworkPartition(networkPartitionId)) { + String msg = String.format("Invalid Application Policy. " +- + "Cause -> Network partition not found for network-partition-id : %s", networkPartitionId); ++ + "Cause -> Network partition not found for network-partition-id : %s", ++ networkPartitionId); + log.error(msg); + throw new InvalidApplicationPolicyException(msg); + } +@@ -652,28 +675,34 @@ public class AutoscalerUtil { + // if networkPartitionGroups property is set, we need to validate that too + Properties properties = applicationPolicy.getProperties(); + if (properties != null) { +- Property networkPartitionGroupsProperty = properties.getProperty(StratosConstants.APPLICATION_POLICY_NETWORK_PARTITION_GROUPS); ++ Property networkPartitionGroupsProperty = properties. ++ getProperty(StratosConstants.APPLICATION_POLICY_NETWORK_PARTITION_GROUPS); + if (networkPartitionGroupsProperty != null) { + String networkPartitionGroupsPropertyValue = networkPartitionGroupsProperty.getValue(); + if (networkPartitionGroupsPropertyValue != null) { +- String[] networkPartitionGroups = networkPartitionGroupsPropertyValue.split(StratosConstants.APPLICATION_POLICY_NETWORK_PARTITION_GROUPS_SPLITTER); ++ String[] networkPartitionGroups = networkPartitionGroupsPropertyValue. ++ split(StratosConstants.APPLICATION_POLICY_NETWORK_PARTITION_GROUPS_SPLITTER); + if (networkPartitionGroups != null) { + for (String networkPartitionIdsString : networkPartitionGroups) { +- networkPartitionIds = networkPartitionIdsString.split(StratosConstants.APPLICATION_POLICY_NETWORK_PARTITIONS_SPLITTER); ++ networkPartitionIds = networkPartitionIdsString. ++ split(StratosConstants.APPLICATION_POLICY_NETWORK_PARTITIONS_SPLITTER); + if (networkPartitionIds != null) { + for (String networkPartitionId : networkPartitionIds) { + // network-partition-id can't be null or empty + if (null == networkPartitionId || networkPartitionId.isEmpty()) { + String msg = String.format("Invalid Application Policy. " +- + "Cause -> Invalid network-partition-id : %s", networkPartitionId); ++ + "Cause -> Invalid network-partition-id : %s", ++ networkPartitionId); + log.error(msg); + throw new InvalidApplicationPolicyException(msg); + } + + // network partitions should be added already +- if (null == CloudControllerServiceClient.getInstance().getNetworkPartition(networkPartitionId)) { ++ if (null == CloudControllerServiceClient.getInstance(). ++ getNetworkPartition(networkPartitionId)) { + String msg = String.format("Invalid Application Policy. " +- + "Cause -> Network partition not found for network-partition-id : %s", networkPartitionId); ++ + "Cause -> Network partition not found for " + ++ "network-partition-id : %s", networkPartitionId); + log.error(msg); + throw new InvalidApplicationPolicyException(msg); + } +@@ -736,4 +765,97 @@ public class AutoscalerUtil { + } + return false; + } ++ ++ public void updateApplicationsTopology(Application application) ++ throws ApplicationDefinitionException{ ++ Application existingApplication = ApplicationHolder.getApplications(). ++ getApplication(application.getUniqueIdentifier()); ++ //Retrieve all the groups in order to update it ++ Set<Group> existingGroups = existingApplication.getAllGroupsRecursively(); ++ ++ //updating all the groups by traversing the existing application ++ for(Group existingGroup : existingGroups) { ++ Group newGroup = application.getGroupRecursively(existingGroup.getUniqueIdentifier()); ++ if(newGroup != null) { ++ //Finding the GroupMonitor based on ApplicationMonitor ++ GroupMonitor groupMonitor = (GroupMonitor) AutoscalerContext.getInstance(). ++ getAppMonitor(application.getUniqueIdentifier()). ++ findGroupMonitorWithId(existingGroup.getUniqueIdentifier()); ++ //Updating the GroupMonitor ++ for(NetworkPartitionContext networkPartitionContext : groupMonitor. ++ getNetworkPartitionCtxts().values()) { ++ ((GroupLevelNetworkPartitionContext)networkPartitionContext). ++ setMinInstanceCount(newGroup.getGroupMinInstances()); ++ ((GroupLevelNetworkPartitionContext)networkPartitionContext). ++ setMaxInstanceCount(newGroup.getGroupMaxInstances()); ++ } ++ ++ try{ ++ ApplicationHolder.acquireWriteLock(); ++ //update the min and max of Group instances ++ existingGroup.setGroupMinInstances(newGroup.getGroupMinInstances()); ++ //TODO applications Topology update ++ existingGroup.setGroupMaxInstances(newGroup.getGroupMaxInstances()); ++ } finally { ++ ApplicationHolder.releaseWriteLock(); ++ } ++ } else { ++ String msg = "Application is inconsistent. Please check whether the updated " + ++ "application has same structure as existing application"; ++ log.error(msg); ++ throw new ApplicationDefinitionException(msg); ++ } ++ ++ } ++ ++ } ++ ++ public void updateClusterMonitor(Application application) throws ApplicationDefinitionException{ ++ Application existingApplication = ApplicationHolder.getApplications(). ++ getApplication(application.getUniqueIdentifier()); ++ ++ Set<ClusterDataHolder> clusterDataHolders = application.getClusterDataRecursively(); ++ ++ for(ClusterDataHolder clusterDataHolder : clusterDataHolders) { ++ ClusterMonitor clusterMonitor = AutoscalerContext.getInstance(). ++ getClusterMonitor(clusterDataHolder.getClusterId()); ++ if(clusterMonitor != null) { ++ for(ClusterLevelNetworkPartitionContext networkPartitionContext : ++ clusterMonitor.getNetworkPartitionCtxts()) { ++ for(InstanceContext instanceContext : ++ networkPartitionContext.getInstanceIdToInstanceContextMap().values()) { ++ //Updating the min and max instances of cluster instance context ++ ((ClusterInstanceContext)instanceContext). ++ setMinInstanceCount(clusterDataHolder.getMinInstances()); ++ ((ClusterInstanceContext)instanceContext). ++ setMaxInstanceCount(clusterDataHolder.getMaxInstances()); ++ ++ try { ++ ApplicationHolder.acquireWriteLock(); ++ //Updating the existing application ++ ClusterDataHolder existingClusterDataHolder = existingApplication. ++ getClusterDataHolderRecursivelyByAlias( ++ AutoscalerUtil.getAliasFromClusterId( ++ clusterDataHolder.getClusterId())); ++ existingClusterDataHolder.setMinInstances(clusterDataHolder. ++ getMinInstances()); ++ existingClusterDataHolder.setMaxInstances(clusterDataHolder. ++ getMaxInstances()); ++ } finally { ++ ApplicationHolder.releaseWriteLock(); ++ } ++ } ++ } ++ } else { ++ String msg = "Application is inconsistent. Please check whether the updated " + ++ "application has same structure as existing application"; ++ log.error(msg); ++ throw new ApplicationDefinitionException(msg); ++ } ++ } ++ } ++ ++ public void updateMonitors() { ++ ++ } + } +diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/AutoscalerServiceClient.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/AutoscalerServiceClient.java +index 2b7d0cb..c92b353 100644 +--- a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/AutoscalerServiceClient.java ++++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/AutoscalerServiceClient.java +@@ -90,10 +90,16 @@ public class AutoscalerServiceClient { + return stub.getAutoscalingPolicy(autoscalingPolicyId); + } + +- public void addApplication(ApplicationContext applicationContext) throws AutoscalerServiceApplicationDefinitionExceptionException, RemoteException { ++ public void addApplication(ApplicationContext applicationContext) ++ throws AutoscalerServiceApplicationDefinitionExceptionException, RemoteException { + stub.addApplication(applicationContext); + } + ++ public void updateApplication(ApplicationContext applicationContext) ++ throws AutoscalerServiceApplicationDefinitionExceptionException, RemoteException { ++ stub.updateApplication(applicationContext); ++ } ++ + public ApplicationContext getApplication(String applicationId) throws RemoteException { + return stub.getApplication(applicationId); + } +diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/application/ParentComponent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/application/ParentComponent.java +index c1b32d0..4a64357 100644 +--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/application/ParentComponent.java ++++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/application/ParentComponent.java +@@ -264,6 +264,28 @@ public abstract class ParentComponent<T extends Instance> implements Serializabl + } + + /** ++ * Collects the Group for the parent component and all the ++ * child components recursively ++ * ++ * @return Set of Group objects if available, else null ++ */ ++ public Set<Group> getAllGroupsRecursively() { ++ ++ Set<Group> appGroups = new HashSet<Group>(); ++ ++ // get top level Cluster Data ++ if (this.aliasToGroupMap != null && !this.aliasToGroupMap.isEmpty()) { ++ appGroups.addAll(this.aliasToGroupMap.values()); ++ } ++ ++ // find other nested Cluster Data (in the Groups) ++ if (getGroups() != null) { ++ getGroupsRecursively(appGroups, getGroups()); ++ } ++ ++ return appGroups; ++ } ++ /** + * Adds InstanceContext of a child to the instanceIdToInstanceContextMap. + * + * @param instanceId instance id of child +@@ -364,6 +386,18 @@ public abstract class ParentComponent<T extends Instance> implements Serializabl + } + } + ++ protected void getGroupsRecursively(Set<Group> groupsSet, Collection<Group> groups) { ++ ++ for (Group group : groups) { ++ if (group.getGroups() != null && !group.getGroups().isEmpty()) { ++ groupsSet.addAll(group.getGroups()); ++ if (group.getGroups() != null) { ++ getGroupsRecursively(groupsSet, group.getGroups()); ++ } ++ } ++ } ++ } ++ + + public Map<String, T> getInstanceIdToInstanceContextMap() { + return instanceIdToInstanceContextMap; +diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java +index 4df702f..e023ab9 100644 +--- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java ++++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java +@@ -644,6 +644,35 @@ public class StratosApiV41 extends AbstractApi { + } + + /** ++ * Add application ++ * ++ * @param applicationDefinition Application Definition ++ * @return 201 if application is successfully added ++ * @throws RestAPIException ++ */ ++ @PUT ++ @Path("/applications") ++ @Produces("application/json") ++ @Consumes("application/json") ++ @AuthorizationAction("/permission/protected/manage/addApplication") ++ public Response updateApplication(ApplicationBean applicationDefinition) throws RestAPIException { ++ try { ++ StratosApiV41Utils.updateApplication(applicationDefinition, getConfigContext(), getUsername(), getTenantDomain()); ++ ++ URI url = uriInfo.getAbsolutePathBuilder().path(applicationDefinition.getApplicationId()).build(); ++ return Response.created(url).entity(new SuccessResponseBean(Response.Status.CREATED.getStatusCode(), ++ String.format("Application added successfully: [application] %s", ++ applicationDefinition.getApplicationId()))).build(); ++ } catch (RestAPIException e) { ++ if (e.getMessage().contains("already exists")) { ++ return Response.status(Response.Status.CONFLICT).build(); ++ } else { ++ throw e; ++ } ++ } ++ } ++ ++ /** + * Return applications + * + * @return 200 if applications are found +diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java +index 03bb67d..757286a 100644 +--- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java ++++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java +@@ -1111,6 +1111,54 @@ public class StratosApiV41Utils { + } + } + ++ /** ++ * Update the existence of the application and update it. ++ * ++ * @param appDefinition Application definition ++ * @param ctxt Configuration context ++ * @param userName Username ++ * @param tenantDomain Tenant Domain ++ * @throws RestAPIException ++ */ ++ public static void updateApplication(ApplicationBean appDefinition, ConfigurationContext ctxt, ++ String userName, String tenantDomain) ++ throws RestAPIException { ++ ++ if (StringUtils.isBlank(appDefinition.getApplicationId())) { ++ String message = "Please specify the application name"; ++ log.error(message); ++ throw new RestAPIException(message); ++ } ++ ++ validateApplication(appDefinition); ++ ++ ApplicationContext applicationContext = ObjectConverter.convertApplicationDefinitionToStubApplicationContext( ++ appDefinition); ++ applicationContext.setTenantId(ApplicationManagementUtil.getTenantId(ctxt)); ++ applicationContext.setTenantDomain(tenantDomain); ++ applicationContext.setTenantAdminUsername(userName); ++ ++ if (appDefinition.getProperty() != null) { ++ org.apache.stratos.autoscaler.stub.Properties properties = new org.apache.stratos.autoscaler.stub.Properties(); ++ for (PropertyBean propertyBean : appDefinition.getProperty()) { ++ org.apache.stratos.autoscaler.stub.Property property = new org.apache.stratos.autoscaler.stub.Property(); ++ property.setName(propertyBean.getName()); ++ property.setValue(propertyBean.getValue()); ++ properties.addProperties(property); ++ } ++ applicationContext.setProperties(properties); ++ } ++ ++ try { ++ AutoscalerServiceClient.getInstance().updateApplication(applicationContext); ++ } catch (AutoscalerServiceApplicationDefinitionExceptionException e) { ++ throw new RestAPIException(e); ++ } catch (RemoteException e) { ++ throw new RestAPIException(e); ++ } ++ } ++ ++ + private static void findCartridgesAndGroupsInApplication( + ApplicationBean applicationBean, List<String> cartridges, List<String> cartridgeGroups) { + +diff --git a/samples/applications/single-group-v3/artifacts/application.json b/samples/applications/single-group-v3/artifacts/application.json +index a050de4..42f5382 100644 +--- a/samples/applications/single-group-v3/artifacts/application.json ++++ b/samples/applications/single-group-v3/artifacts/application.json +@@ -6,8 +6,8 @@ + { + "name": "tomcat2-group", + "alias": "my-tomcat2-group", +- "groupMinInstances": 2, +- "groupMaxInstances": 3, ++ "groupMinInstances": 3, ++ "groupMaxInstances": 4, + "deploymentPolicy":"deployment-policy-1", + "cartridges": [ + { +diff --git a/service-stubs/org.apache.stratos.autoscaler.service.stub/src/main/resources/AutoscalerService.wsdl b/service-stubs/org.apache.stratos.autoscaler.service.stub/src/main/resources/AutoscalerService.wsdl +index 05e64a4..649f3cb 100644 +--- a/service-stubs/org.apache.stratos.autoscaler.service.stub/src/main/resources/AutoscalerService.wsdl ++++ b/service-stubs/org.apache.stratos.autoscaler.service.stub/src/main/resources/AutoscalerService.wsdl +@@ -1,10 +1,11 @@ +-<?xml version="1.0" encoding="UTF-8"?><wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:ns="http://impl.services.autoscaler.stratos.apache.org" xmlns:ax28="http://application.exception.autoscaler.stratos.apache.org/xsd" xmlns:ax25="http://pojo.applications.autoscaler.stratos.apache.org/xsd" xmlns:ax217="http://policy.exception.autoscaler.stratos.apache.org/xsd" xmlns:ax21="http://deployment.policy.pojo.autoscaler.stratos.apache.org/xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ax22="http://common.stratos.apache.org/xsd" xmlns:ax219="http://exception.autoscaler.stratos.apache.org/xsd" xmlns:ax214="http://partition.common.stratos.apache.org/xsd" xmlns:ns1="http://org.apache.axis2/xsd" xmlns:ax212="http://autoscale.policy.pojo.autoscaler.stratos.apache.org/xsd" xmlns:ax222="http://rmi.java/xsd" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:ax210="http://pojo.autoscaler.stratos.apache.org/xsd" xmlns:ax223="http://io.java/xsd" xmlns:http="http ://schemas.xmlsoap.org/wsdl/http/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" targetNamespace="http://impl.services.autoscaler.stratos.apache.org"> ++<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:ax29="http://deployment.policy.pojo.autoscaler.stratos.apache.org/xsd" xmlns:ns="http://impl.services.autoscaler.stratos.apache.org" xmlns:ax27="http://policy.exception.autoscaler.stratos.apache.org/xsd" xmlns:ax23="http://rmi.java/xsd" xmlns:ax24="http://io.java/xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ax218="http://autoscale.policy.pojo.autoscaler.stratos.apache.org/xsd" xmlns:ax215="http://exception.autoscaler.stratos.apache.org/xsd" xmlns:ns1="http://org.apache.axis2/xsd" xmlns:ax220="http://application.exception.autoscaler.stratos.apache.org/xsd" xmlns:ax210="http://partition.common.stratos.apache.org/xsd" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:ax223="http://pojo.applications.autoscaler.stratos.apache.org/xsd" xmlns:ax211="http://common.stratos.apache.org/xsd" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:ax226="http://pojo.autoscaler.stratos.apache.org/xsd" xml ns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" targetNamespace="http://impl.services.autoscaler.stratos.apache.org"> ++ <wsdl:documentation>AutoscalerService</wsdl:documentation> + <wsdl:types> +- <xs:schema xmlns:ax224="http://io.java/xsd" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://rmi.java/xsd"> ++ <xs:schema xmlns:ax25="http://io.java/xsd" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://rmi.java/xsd"> + <xs:import namespace="http://io.java/xsd"/> + <xs:complexType name="RemoteException"> + <xs:complexContent> +- <xs:extension base="ax223:IOException"> ++ <xs:extension base="ax25:IOException"> + <xs:sequence> + <xs:element minOccurs="0" name="cause" nillable="true" type="xs:anyType"/> + <xs:element minOccurs="0" name="message" nillable="true" type="xs:string"/> +@@ -21,7 +22,7 @@ + <xs:element minOccurs="0" name="id" nillable="true" type="xs:string"/> + <xs:element minOccurs="0" name="instanceRoundingFactor" type="xs:float"/> + <xs:element minOccurs="0" name="isPublic" type="xs:boolean"/> +- <xs:element minOccurs="0" name="loadThresholds" nillable="true" type="ax212:LoadThresholds"/> ++ <xs:element minOccurs="0" name="loadThresholds" nillable="true" type="ax218:LoadThresholds"/> + <xs:element minOccurs="0" name="tenantId" type="xs:int"/> + </xs:sequence> + </xs:complexType> +@@ -33,17 +34,17 @@ + </xs:sequence> + </xs:complexType> + </xs:schema> +- <xs:schema xmlns:ax26="http://common.stratos.apache.org/xsd" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://pojo.applications.autoscaler.stratos.apache.org/xsd"> ++ <xs:schema xmlns:ax224="http://common.stratos.apache.org/xsd" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://pojo.applications.autoscaler.stratos.apache.org/xsd"> + <xs:import namespace="http://common.stratos.apache.org/xsd"/> + <xs:complexType name="ApplicationContext"> + <xs:sequence> + <xs:element minOccurs="0" name="alias" nillable="true" type="xs:string"/> + <xs:element minOccurs="0" name="applicationId" nillable="true" type="xs:string"/> +- <xs:element minOccurs="0" name="components" nillable="true" type="ax25:ComponentContext"/> ++ <xs:element minOccurs="0" name="components" nillable="true" type="ax223:ComponentContext"/> + <xs:element minOccurs="0" name="description" nillable="true" type="xs:string"/> + <xs:element minOccurs="0" name="multiTenant" type="xs:boolean"/> + <xs:element minOccurs="0" name="name" nillable="true" type="xs:string"/> +- <xs:element minOccurs="0" name="properties" nillable="true" type="ax26:Properties"/> ++ <xs:element minOccurs="0" name="properties" nillable="true" type="ax224:Properties"/> + <xs:element minOccurs="0" name="status" nillable="true" type="xs:string"/> + <xs:element minOccurs="0" name="tenantAdminUsername" nillable="true" type="xs:string"/> + <xs:element minOccurs="0" name="tenantDomain" nillable="true" type="xs:string"/> +@@ -52,10 +53,10 @@ + </xs:complexType> + <xs:complexType name="ComponentContext"> + <xs:sequence> +- <xs:element maxOccurs="unbounded" minOccurs="0" name="applicationClusterContexts" nillable="true" type="ax25:ApplicationClusterContext"/> +- <xs:element maxOccurs="unbounded" minOccurs="0" name="cartridgeContexts" nillable="true" type="ax25:CartridgeContext"/> +- <xs:element minOccurs="0" name="dependencyContext" nillable="true" type="ax25:DependencyContext"/> +- <xs:element maxOccurs="unbounded" minOccurs="0" name="groupContexts" nillable="true" type="ax25:GroupContext"/> ++ <xs:element maxOccurs="unbounded" minOccurs="0" name="applicationClusterContexts" nillable="true" type="ax223:ApplicationClusterContext"/> ++ <xs:element maxOccurs="unbounded" minOccurs="0" name="cartridgeContexts" nillable="true" type="ax223:CartridgeContext"/> ++ <xs:element minOccurs="0" name="dependencyContext" nillable="true" type="ax223:DependencyContext"/> ++ <xs:element maxOccurs="unbounded" minOccurs="0" name="groupContexts" nillable="true" type="ax223:GroupContext"/> + </xs:sequence> + </xs:complexType> + <xs:complexType name="ApplicationClusterContext"> +@@ -66,8 +67,8 @@ + <xs:element maxOccurs="unbounded" minOccurs="0" name="dependencyClusterIds" nillable="true" type="xs:string"/> + <xs:element minOccurs="0" name="deploymentPolicyName" nillable="true" type="xs:string"/> + <xs:element minOccurs="0" name="hostName" nillable="true" type="xs:string"/> +- <xs:element minOccurs="0" name="persistenceContext" nillable="true" type="ax25:PersistenceContext"/> +- <xs:element minOccurs="0" name="properties" nillable="true" type="ax26:Properties"/> ++ <xs:element minOccurs="0" name="persistenceContext" nillable="true" type="ax223:PersistenceContext"/> ++ <xs:element minOccurs="0" name="properties" nillable="true" type="ax224:Properties"/> + <xs:element minOccurs="0" name="tenantRange" nillable="true" type="xs:string"/> + <xs:element minOccurs="0" name="textPayload" nillable="true" type="xs:string"/> + </xs:sequence> +@@ -75,7 +76,7 @@ + <xs:complexType name="PersistenceContext"> + <xs:sequence> + <xs:element minOccurs="0" name="persistenceRequired" type="xs:boolean"/> +- <xs:element maxOccurs="unbounded" minOccurs="0" name="volumes" nillable="true" type="ax25:VolumeContext"/> ++ <xs:element maxOccurs="unbounded" minOccurs="0" name="volumes" nillable="true" type="ax223:VolumeContext"/> + </xs:sequence> + </xs:complexType> + <xs:complexType name="VolumeContext"> +@@ -94,21 +95,21 @@ + <xs:sequence> + <xs:element minOccurs="0" name="cartridgeMax" type="xs:int"/> + <xs:element minOccurs="0" name="cartridgeMin" type="xs:int"/> +- <xs:element minOccurs="0" name="subscribableInfoContext" nillable="true" type="ax25:SubscribableInfoContext"/> ++ <xs:element minOccurs="0" name="subscribableInfoContext" nillable="true" type="ax223:SubscribableInfoContext"/> + <xs:element minOccurs="0" name="type" nillable="true" type="xs:string"/> + </xs:sequence> + </xs:complexType> + <xs:complexType name="SubscribableInfoContext"> + <xs:sequence> + <xs:element minOccurs="0" name="alias" nillable="true" type="xs:string"/> +- <xs:element minOccurs="0" name="artifactRepositoryContext" nillable="true" type="ax25:ArtifactRepositoryContext"/> ++ <xs:element minOccurs="0" name="artifactRepositoryContext" nillable="true" type="ax223:ArtifactRepositoryContext"/> + <xs:element minOccurs="0" name="autoscalingPolicy" nillable="true" type="xs:string"/> + <xs:element maxOccurs="unbounded" minOccurs="0" name="dependencyAliases" nillable="true" type="xs:string"/> + <xs:element minOccurs="0" name="deploymentPolicy" nillable="true" type="xs:string"/> + <xs:element minOccurs="0" name="maxMembers" type="xs:int"/> + <xs:element minOccurs="0" name="minMembers" type="xs:int"/> +- <xs:element minOccurs="0" name="persistenceContext" nillable="true" type="ax25:PersistenceContext"/> +- <xs:element minOccurs="0" name="properties" nillable="true" type="ax26:Properties"/> ++ <xs:element minOccurs="0" name="persistenceContext" nillable="true" type="ax223:PersistenceContext"/> ++ <xs:element minOccurs="0" name="properties" nillable="true" type="ax224:Properties"/> + </xs:sequence> + </xs:complexType> + <xs:complexType name="ArtifactRepositoryContext"> +@@ -130,9 +131,9 @@ + <xs:complexType name="GroupContext"> + <xs:sequence> + <xs:element minOccurs="0" name="alias" nillable="true" type="xs:string"/> +- <xs:element maxOccurs="unbounded" minOccurs="0" name="cartridgeContexts" nillable="true" type="ax25:CartridgeContext"/> ++ <xs:element maxOccurs="unbounded" minOccurs="0" name="cartridgeContexts" nillable="true" type="ax223:CartridgeContext"/> + <xs:element minOccurs="0" name="deploymentPolicy" nillable="true" type="xs:string"/> +- <xs:element maxOccurs="unbounded" minOccurs="0" name="groupContexts" nillable="true" type="ax25:GroupContext"/> ++ <xs:element maxOccurs="unbounded" minOccurs="0" name="groupContexts" nillable="true" type="ax223:GroupContext"/> + <xs:element minOccurs="0" name="groupMaxInstances" type="xs:int"/> + <xs:element minOccurs="0" name="groupMinInstances" type="xs:int"/> + <xs:element minOccurs="0" name="groupScalingEnabled" type="xs:boolean"/> +@@ -144,8 +145,8 @@ + <xs:complexType name="ServiceGroup"> + <xs:sequence> + <xs:element maxOccurs="unbounded" minOccurs="0" name="cartridges" nillable="true" type="xs:string"/> +- <xs:element minOccurs="0" name="dependencies" nillable="true" type="ax210:Dependencies"/> +- <xs:element maxOccurs="unbounded" minOccurs="0" name="groups" nillable="true" type="ax210:ServiceGroup"/> ++ <xs:element minOccurs="0" name="dependencies" nillable="true" type="ax226:Dependencies"/> ++ <xs:element maxOccurs="unbounded" minOccurs="0" name="groups" nillable="true" type="ax226:ServiceGroup"/> + <xs:element minOccurs="0" name="groupscalingEnabled" type="xs:boolean"/> + <xs:element minOccurs="0" name="name" nillable="true" type="xs:string"/> + </xs:sequence> +@@ -158,300 +159,313 @@ + </xs:sequence> + </xs:complexType> + </xs:schema> +- <xs:schema xmlns:ax29="http://application.exception.autoscaler.stratos.apache.org/xsd" xmlns:ax27="http://pojo.applications.autoscaler.stratos.apache.org/xsd" xmlns:ax24="http://deployment.policy.pojo.autoscaler.stratos.apache.org/xsd" xmlns:ax218="http://policy.exception.autoscaler.stratos.apache.org/xsd" xmlns:ax220="http://exception.autoscaler.stratos.apache.org/xsd" xmlns:ax221="http://common.stratos.apache.org/xsd" xmlns:ax213="http://autoscale.policy.pojo.autoscaler.stratos.apache.org/xsd" xmlns:ax211="http://pojo.autoscaler.stratos.apache.org/xsd" xmlns:ax225="http://rmi.java/xsd" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://impl.services.autoscaler.stratos.apache.org"> +- <xs:import namespace="http://deployment.policy.pojo.autoscaler.stratos.apache.org/xsd"/> +- <xs:import namespace="http://pojo.applications.autoscaler.stratos.apache.org/xsd"/> +- <xs:import namespace="http://application.exception.autoscaler.stratos.apache.org/xsd"/> +- <xs:import namespace="http://pojo.autoscaler.stratos.apache.org/xsd"/> +- <xs:import namespace="http://autoscale.policy.pojo.autoscaler.stratos.apache.org/xsd"/> ++ <xs:schema xmlns:ax214="http://deployment.policy.pojo.autoscaler.stratos.apache.org/xsd" xmlns:ax221="http://application.exception.autoscaler.stratos.apache.org/xsd" xmlns:ax28="http://policy.exception.autoscaler.stratos.apache.org/xsd" xmlns:ax26="http://rmi.java/xsd" xmlns:ax225="http://pojo.applications.autoscaler.stratos.apache.org/xsd" xmlns:ax217="http://common.stratos.apache.org/xsd" xmlns:ax216="http://exception.autoscaler.stratos.apache.org/xsd" xmlns:ax219="http://autoscale.policy.pojo.autoscaler.stratos.apache.org/xsd" xmlns:ax227="http://pojo.autoscaler.stratos.apache.org/xsd" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://impl.services.autoscaler.stratos.apache.org"> ++ <xs:import namespace="http://rmi.java/xsd"/> + <xs:import namespace="http://policy.exception.autoscaler.stratos.apache.org/xsd"/> ++ <xs:import namespace="http://deployment.policy.pojo.autoscaler.stratos.apache.org/xsd"/> + <xs:import namespace="http://exception.autoscaler.stratos.apache.org/xsd"/> + <xs:import namespace="http://common.stratos.apache.org/xsd"/> +- <xs:import namespace="http://rmi.java/xsd"/> +- <xs:element name="getApplicationPolicy"> ++ <xs:import namespace="http://autoscale.policy.pojo.autoscaler.stratos.apache.org/xsd"/> ++ <xs:import namespace="http://application.exception.autoscaler.stratos.apache.org/xsd"/> ++ <xs:import namespace="http://pojo.applications.autoscaler.stratos.apache.org/xsd"/> ++ <xs:import namespace="http://pojo.autoscaler.stratos.apache.org/xsd"/> ++ <xs:element name="AutoscalerServiceRemoteException"> + <xs:complexType> + <xs:sequence> +- <xs:element minOccurs="0" name="applicationPolicyId" nillable="true" type="xs:string"/> ++ <xs:element minOccurs="0" name="RemoteException" nillable="true" type="ax26:RemoteException"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="getApplicationPolicyResponse"> ++ <xs:element name="AutoscalerServiceInvalidDeploymentPolicyException"> + <xs:complexType> + <xs:sequence> +- <xs:element minOccurs="0" name="return" nillable="true" type="ax24:ApplicationPolicy"/> ++ <xs:element minOccurs="0" name="InvalidDeploymentPolicyException" nillable="true" type="ax27:InvalidDeploymentPolicyException"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="getApplications"> ++ <xs:element name="AutoscalerServiceDeploymentPolicyNotExistsException"> + <xs:complexType> +- <xs:sequence/> ++ <xs:sequence> ++ <xs:element minOccurs="0" name="DeploymentPolicyNotExistsException" nillable="true" type="ax27:DeploymentPolicyNotExistsException"/> ++ </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="getApplicationsResponse"> ++ <xs:element name="AutoscalerServiceInvalidPolicyException"> + <xs:complexType> + <xs:sequence> +- <xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="ax27:ApplicationContext"/> ++ <xs:element minOccurs="0" name="InvalidPolicyException" nillable="true" type="ax27:InvalidPolicyException"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="AutoscalerServiceApplicationDefinitionException"> ++ <xs:element name="updateDeployementPolicy"> + <xs:complexType> + <xs:sequence> +- <xs:element minOccurs="0" name="ApplicationDefinitionException" nillable="true" type="ax29:ApplicationDefinitionException"/> ++ <xs:element minOccurs="0" name="deploymentPolicy" nillable="true" type="ax29:DeploymentPolicy"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="addApplication"> ++ <xs:element name="AutoscalerServiceInvalidArgumentException"> + <xs:complexType> + <xs:sequence> +- <xs:element minOccurs="0" name="applicationContext" nillable="true" type="ax27:ApplicationContext"/> ++ <xs:element minOccurs="0" name="InvalidArgumentException" nillable="true" type="ax216:InvalidArgumentException"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="getServiceGroup"> ++ <xs:element name="updateClusterMonitor"> + <xs:complexType> + <xs:sequence> +- <xs:element minOccurs="0" name="name" nillable="true" type="xs:string"/> ++ <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"/> ++ <xs:element minOccurs="0" name="properties" nillable="true" type="ax217:Properties"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="getServiceGroupResponse"> ++ <xs:element name="updateAutoScalingPolicy"> + <xs:complexType> + <xs:sequence> +- <xs:element minOccurs="0" name="return" nillable="true" type="ax210:ServiceGroup"/> ++ <xs:element minOccurs="0" name="autoscalePolicy" nillable="true" type="ax219:AutoscalePolicy"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="getAutoscalingPolicy"> ++ <xs:element name="updateAutoScalingPolicyResponse"> + <xs:complexType> + <xs:sequence> +- <xs:element minOccurs="0" name="autoscalingPolicyId" nillable="true" type="xs:string"/> ++ <xs:element minOccurs="0" name="return" type="xs:boolean"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="getAutoscalingPolicyResponse"> ++ <xs:element name="AutoscalerServiceInvalidApplicationPolicyException"> + <xs:complexType> + <xs:sequence> +- <xs:element minOccurs="0" name="return" nillable="true" type="ax212:AutoscalePolicy"/> ++ <xs:element minOccurs="0" name="InvalidApplicationPolicyException" nillable="true" type="ax220:InvalidApplicationPolicyException"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="getDeploymentPolicy"> ++ <xs:element name="AutoscalerServiceApplicatioinPolicyNotExistsException"> + <xs:complexType> + <xs:sequence> +- <xs:element minOccurs="0" name="deploymentPolicyID" nillable="true" type="xs:string"/> ++ <xs:element minOccurs="0" name="ApplicatioinPolicyNotExistsException" nillable="true" type="ax27:ApplicatioinPolicyNotExistsException"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="getDeploymentPolicyResponse"> ++ <xs:element name="updateApplicationPolicy"> + <xs:complexType> + <xs:sequence> +- <xs:element minOccurs="0" name="return" nillable="true" type="ax24:DeploymentPolicy"/> ++ <xs:element minOccurs="0" name="applicationPolicy" nillable="true" type="ax29:ApplicationPolicy"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="AutoscalerServiceInvalidPolicyException"> ++ <xs:element name="AutoscalerServiceApplicationDefinitionException"> + <xs:complexType> + <xs:sequence> +- <xs:element minOccurs="0" name="InvalidPolicyException" nillable="true" type="ax217:InvalidPolicyException"/> ++ <xs:element minOccurs="0" name="ApplicationDefinitionException" nillable="true" type="ax220:ApplicationDefinitionException"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="addAutoScalingPolicy"> ++ <xs:element name="updateApplication"> + <xs:complexType> + <xs:sequence> +- <xs:element minOccurs="0" name="autoscalePolicy" nillable="true" type="ax212:AutoscalePolicy"/> ++ <xs:element minOccurs="0" name="applicationContext" nillable="true" type="ax223:ApplicationContext"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="addAutoScalingPolicyResponse"> ++ <xs:element name="AutoscalerServiceAutoScalerException"> + <xs:complexType> + <xs:sequence> +- <xs:element minOccurs="0" name="return" type="xs:boolean"/> ++ <xs:element minOccurs="0" name="AutoScalerException" nillable="true" type="ax216:AutoScalerException"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="getAutoScalingPolicies"> ++ <xs:element name="undeployServiceGroup"> + <xs:complexType> +- <xs:sequence/> ++ <xs:sequence> ++ <xs:element minOccurs="0" name="name" nillable="true" type="xs:string"/> ++ </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="getAutoScalingPoliciesResponse"> ++ <xs:element name="undeployApplication"> + <xs:complexType> + <xs:sequence> +- <xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="ax212:AutoscalePolicy"/> ++ <xs:element minOccurs="0" name="applicationId" nillable="true" type="xs:string"/> ++ <xs:element minOccurs="0" name="force" type="xs:boolean"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="updateAutoScalingPolicy"> ++ <xs:element name="serviceGroupExist"> + <xs:complexType> + <xs:sequence> +- <xs:element minOccurs="0" name="autoscalePolicy" nillable="true" type="ax212:AutoscalePolicy"/> ++ <xs:element minOccurs="0" name="serviceName" nillable="true" type="xs:string"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="updateAutoScalingPolicyResponse"> ++ <xs:element name="serviceGroupExistResponse"> + <xs:complexType> + <xs:sequence> + <xs:element minOccurs="0" name="return" type="xs:boolean"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="removeAutoScalingPolicy"> ++ <xs:element name="removeServiceGroup"> + <xs:complexType> + <xs:sequence> +- <xs:element minOccurs="0" name="autoscalePolicyId" nillable="true" type="xs:string"/> ++ <xs:element minOccurs="0" name="groupName" nillable="true" type="xs:string"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="removeAutoScalingPolicyResponse"> ++ <xs:element name="removeDeployementPolicy"> + <xs:complexType> + <xs:sequence> +- <xs:element minOccurs="0" name="return" type="xs:boolean"/> ++ <xs:element minOccurs="0" name="deploymentPolicyID" nillable="true" type="xs:string"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="deployApplication"> ++ <xs:element name="removeAutoScalingPolicy"> + <xs:complexType> + <xs:sequence> +- <xs:element minOccurs="0" name="applicationId" nillable="true" type="xs:string"/> +- <xs:element minOccurs="0" name="applicationPolicyId" nillable="true" type="xs:string"/> ++ <xs:element minOccurs="0" name="autoscalePolicyId" nillable="true" type="xs:string"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="deployApplicationResponse"> ++ <xs:element name="removeAutoScalingPolicyResponse"> + <xs:complexType> + <xs:sequence> + <xs:element minOccurs="0" name="return" type="xs:boolean"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="undeployApplication"> ++ <xs:element name="removeApplicationPolicy"> + <xs:complexType> + <xs:sequence> +- <xs:element minOccurs="0" name="applicationId" nillable="true" type="xs:string"/> +- <xs:element minOccurs="0" name="force" type="xs:boolean"/> ++ <xs:element minOccurs="0" name="applicationPolicyId" nillable="true" type="xs:string"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="AutoscalerServiceInvalidArgumentException"> ++ <xs:element name="getServiceGroups"> + <xs:complexType> +- <xs:sequence> +- <xs:element minOccurs="0" name="InvalidArgumentException" nillable="true" type="ax219:InvalidArgumentException"/> +- </xs:sequence> ++ <xs:sequence/> + </xs:complexType> + </xs:element> +- <xs:element name="updateClusterMonitor"> ++ <xs:element name="getServiceGroupsResponse"> + <xs:complexType> + <xs:sequence> +- <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"/> +- <xs:element minOccurs="0" name="properties" nillable="true" type="ax22:Properties"/> ++ <xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="ax227:ServiceGroup"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="AutoscalerServiceInvalidServiceGroupException"> ++ <xs:element name="getServiceGroup"> + <xs:complexType> + <xs:sequence> +- <xs:element minOccurs="0" name="InvalidServiceGroupException" nillable="true" type="ax29:InvalidServiceGroupException"/> ++ <xs:element minOccurs="0" name="name" nillable="true" type="xs:string"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="addServiceGroup"> ++ <xs:element name="getServiceGroupResponse"> + <xs:complexType> + <xs:sequence> +- <xs:element minOccurs="0" name="servicegroup" nillable="true" type="ax210:ServiceGroup"/> ++ <xs:element minOccurs="0" name="return" nillable="true" type="ax227:ServiceGroup"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="findClusterId"> ++ <xs:element name="getDeploymentPolicy"> + <xs:complexType> + <xs:sequence> +- <xs:element minOccurs="0" name="applicationId" nillable="true" type="xs:string"/> +- <xs:element minOccurs="0" name="alias" nillable="true" type="xs:string"/> ++ <xs:element minOccurs="0" name="deploymentPolicyID" nillable="true" type="xs:string"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="findClusterIdResponse"> ++ <xs:element name="getDeploymentPolicyResponse"> + <xs:complexType> + <xs:sequence> +- <xs:element minOccurs="0" name="return" nillable="true" type="xs:string"/> ++ <xs:element minOccurs="0" name="return" nillable="true" type="ax29:DeploymentPolicy"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="AutoscalerServiceAutoScalerException"> ++ <xs:element name="getDeploymentPolicies"> + <xs:complexType> +- <xs:sequence> +- <xs:element minOccurs="0" name="AutoScalerException" nillable="true" type="ax219:AutoScalerException"/> +- </xs:sequence> ++ <xs:sequence/> + </xs:complexType> + </xs:element> +- <xs:element name="getApplicationNetworkPartitions"> ++ <xs:element name="getDeploymentPoliciesResponse"> + <xs:complexType> + <xs:sequence> +- <xs:element minOccurs="0" name="applicationId" nillable="true" type="xs:string"/> ++ <xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="ax29:DeploymentPolicy"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="getApplicationNetworkPartitionsResponse"> ++ <xs:element name="getAutoscalingPolicy"> + <xs:complexType> + <xs:sequence> +- <xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="xs:string"/> ++ <xs:element minOccurs="0" name="autoscalingPolicyId" nillable="true" type="xs:string"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="AutoscalerServiceRemoteException"> ++ <xs:element name="getAutoscalingPolicyResponse"> + <xs:complexType> + <xs:sequence> +- <xs:element minOccurs="0" name="RemoteException" nillable="true" type="ax222:RemoteException"/> ++ <xs:element minOccurs="0" name="return" nillable="true" type="ax219:AutoscalePolicy"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="AutoscalerServiceInvalidDeploymentPolicyException"> ++ <xs:element name="getAutoScalingPolicies"> ++ <xs:complexType> ++ <xs:sequence/> ++ </xs:complexType> ++ </xs:element> ++ <xs:element name="getAutoScalingPoliciesResponse"> + <xs:complexType> + <xs:sequence> +- <xs:element minOccurs="0" name="InvalidDeploymentPolicyException" nillable="true" type="ax217:InvalidDeploymentPolicyException"/> ++ <xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="ax219:AutoscalePolicy"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="AutoscalerServiceDeploymentPolicyNotExistsException"> ++ <xs:element name="getApplications"> ++ <xs:complexType> ++ <xs:sequence/> ++ </xs:complexType> ++ </xs:element> ++ <xs:element name="getApplicationsResponse"> + <xs:complexType> + <xs:sequence> +- <xs:element minOccurs="0" name="DeploymentPolicyNotExistsException" nillable="true" type="ax217:DeploymentPolicyNotExistsException"/> ++ <xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="ax223:ApplicationContext"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="AutoscalerServiceDeploymentPolicyAlreadyExistsException"> ++ <xs:element name="getApplicationPolicy"> + <xs:complexType> + <xs:sequence> +- <xs:element minOccurs="0" name="DeploymentPolicyAlreadyExistsException" nillable="true" type="ax217:DeploymentPolicyAlreadyExistsException"/> ++ <xs:element minOccurs="0" name="applicationPolicyId" nillable="true" type="xs:string"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="addDeployementPolicy"> ++ <xs:element name="getApplicationPolicyResponse"> + <xs:complexType> + <xs:sequence> +- <xs:element minOccurs="0" name="deploymentPolicy" nillable="true" type="ax24:DeploymentPolicy"/> ++ <xs:element minOccurs="0" name="return" nillable="true" type="ax29:ApplicationPolicy"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="updateDeployementPolicy"> ++ <xs:element name="getApplicationPolicies"> ++ <xs:complexType> ++ <xs:sequence/> ++ </xs:complexType> ++ </xs:element> ++ <xs:element name="getApplicationPoliciesResponse"> + <xs:complexType> + <xs:sequence> +- <xs:element minOccurs="0" name="deploymentPolicy" nillable="true" type="ax24:DeploymentPolicy"/> ++ <xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="ax29:ApplicationPolicy"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="removeDeployementPolicy"> ++ <xs:element name="getApplicationNetworkPartitions"> + <xs:complexType> + <xs:sequence> +- <xs:element minOccurs="0" name="deploymentPolicyID" nillable="true" type="xs:string"/> ++ <xs:element minOccurs="0" name="applicationId" nillable="true" type="xs:string"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="undeployServiceGroup"> ++ <xs:element name="getApplicationNetworkPartitionsResponse"> + <xs:complexType> + <xs:sequence> +- <xs:element minOccurs="0" name="name" nillable="true" type="xs:string"/> ++ <xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="xs:string"/> + </xs:sequence> + </xs:complexType> + </xs:element> +@@ -465,137 +479,131 @@ + <xs:element name="getApplicationResponse"> + <xs:complexType> + <xs:sequence> +- <xs:element minOccurs="0" name="return" nillable="true" type="ax27:ApplicationContext"/> ++ <xs:element minOccurs="0" name="return" nillable="true" type="ax223:ApplicationContext"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="deleteApplication"> ++ <xs:element name="findClusterId"> + <xs:complexType> + <xs:sequence> + <xs:element minOccurs="0" name="applicationId" nillable="true" type="xs:string"/> ++ <xs:element minOccurs="0" name="alias" nillable="true" type="xs:string"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="getDeploymentPolicies"> +- <xs:complexType> +- <xs:sequence/> +- </xs:complexType> +- </xs:element> +- <xs:element name="getDeploymentPoliciesResponse"> ++ <xs:element name="findClusterIdResponse"> + <xs:complexType> + <xs:sequence> +- <xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="ax24:DeploymentPolicy"/> ++ <xs:element minOccurs="0" name="return" nillable="true" type="xs:string"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="AutoscalerServiceInvalidApplicationPolicyException"> ++ <xs:element name="deployApplication"> + <xs:complexType> + <xs:sequence> +- <xs:element minOccurs="0" name="InvalidApplicationPolicyException" nillable="true" type="ax29:InvalidApplicationPolicyException"/> ++ <xs:element minOccurs="0" name="applicationId" nillable="true" type="xs:string"/> ++ <xs:element minOccurs="0" name="applicationPolicyId" nillable="true" type="xs:string"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="addApplicationPolicy"> ++ <xs:element name="deployApplicationResponse"> + <xs:complexType> + <xs:sequence> +- <xs:element minOccurs="0" name="applicationPolicy" nillable="true" type="ax24:ApplicationPolicy"/> ++ <xs:element minOccurs="0" name="return" type="xs:boolean"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="removeApplicationPolicy"> ++ <xs:element name="deleteApplication"> + <xs:complexType> + <xs:sequence> +- <xs:element minOccurs="0" name="applicationPolicyId" nillable="true" type="xs:string"/> ++ <xs:element minOccurs="0" name="applicationId" nillable="true" type="xs:string"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="AutoscalerServiceApplicatioinPolicyNotExistsException"> ++ <xs:element name="AutoscalerServiceInvalidServiceGroupException"> + <xs:complexType> + <xs:sequence> +- <xs:element minOccurs="0" name="ApplicatioinPolicyNotExistsException" nillable="true" type="ax217:ApplicatioinPolicyNotExistsException"/> ++ <xs:element minOccurs="0" name="InvalidServiceGroupException" nillable="true" type="ax220:InvalidServiceGroupException"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="updateApplicationPolicy"> ++ <xs:element name="addServiceGroup"> + <xs:complexType> + <xs:sequence> +- <xs:element minOccurs="0" name="applicationPolicy" nillable="true" type="ax24:ApplicationPolicy"/> ++ <xs:element minOccurs="0" name="servicegroup" nillable="true" type="ax227:ServiceGroup"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="getApplicationPolicies"> ++ <xs:element name="AutoscalerServiceDeploymentPolicyAlreadyExistsException"> + <xs:complexType> +- <xs:sequence/> ++ <xs:sequence> ++ <xs:element minOccurs="0" name="DeploymentPolicyAlreadyExistsException" nillable="true" type="ax27:DeploymentPolicyAlreadyExistsException"/> ++ </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="getApplicationPoliciesResponse"> ++ <xs:element name="addDeployementPolicy"> + <xs:complexType> + <xs:sequence> +- <xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="ax24:ApplicationPolicy"/> ++ <xs:element minOccurs="0" name="deploymentPolicy" nillable="true" type="ax29:DeploymentPolicy"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="serviceGroupExist"> ++ <xs:element name="addAutoScalingPolicy"> + <xs:complexType> + <xs:sequence> +- <xs:element minOccurs="0" name="serviceName" nillable="true" type="xs:string"/> ++ <xs:element minOccurs="0" name="autoscalePolicy" nillable="true" type="ax219:AutoscalePolicy"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="serviceGroupExistResponse"> ++ <xs:element name="addAutoScalingPolicyResponse"> + <xs:complexType> + <xs:sequence> + <xs:element minOccurs="0" name="return" type="xs:boolean"/> + </xs:sequence> + </xs:complexType> + </xs:element> +- <xs:element name="getServiceGroups"> +- <xs:complexType> +- <xs:sequence/> +- </xs:complexType> +- </xs:element> +- <xs:element name="getServiceGroupsResponse"> ++ <xs:element name="addApplicationPolicy"> + <xs:complexType> + <xs:sequence> +-
<TRUNCATED>
