forcefull undeployment
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/2a7f2758 Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/2a7f2758 Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/2a7f2758 Branch: refs/heads/master Commit: 2a7f2758e1c588fc8895f567fa0244411c4c805f Parents: b2f6bf3 Author: Udara Liyanage <[email protected]> Authored: Sat Apr 4 00:50:07 2015 +0530 Committer: Udara Liyanage <[email protected]> Committed: Sat Apr 4 21:32:37 2015 +0530 ---------------------------------------------------------------------- .../applications/topic/ApplicationBuilder.java | 2 +- .../partition/ClusterLevelPartitionContext.java | 48 ++ .../publisher/ClusterStatusEventPublisher.java | 4 +- .../monitor/cluster/ClusterMonitor.java | 60 +- .../monitor/component/ApplicationMonitor.java | 11 + .../component/ParentComponentMonitor.java | 2 +- .../autoscaler/services/AutoscalerService.java | 7 +- .../services/impl/AutoscalerServiceImpl.java | 101 ++- .../messaging/topology/TopologyBuilder.java | 2 +- .../services/CloudControllerService.java | 2 + .../impl/CloudControllerServiceImpl.java | 24 + .../common/client/AutoscalerServiceClient.java | 4 +- .../client/CloudControllerServiceClient.java | 9 +- .../rest/endpoint/api/StratosApiV41.java | 8 +- .../rest/endpoint/api/StratosApiV41Utils.java | 48 +- .../src/main/resources/AutoscalerService.wsdl | 247 +++--- .../main/resources/CloudControllerService.wsdl | 851 ++++++++++--------- 17 files changed, 812 insertions(+), 618 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/2a7f2758/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java ---------------------------------------------------------------------- diff --git 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 index 05c6196..275f506 100644 --- 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 @@ -349,7 +349,7 @@ public class ApplicationBuilder { Cluster cluster = service.getCluster(aClusterData.getClusterId()); if (cluster != null) { for (ClusterInstance instance : cluster.getInstanceIdToInstanceContextMap().values()) { - ClusterStatusEventPublisher.sendClusterTerminatingEvent(applicationId, + ClusterStatusEventPublisher.sendClusterStatusClusterTerminatingEvent(applicationId, aClusterData.getServiceType(), aClusterData.getClusterId(), instance.getInstanceId()); http://git-wip-us.apache.org/repos/asf/stratos/blob/2a7f2758/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java index bbd2623..d8bbf52 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java @@ -25,6 +25,7 @@ import org.apache.stratos.autoscaler.context.member.MemberStatsContext; import org.apache.stratos.autoscaler.util.ConfUtil; import org.apache.stratos.cloud.controller.stub.domain.MemberContext; import org.apache.stratos.cloud.controller.stub.domain.Partition; +import org.apache.stratos.common.client.CloudControllerServiceClient; import org.apache.stratos.common.constants.StratosConstants; import java.io.Serializable; @@ -68,6 +69,7 @@ public class ClusterLevelPartitionContext extends PartitionContext implements Se // termination pending members, member is added to this when Autoscaler send grace fully shut down event private List<MemberContext> terminationPendingMembers; + //member id: time that member is moved to termination pending status private Map<String, Long> terminationPendingStartedTime; @@ -82,6 +84,51 @@ public class ClusterLevelPartitionContext extends PartitionContext implements Se this.pendingMembers = new ArrayList<MemberContext>(); } + public void terminateAllRemainingInstances(){ + + // Forcefully deleting remaining active members + for (Iterator<MemberContext> iterator = activeMembers.iterator(); iterator.hasNext();) { + MemberContext member = iterator.next(); + iterator.remove(); + terminateForcefully(member.getMemberId()); + } + + // Forcefully deleting remaining pending members + for (Iterator<MemberContext> iterator = pendingMembers.iterator(); iterator.hasNext();) { + MemberContext member = iterator.next(); + iterator.remove(); + terminateForcefully(member.getMemberId()); + } + + /// Forcefully deleting remaining termination pending members + for (Iterator<MemberContext> iterator = terminationPendingMembers.iterator(); iterator.hasNext();) { + MemberContext member = iterator.next(); + // Remove the current element from the iterator and the list. + iterator.remove(); + terminateForcefully(member.getMemberId()); + } + + + // Forcefully deleting remaining obsolete members + for (Map.Entry<String, MemberContext> entry : obsoletedMembers.entrySet()) + { + MemberContext ObsoleteMemberContext = entry.getValue(); + obsoletedMembers.remove(entry.getKey()); + terminateForcefully(ObsoleteMemberContext.getMemberId()); + } + } + + private void terminateForcefully(String memberId) { + try { + if(log.isDebugEnabled()){ + log.debug(String.format("Forcefully terminating member [member-id] %s" , memberId)); + } + CloudControllerServiceClient.getInstance().terminateInstanceForcefully(memberId); + } catch (Exception e) { + e.printStackTrace(); + } + } + public ClusterLevelPartitionContext(int max, Partition partition, String networkPartitionId) { super(max, partition, networkPartitionId); @@ -580,6 +627,7 @@ public class ClusterLevelPartitionContext extends PartitionContext implements Se } + // @Override // public int getCurrentElementCount() { // //TODO find and return correct member instance count http://git-wip-us.apache.org/repos/asf/stratos/blob/2a7f2758/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/publisher/ClusterStatusEventPublisher.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/publisher/ClusterStatusEventPublisher.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/publisher/ClusterStatusEventPublisher.java index c2901f2..270a2ab 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/publisher/ClusterStatusEventPublisher.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/publisher/ClusterStatusEventPublisher.java @@ -174,8 +174,8 @@ public class ClusterStatusEventPublisher { } } - public static void sendClusterTerminatingEvent(String appId, String serviceName, - String clusterId, String instanceId) { + public static void sendClusterStatusClusterTerminatingEvent(String appId, String serviceName, + String clusterId, String instanceId) { try { TopologyManager.acquireReadLockForCluster(serviceName, clusterId); http://git-wip-us.apache.org/repos/asf/stratos/blob/2a7f2758/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java ---------------------------------------------------------------------- diff --git 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 index d473f59..c29521d 100644 --- 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 @@ -18,23 +18,11 @@ */ package org.apache.stratos.autoscaler.monitor.cluster; -import java.rmi.RemoteException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.RejectedExecutionException; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicBoolean; - import org.apache.commons.configuration.XMLConfiguration; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.stratos.autoscaler.context.AutoscalerContext; import org.apache.stratos.autoscaler.context.InstanceContext; import org.apache.stratos.autoscaler.context.cluster.AbstractClusterContext; import org.apache.stratos.autoscaler.context.cluster.ClusterContext; @@ -76,33 +64,20 @@ import org.apache.stratos.messaging.domain.topology.Cluster; import org.apache.stratos.messaging.domain.topology.ClusterStatus; import org.apache.stratos.messaging.domain.topology.Member; import org.apache.stratos.messaging.domain.topology.Service; -import org.apache.stratos.messaging.event.health.stat.AverageLoadAverageEvent; -import org.apache.stratos.messaging.event.health.stat.AverageMemoryConsumptionEvent; -import org.apache.stratos.messaging.event.health.stat.AverageRequestsInFlightEvent; -import org.apache.stratos.messaging.event.health.stat.AverageRequestsServingCapabilityEvent; -import org.apache.stratos.messaging.event.health.stat.GradientOfLoadAverageEvent; -import org.apache.stratos.messaging.event.health.stat.GradientOfMemoryConsumptionEvent; -import org.apache.stratos.messaging.event.health.stat.GradientOfRequestsInFlightEvent; -import org.apache.stratos.messaging.event.health.stat.MemberAverageLoadAverageEvent; -import org.apache.stratos.messaging.event.health.stat.MemberAverageMemoryConsumptionEvent; -import org.apache.stratos.messaging.event.health.stat.MemberFaultEvent; -import org.apache.stratos.messaging.event.health.stat.MemberGradientOfLoadAverageEvent; -import org.apache.stratos.messaging.event.health.stat.MemberGradientOfMemoryConsumptionEvent; -import org.apache.stratos.messaging.event.health.stat.MemberSecondDerivativeOfLoadAverageEvent; -import org.apache.stratos.messaging.event.health.stat.MemberSecondDerivativeOfMemoryConsumptionEvent; -import org.apache.stratos.messaging.event.health.stat.SecondDerivativeOfLoadAverageEvent; -import org.apache.stratos.messaging.event.health.stat.SecondDerivativeOfMemoryConsumptionEvent; -import org.apache.stratos.messaging.event.health.stat.SecondDerivativeOfRequestsInFlightEvent; -import org.apache.stratos.messaging.event.topology.ClusterRemovedEvent; -import org.apache.stratos.messaging.event.topology.MemberActivatedEvent; -import org.apache.stratos.messaging.event.topology.MemberMaintenanceModeEvent; -import org.apache.stratos.messaging.event.topology.MemberReadyToShutdownEvent; -import org.apache.stratos.messaging.event.topology.MemberStartedEvent; -import org.apache.stratos.messaging.event.topology.MemberTerminatedEvent; +import org.apache.stratos.messaging.event.health.stat.*; +import org.apache.stratos.messaging.event.topology.*; import org.apache.stratos.messaging.message.receiver.topology.TopologyManager; import org.drools.runtime.StatefulKnowledgeSession; import org.drools.runtime.rule.FactHandle; +import java.rmi.RemoteException; +import java.util.*; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.RejectedExecutionException; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; + /** * Is responsible for monitoring a service cluster. This runs periodically * and perform minimum instance check and scaling check using the underlying @@ -666,7 +641,7 @@ public class ClusterMonitor extends Monitor implements Runnable { log.info("Publishing Cluster terminating event for [application] " + appId + " [cluster] " + this.getClusterId() + " [instance] " + instanceId); } - ClusterStatusEventPublisher.sendClusterTerminatingEvent(getAppId(), getServiceId(), getClusterId(), instanceId); + ClusterStatusEventPublisher.sendClusterStatusClusterTerminatingEvent(getAppId(), getServiceId(), getClusterId(), instanceId); } } @@ -1328,10 +1303,17 @@ public class ClusterMonitor extends Monitor implements Runnable { // need to terminate active, pending and obsolete members //FIXME to traverse concurrent // active members + + if(AutoscalerContext.getInstance().getAppMonitor(getAppId()).isForce()){ + log.info(String.format("Terminating all remaining members of partition [partition-id] %s [application-id] %s" , partitionContext.getPartitionId(), getAppId())); + partitionContext.terminateAllRemainingInstances(); + } + List<String> activeMemberIdList = new ArrayList<String>(); Iterator<MemberContext> iterator = partitionContext.getActiveMembers().listIterator(); while (iterator.hasNext()) { MemberContext activeMemberCtxt = iterator.next(); + activeMemberIdList.add(activeMemberCtxt.getMemberId()); } @@ -1355,11 +1337,15 @@ public class ClusterMonitor extends Monitor implements Runnable { } partitionContext.movePendingMemberToObsoleteMembers(memberId); } + + /* if (partitionContext.getTotalMemberCount() == 0) { allMovedToObsolete = allMovedToObsolete && true; } else { allMovedToObsolete = false; } + */ + allMovedToObsolete = partitionContext.getTotalMemberCount() == 0; } if (allMovedToObsolete) { http://git-wip-us.apache.org/repos/asf/stratos/blob/2a7f2758/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java ---------------------------------------------------------------------- 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 078d99b..98abf8c 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 @@ -70,6 +70,9 @@ public class ApplicationMonitor extends ParentComponentMonitor { //Flag to set whether application is terminating private boolean isTerminating; + // Flag to set if forcefull undeployment is invoked for the application. + private boolean force; + public ApplicationMonitor(Application application) throws DependencyBuilderException, TopologyInConsistentException { super(application); @@ -534,4 +537,12 @@ public class ApplicationMonitor extends ParentComponentMonitor { return null; } + + public boolean isForce() { + return force; + } + + public void setForce(boolean force) { + this.force = force; + } } http://git-wip-us.apache.org/repos/asf/stratos/blob/2a7f2758/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java ---------------------------------------------------------------------- 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 0bba2da..5f6fef8 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 @@ -388,7 +388,7 @@ public abstract class ParentComponentMonitor extends Monitor implements Runnable log.info("Publishing Cluster Terminating event for [application]: " + appId + " [group] " + this.id + " [cluster]: " + terminationContext.getId()); } - ClusterStatusEventPublisher.sendClusterTerminatingEvent(this.appId, + ClusterStatusEventPublisher.sendClusterStatusClusterTerminatingEvent(this.appId, ((ClusterMonitor) monitor).getServiceId(), terminationContext.getId(), instanceId); } http://git-wip-us.apache.org/repos/asf/stratos/blob/2a7f2758/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/AutoscalerService.java ---------------------------------------------------------------------- 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 71633d2..ae268bd 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 @@ -21,8 +21,6 @@ package org.apache.stratos.autoscaler.services; -import java.rmi.RemoteException; - import org.apache.stratos.autoscaler.applications.pojo.ApplicationContext; import org.apache.stratos.autoscaler.exception.AutoScalerException; import org.apache.stratos.autoscaler.exception.InvalidArgumentException; @@ -36,6 +34,8 @@ import org.apache.stratos.autoscaler.pojo.policy.autoscale.AutoscalePolicy; import org.apache.stratos.autoscaler.pojo.policy.deployment.ApplicationPolicy; import org.apache.stratos.common.Properties; +import java.rmi.RemoteException; + public interface AutoscalerService { /** * Add autoscaling policy @@ -106,7 +106,8 @@ public interface AutoscalerService { * @param applicationId * @return */ - public void undeployApplication(String applicationId); + + public void undeployApplication(String applicationId, boolean force); /** * Delete an application http://git-wip-us.apache.org/repos/asf/stratos/blob/2a7f2758/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java ---------------------------------------------------------------------- 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 5dee5ca..b48148b 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 @@ -36,6 +36,7 @@ import org.apache.stratos.autoscaler.exception.application.InvalidServiceGroupEx import org.apache.stratos.autoscaler.exception.policy.ApplicatioinPolicyNotExistsException; import org.apache.stratos.autoscaler.exception.policy.InvalidPolicyException; import org.apache.stratos.autoscaler.monitor.cluster.ClusterMonitor; +import org.apache.stratos.autoscaler.monitor.component.ApplicationMonitor; import org.apache.stratos.autoscaler.pojo.Dependencies; import org.apache.stratos.autoscaler.pojo.ServiceGroup; import org.apache.stratos.autoscaler.pojo.policy.PolicyManager; @@ -45,20 +46,22 @@ import org.apache.stratos.autoscaler.registry.RegistryManager; import org.apache.stratos.autoscaler.services.AutoscalerService; import org.apache.stratos.autoscaler.util.AutoscalerUtil; import org.apache.stratos.common.Properties; +import org.apache.stratos.common.client.CloudControllerServiceClient; import org.apache.stratos.common.client.StratosManagerServiceClient; import org.apache.stratos.common.util.CommonUtil; import org.apache.stratos.manager.service.stub.domain.application.signup.ApplicationSignUp; import org.apache.stratos.manager.service.stub.domain.application.signup.ArtifactRepository; import org.apache.stratos.messaging.domain.application.Application; import org.apache.stratos.messaging.domain.application.ClusterDataHolder; +import org.apache.stratos.messaging.domain.topology.Cluster; +import org.apache.stratos.messaging.domain.topology.Member; import org.apache.stratos.messaging.message.receiver.application.ApplicationManager; +import org.apache.stratos.messaging.message.receiver.topology.TopologyManager; import org.wso2.carbon.registry.api.RegistryException; import java.rmi.RemoteException; import java.text.MessageFormat; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; +import java.util.*; /** * Auto Scaler Service API is responsible getting Partitions and Policies. @@ -377,8 +380,46 @@ public class AutoscalerServiceImpl implements AutoscalerService { } } - @Override - public void undeployApplication(String applicationId) { + public void undeployApplication(String applicationId, boolean force){ + + AutoscalerContext asCtx = AutoscalerContext.getInstance(); + ApplicationMonitor appMonitor = asCtx.getAppMonitor(applicationId); + + if(appMonitor == null){ + log.info(String.format("Could not find application monitor for the application %s, hence returning", applicationId)); + return; + } + if(! force){ + // Gracefull undeployment flow + if(appMonitor.isTerminating()){ + log.info("Application monitor is already in terminating, graceful undeployment is has already been attempted thus not invoking again"); + return; + }else{ + log.info(String.format("Gracefully undeploying the application " + applicationId)); + undeployApplicationGracefully(applicationId); + } + }else{ + // force undeployment flow + if (appMonitor.isTerminating()) { + + if(appMonitor.isForce()){ + log.warn("Force undeployment is already in progress, hence not invoking again"); + return; + }else{ + log.info(String.format("Previous gracefull undeployment is in progress for [application-id] %s , thus terminating instances directly", applicationId)); + appMonitor.setForce(true); + terminateAllApplicationMembersForcefully(applicationId); + } + }else{ + log.info(String.format("Forcefully undeploying the application " + applicationId)); + appMonitor.setForce(true); + undeployApplicationGracefully(applicationId); + } + } + + } + + private void undeployApplicationGracefully(String applicationId) { try { if (log.isInfoEnabled()) { log.info("Starting to undeploy application: [application-id] " + applicationId); @@ -426,6 +467,7 @@ public class AutoscalerServiceImpl implements AutoscalerService { throw new RuntimeException(msg); } + if (ApplicationContext.STATUS_DEPLOYED.equals(applicationContext.getStatus())) { String msg = String.format("Application is in deployed state, please undeploy it before deleting: " + "[application-id] %s", applicationId); @@ -659,4 +701,53 @@ public class AutoscalerServiceImpl implements AutoscalerService { public ApplicationPolicy[] getApplicationPolicies() { return PolicyManager.getInstance().getApplicationPolicies(); } + + private void terminateAllApplicationMembersForcefully(String applicationId) { + if (StringUtils.isEmpty(applicationId)){ + throw new IllegalArgumentException("Application Id can not be empty"); + } + + Application application; + try{ + ApplicationManager.acquireReadLockForApplication(applicationId); + application = ApplicationManager.getApplications().getApplication(applicationId); + if(application == null){ + log.warn(String.format("Could not find application, thus no members to be terminated [application-id] %s", applicationId)); + return; + } + }finally { + ApplicationManager.releaseReadLockForApplication(applicationId); + } + + + Set<ClusterDataHolder> allClusters = application.getClusterDataRecursively(); + //CloudControllerServiceClient cloudControllerServiceClient = CloudControllerServiceClient.getInstance().ter + for(ClusterDataHolder clusterDataHolder : allClusters){ + String serviceType = clusterDataHolder.getServiceType(); + String clusterId = clusterDataHolder.getClusterId(); + + Cluster cluster; + try { + TopologyManager.acquireReadLockForCluster(serviceType, clusterId); + cluster = TopologyManager.getTopology().getService(serviceType).getCluster(clusterId); + }finally { + TopologyManager.releaseReadLockForCluster(serviceType, clusterId); + } + + List<String> memberListToTerminate = new LinkedList<String>(); + for(Member member : cluster.getMembers()){ + memberListToTerminate.add(member.getMemberId()); + } + + for(String memberIdToTerminate : memberListToTerminate){ + try { + log.info(String.format("Terminating member forcefully [member-id] %s of the cluster [cluster-id] %s [application-id] %s", memberIdToTerminate, clusterId, application)); + CloudControllerServiceClient.getInstance().terminateInstanceForcefully(memberIdToTerminate); + } catch (Exception e) { + log.error(String.format("Forcefull termination of member %s is failed, but continuing forcefull deletion of other members", memberIdToTerminate)); + } + } + + } + } } http://git-wip-us.apache.org/repos/asf/stratos/blob/2a7f2758/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyBuilder.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyBuilder.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyBuilder.java index ee5cee6..abc0d91 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyBuilder.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyBuilder.java @@ -1047,7 +1047,7 @@ public class TopologyBuilder { ClusterStatus status = ClusterStatus.Terminating; if(context.isStateTransitionValid(status)) { context.setStatus(status); - log.info("Cluster Terminating adding status started for" + cluster.getClusterId()); + log.info("Cluster Terminating adding status started for " + cluster.getClusterId()); TopologyManager.updateTopology(topology); //publishing data ClusterInstanceTerminatingEvent clusterTerminaingEvent = new ClusterInstanceTerminatingEvent(event.getAppId(), http://git-wip-us.apache.org/repos/asf/stratos/blob/2a7f2758/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/CloudControllerService.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/CloudControllerService.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/CloudControllerService.java index 48f61ad..0799862 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/CloudControllerService.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/CloudControllerService.java @@ -175,6 +175,8 @@ public interface CloudControllerService { void terminateInstance(String memberId) throws InvalidMemberException, InvalidCartridgeTypeException, CloudControllerException; + void terminateInstanceForcefully(String memberId) throws InvalidCartridgeTypeException; + /** * Calling this method will result in termination of all instances belong * to the provided cluster ID. http://git-wip-us.apache.org/repos/asf/stratos/blob/2a7f2758/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java index 7386872..3df93de 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java @@ -482,6 +482,7 @@ public class CloudControllerServiceImpl implements CloudControllerService { memberContext.setProperties(instanceContext.getProperties()); memberContext.setLoadBalancingIPType(loadBalancingIPType); memberContext.setInitTime(System.currentTimeMillis()); + memberContext.setObsoleteExpiryTime(instanceContext.getObsoleteExpiryTime()); return memberContext; } @@ -547,6 +548,29 @@ public class CloudControllerServiceImpl implements CloudControllerService { return clusterId + memberId.toString(); } + public void terminateInstanceForcefully(String memberId) { + + log.info(String.format("Starting to forcefully terminate the member " + memberId)); + boolean memberTerminated = true; + try { + this.terminateInstance(memberId); + } catch (InvalidMemberException e) { + memberTerminated = false; + } catch (CloudControllerException e){ + memberTerminated = false; + } catch (InvalidCartridgeTypeException e) { + memberTerminated = false; + } + + if(memberTerminated){ + log.info(String.format("Member terminated [member-id] %s ", memberId)); + }else{ + log.warn(String.format("Stratos could not terminate the member [member-id] %s. This may due to a issue in the underlying IaaS, Please terminate the member manually", memberId)); + MemberContext memberContext = CloudControllerContext.getInstance().getMemberContextOfMemberId(memberId); + CloudControllerServiceUtil.executeMemberTerminationPostProcess(memberContext); + } + } + @Override public void terminateInstance(String memberId) throws InvalidMemberException, InvalidCartridgeTypeException, CloudControllerException { http://git-wip-us.apache.org/repos/asf/stratos/blob/2a7f2758/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/AutoscalerServiceClient.java ---------------------------------------------------------------------- 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 37e9e43..9a95a36 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 @@ -136,9 +136,9 @@ public class AutoscalerServiceClient { return stub.getApplicationNetworkPartitions(applicationId); } - public void undeployApplication(String applicationId) throws + public void undeployApplication(String applicationId, boolean force) throws AutoscalerServiceApplicationDefinitionExceptionException, RemoteException { - stub.undeployApplication(applicationId); + stub.undeployApplication(applicationId, force); } public void deleteApplication(String applicationId) throws RemoteException { http://git-wip-us.apache.org/repos/asf/stratos/blob/2a7f2758/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/CloudControllerServiceClient.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/CloudControllerServiceClient.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/CloudControllerServiceClient.java index 32ee917..ebfaa80 100644 --- a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/CloudControllerServiceClient.java +++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/CloudControllerServiceClient.java @@ -123,7 +123,14 @@ public class CloudControllerServiceClient { log.debug(String.format("Service call terminateInstance() returned in %dms", (endTime - startTime))); } } - + + public void terminateInstanceForcefully(String memberId) throws Exception { + if (log.isDebugEnabled()) { + log.debug(String.format("Terminating instance forcefully via cloud controller: [member] %s", memberId)); + } + stub.terminateInstanceForcefully(memberId); + } + public void terminateAllInstances(String clusterId) throws RemoteException, CloudControllerServiceInvalidClusterExceptionException { if (log.isInfoEnabled()) { http://git-wip-us.apache.org/repos/asf/stratos/blob/2a7f2758/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java ---------------------------------------------------------------------- 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 4545de6..ddd5a4d 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 @@ -615,8 +615,7 @@ public class StratosApiV41 extends AbstractApi { @Produces("application/json") @Consumes("application/json") @AuthorizationAction("/permission/protected/manage/getApplications") - public Response getApplications() - throws RestAPIException { + public Response getApplications() throws RestAPIException { List<ApplicationBean> applicationDefinitions = StratosApiV41Utils.getApplications(); ApplicationBean[] applicationDefinitionsArray = applicationDefinitions .toArray(new ApplicationBean[applicationDefinitions.size()]); @@ -893,8 +892,9 @@ public class StratosApiV41 extends AbstractApi { @Consumes("application/json") @AuthorizationAction("/permission/protected/manage/undeployApplication") public Response undeployApplication( - @PathParam("applicationId") String applicationId) throws RestAPIException { - StratosApiV41Utils.undeployApplication(applicationId); + @PathParam("applicationId") String applicationId, @QueryParam("force") @DefaultValue("false") boolean force) throws RestAPIException { + + StratosApiV41Utils.undeployApplication(applicationId, force); return Response.accepted().entity(new SuccessResponseBean(Response.Status.ACCEPTED.getStatusCode(), String.format("Application undeployed successfully: [application] %s", applicationId))).build(); } http://git-wip-us.apache.org/repos/asf/stratos/blob/2a7f2758/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java ---------------------------------------------------------------------- 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 eea42d2..7ed3fdc 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 @@ -23,22 +23,17 @@ import org.apache.axis2.context.ConfigurationContext; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.stratos.autoscaler.stub.AutoscalerServiceApplicatioinPolicyNotExistsExceptionException; -import org.apache.stratos.autoscaler.stub.AutoscalerServiceApplicationDefinitionExceptionException; -import org.apache.stratos.autoscaler.stub.AutoscalerServiceInvalidApplicationPolicyExceptionException; -import org.apache.stratos.autoscaler.stub.AutoscalerServiceInvalidPolicyExceptionException; -import org.apache.stratos.autoscaler.stub.AutoscalerServiceRemoteExceptionException; +import org.apache.stratos.autoscaler.stub.*; import org.apache.stratos.autoscaler.stub.deployment.policy.ApplicationPolicy; import org.apache.stratos.autoscaler.stub.pojo.ApplicationContext; import org.apache.stratos.autoscaler.stub.pojo.ServiceGroup; import org.apache.stratos.cloud.controller.stub.*; -import org.apache.stratos.cloud.controller.stub.domain.*; +import org.apache.stratos.cloud.controller.stub.domain.Cartridge; +import org.apache.stratos.cloud.controller.stub.domain.DeploymentPolicy; +import org.apache.stratos.cloud.controller.stub.domain.Persistence; +import org.apache.stratos.cloud.controller.stub.domain.Volume; import org.apache.stratos.common.beans.PropertyBean; -import org.apache.stratos.common.beans.application.ApplicationBean; -import org.apache.stratos.common.beans.application.ApplicationNetworkPartitionIdListBean; -import org.apache.stratos.common.beans.application.ComponentBean; -import org.apache.stratos.common.beans.application.GroupBean; -import org.apache.stratos.common.beans.application.GroupReferenceBean; +import org.apache.stratos.common.beans.application.*; import org.apache.stratos.common.beans.application.domain.mapping.ApplicationDomainMappingsBean; import org.apache.stratos.common.beans.application.domain.mapping.DomainMappingBean; import org.apache.stratos.common.beans.application.signup.ApplicationSignUpBean; @@ -1322,23 +1317,20 @@ public class StratosApiV41Utils { } } - public static void undeployApplication(String applicationId) throws RestAPIException { + public static void undeployApplication(String applicationId, boolean force) throws RestAPIException { AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient(); + if(force){ + if(log.isDebugEnabled()){ + log.debug("Forcefully undeploying application [application-id] " + applicationId); + } + }else{ + if(log.isDebugEnabled()){ + log.debug("Gracefully undeploying application [application-id] " + applicationId); + } + } if (autoscalerServiceClient != null) { try { - ApplicationContext application = autoscalerServiceClient.getApplication(applicationId); - if(application == null) { - String message = String.format("Application is not found: [application-id] %s", applicationId); - log.error(message); - throw new RestAPIException(message); - } - if (!application.getStatus().equals(APPLICATION_STATUS_DEPLOYED)) { - String message = String.format("Application is not deployed: [application-id] %s", applicationId); - log.error(message); - throw new RestAPIException(message); - } - - autoscalerServiceClient.undeployApplication(applicationId); + autoscalerServiceClient.undeployApplication(applicationId, force); } catch (RemoteException e) { String message = "Could not undeploy application: [application-id] " + applicationId; log.error(message, e); @@ -1389,6 +1381,7 @@ public class StratosApiV41Utils { } return applicationBean; } + private static void addGroupsInstancesToApplicationInstanceBean(ApplicationInstanceBean applicationInstanceBean, Application application) { Collection<Group> groups = application.getGroups(); @@ -1405,9 +1398,7 @@ public class StratosApiV41Utils { } - private static void addClustersInstancesToApplicationInstanceBean( - ApplicationInstanceBean applicationInstanceBean, - Application application) { + private static void addClustersInstancesToApplicationInstanceBean(ApplicationInstanceBean applicationInstanceBean,Application application) { Map<String, ClusterDataHolder> topLevelClusterDataMap = application.getClusterDataMap(); if(topLevelClusterDataMap != null) { @@ -1418,6 +1409,7 @@ public class StratosApiV41Utils { try { TopologyManager.acquireReadLockForCluster(serviceType, clusterId); Cluster cluster = TopologyManager.getTopology().getService(serviceType).getCluster(clusterId); + applicationInstanceBean.getClusterInstances().add(ObjectConverter. convertClusterToClusterInstanceBean(applicationInstanceBean.getInstanceId(), cluster, entry.getKey())); http://git-wip-us.apache.org/repos/asf/stratos/blob/2a7f2758/service-stubs/org.apache.stratos.autoscaler.service.stub/src/main/resources/AutoscalerService.wsdl ---------------------------------------------------------------------- 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 5ed320f..a4299c3 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,10 @@ -<?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: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:ax218="http://policy.exception.autoscaler.stratos.apache.org/xsd" xmlns:ax214="http://rmi.java/xsd" xmlns:ax220="http://exception.autoscaler.stratos.apache.org/xsd" xmlns:ns1="http://org.apache.axis2/xsd" xmlns:ax215="http://io.java/xsd" xmlns:ax212="http://autoscale.policy.pojo.autoscaler.stratos.apache.org/xsd" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:ax210="http://pojo.autoscaler.stratos.apache.org/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"> +<?xml version="1.0" encoding="UTF-8"?><wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:ax29="http://autoscale.policy.pojo.autoscaler.stratos.apache.org/xsd" xmlns:ns="http://impl.services.autoscaler.stratos.apache.org" xmlns:ax27="http://pojo.autoscaler.stratos.apache.org/xsd" xmlns:ax25="http://application.exception.autoscaler.stratos.apache.org/xsd" xmlns:ax21="http://pojo.applications.autoscaler.stratos.apache.org/xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ax22="http://common.stratos.apache.org/xsd" xmlns:ax216="http://policy.exception.autoscaler.stratos.apache.org/xsd" xmlns:ax219="http://rmi.java/xsd" xmlns:ax214="http://exception.autoscaler.stratos.apache.org/xsd" xmlns:ax220="http://io.java/xsd" xmlns:ns1="http://org.apache.axis2/xsd" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:ax211="http://deployment.policy.pojo.autoscaler.stratos.apache.org/xsd" xmlns:mime="http://schemas.x mlsoap.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:types> - <xs:schema xmlns:ax216="http://io.java/xsd" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://rmi.java/xsd"> + <xs:schema xmlns:ax221="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="ax216:IOException"> + <xs:extension base="ax220: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 +21,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="ax29:LoadThresholds"/> <xs:element minOccurs="0" name="tenantId" type="xs:int"/> </xs:sequence> </xs:complexType> @@ -33,17 +33,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:ax23="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="ax21: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="ax23: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 +52,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="ax21:ApplicationClusterContext"/> + <xs:element maxOccurs="unbounded" minOccurs="0" name="cartridgeContexts" nillable="true" type="ax21:CartridgeContext"/> + <xs:element minOccurs="0" name="dependencyContext" nillable="true" type="ax21:DependencyContext"/> + <xs:element maxOccurs="unbounded" minOccurs="0" name="groupContexts" nillable="true" type="ax21:GroupContext"/> </xs:sequence> </xs:complexType> <xs:complexType name="ApplicationClusterContext"> @@ -66,8 +66,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="ax21:PersistenceContext"/> + <xs:element minOccurs="0" name="properties" nillable="true" type="ax23: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 +75,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="ax21:VolumeContext"/> </xs:sequence> </xs:complexType> <xs:complexType name="VolumeContext"> @@ -94,21 +94,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="ax21: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="ax21: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="ax21:PersistenceContext"/> + <xs:element minOccurs="0" name="properties" nillable="true" type="ax23:Properties"/> </xs:sequence> </xs:complexType> <xs:complexType name="ArtifactRepositoryContext"> @@ -130,9 +130,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="ax21: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="ax21: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 +144,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="ax27:Dependencies"/> + <xs:element maxOccurs="unbounded" minOccurs="0" name="groups" nillable="true" type="ax27:ServiceGroup"/> <xs:element minOccurs="0" name="groupscalingEnabled" type="xs:boolean"/> <xs:element minOccurs="0" name="name" nillable="true" type="xs:string"/> </xs:sequence> @@ -158,53 +158,53 @@ </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:ax217="http://rmi.java/xsd" xmlns:ax219="http://policy.exception.autoscaler.stratos.apache.org/xsd" xmlns:ax221="http://exception.autoscaler.stratos.apache.org/xsd" xmlns:ax222="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" 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:schema xmlns:ax28="http://pojo.autoscaler.stratos.apache.org/xsd" xmlns:ax26="http://application.exception.autoscaler.stratos.apache.org/xsd" xmlns:ax24="http://pojo.applications.autoscaler.stratos.apache.org/xsd" xmlns:ax217="http://policy.exception.autoscaler.stratos.apache.org/xsd" xmlns:ax218="http://common.stratos.apache.org/xsd" xmlns:ax215="http://exception.autoscaler.stratos.apache.org/xsd" xmlns:ax222="http://rmi.java/xsd" xmlns:ax213="http://deployment.policy.pojo.autoscaler.stratos.apache.org/xsd" xmlns:ax210="http://autoscale.policy.pojo.autoscaler.stratos.apache.org/xsd" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://impl.services.autoscaler.stratos.apache.org"> <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: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://policy.exception.autoscaler.stratos.apache.org/xsd"/> <xs:import namespace="http://common.stratos.apache.org/xsd"/> - <xs:element name="getApplicationPolicy"> + <xs:import namespace="http://rmi.java/xsd"/> + <xs:element name="getApplications"> <xs:complexType> - <xs:sequence> - <xs:element minOccurs="0" name="applicationPolicyId" nillable="true" type="xs:string"/> - </xs:sequence> + <xs:sequence/> </xs:complexType> </xs:element> - <xs:element name="getApplicationPolicyResponse"> + <xs:element name="getApplicationsResponse"> <xs:complexType> <xs:sequence> - <xs:element minOccurs="0" name="return" nillable="true" type="ax24:ApplicationPolicy"/> + <xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="ax24:ApplicationContext"/> </xs:sequence> </xs:complexType> </xs:element> - <xs:element name="getApplications"> + <xs:element name="getApplication"> <xs:complexType> - <xs:sequence/> + <xs:sequence> + <xs:element minOccurs="0" name="applicationId" nillable="true" type="xs:string"/> + </xs:sequence> </xs:complexType> </xs:element> - <xs:element name="getApplicationsResponse"> + <xs:element name="getApplicationResponse"> <xs:complexType> <xs:sequence> - <xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="ax27:ApplicationContext"/> + <xs:element minOccurs="0" name="return" nillable="true" type="ax24:ApplicationContext"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="AutoscalerServiceApplicationDefinitionException"> <xs:complexType> <xs:sequence> - <xs:element minOccurs="0" name="ApplicationDefinitionException" nillable="true" type="ax29:ApplicationDefinitionException"/> + <xs:element minOccurs="0" name="ApplicationDefinitionException" nillable="true" type="ax25:ApplicationDefinitionException"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="addApplication"> <xs:complexType> <xs:sequence> - <xs:element minOccurs="0" name="applicationContext" nillable="true" type="ax27:ApplicationContext"/> + <xs:element minOccurs="0" name="applicationContext" nillable="true" type="ax24:ApplicationContext"/> </xs:sequence> </xs:complexType> </xs:element> @@ -218,7 +218,7 @@ <xs:element name="getServiceGroupResponse"> <xs:complexType> <xs:sequence> - <xs:element minOccurs="0" name="return" nillable="true" type="ax210:ServiceGroup"/> + <xs:element minOccurs="0" name="return" nillable="true" type="ax27:ServiceGroup"/> </xs:sequence> </xs:complexType> </xs:element> @@ -232,275 +232,276 @@ <xs:element name="getAutoscalingPolicyResponse"> <xs:complexType> <xs:sequence> - <xs:element minOccurs="0" name="return" nillable="true" type="ax212:AutoscalePolicy"/> + <xs:element minOccurs="0" name="return" nillable="true" type="ax29:AutoscalePolicy"/> </xs:sequence> </xs:complexType> </xs:element> - <xs:element name="getApplication"> + <xs:element name="getApplicationPolicy"> <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:sequence> </xs:complexType> </xs:element> - <xs:element name="getApplicationResponse"> + <xs:element name="getApplicationPolicyResponse"> <xs:complexType> <xs:sequence> - <xs:element minOccurs="0" name="return" nillable="true" type="ax27:ApplicationContext"/> + <xs:element minOccurs="0" name="return" nillable="true" type="ax213:ApplicationPolicy"/> </xs:sequence> </xs:complexType> </xs:element> - <xs:element name="deleteApplication"> + <xs:element name="serviceGroupExist"> <xs:complexType> <xs:sequence> - <xs:element minOccurs="0" name="applicationId" nillable="true" type="xs:string"/> + <xs:element minOccurs="0" name="serviceName" nillable="true" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> - <xs:element name="AutoscalerServiceRemoteException"> + <xs:element name="serviceGroupExistResponse"> <xs:complexType> <xs:sequence> - <xs:element minOccurs="0" name="RemoteException" nillable="true" type="ax217:RemoteException"/> + <xs:element minOccurs="0" name="return" type="xs:boolean"/> </xs:sequence> </xs:complexType> </xs:element> - <xs:element name="AutoscalerServiceInvalidApplicationPolicyException"> + <xs:element name="AutoscalerServiceAutoScalerException"> <xs:complexType> <xs:sequence> - <xs:element minOccurs="0" name="InvalidApplicationPolicyException" nillable="true" type="ax29:InvalidApplicationPolicyException"/> + <xs:element minOccurs="0" name="AutoScalerException" nillable="true" type="ax214:AutoScalerException"/> </xs:sequence> </xs:complexType> </xs:element> - <xs:element name="AutoscalerServiceInvalidPolicyException"> + <xs:element name="getServiceGroups"> <xs:complexType> - <xs:sequence> - <xs:element minOccurs="0" name="InvalidPolicyException" nillable="true" type="ax219:InvalidPolicyException"/> - </xs:sequence> + <xs:sequence/> </xs:complexType> </xs:element> - <xs:element name="addApplicationPolicy"> + <xs:element name="getServiceGroupsResponse"> <xs:complexType> <xs:sequence> - <xs:element minOccurs="0" name="applicationPolicy" nillable="true" type="ax24:ApplicationPolicy"/> + <xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="ax27:ServiceGroup"/> </xs:sequence> </xs:complexType> </xs:element> - <xs:element name="removeApplicationPolicy"> + <xs:element name="removeServiceGroup"> <xs:complexType> <xs:sequence> - <xs:element minOccurs="0" name="applicationPolicyId" 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="AutoscalerServiceApplicatioinPolicyNotExistsException"> + <xs:element name="AutoscalerServiceInvalidPolicyException"> <xs:complexType> <xs:sequence> - <xs:element minOccurs="0" name="ApplicatioinPolicyNotExistsException" nillable="true" type="ax219:ApplicatioinPolicyNotExistsException"/> + <xs:element minOccurs="0" name="InvalidPolicyException" nillable="true" type="ax217:InvalidPolicyException"/> </xs:sequence> </xs:complexType> </xs:element> - <xs:element name="updateApplicationPolicy"> + <xs:element name="removeApplicationPolicy"> <xs:complexType> <xs:sequence> - <xs:element minOccurs="0" name="applicationPolicy" nillable="true" type="ax24:ApplicationPolicy"/> + <xs:element minOccurs="0" name="applicationPolicyId" nillable="true" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> - <xs:element name="getApplicationPolicies"> + <xs:element name="getAutoScalingPolicies"> <xs:complexType> <xs:sequence/> </xs:complexType> </xs:element> - <xs:element name="getApplicationPoliciesResponse"> + <xs:element name="getAutoScalingPoliciesResponse"> <xs:complexType> <xs:sequence> - <xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="ax24:ApplicationPolicy"/> + <xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="ax29:AutoscalePolicy"/> </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="ax29: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="AutoscalerServiceAutoScalerException"> + <xs:element name="updateAutoScalingPolicy"> <xs:complexType> <xs:sequence> - <xs:element minOccurs="0" name="AutoScalerException" nillable="true" type="ax220:AutoScalerException"/> + <xs:element minOccurs="0" name="autoscalePolicy" nillable="true" type="ax29:AutoscalePolicy"/> </xs:sequence> </xs:complexType> </xs:element> - <xs:element name="getServiceGroups"> + <xs:element name="updateAutoScalingPolicyResponse"> <xs:complexType> - <xs:sequence/> + <xs:sequence> + <xs:element minOccurs="0" name="return" type="xs:boolean"/> + </xs:sequence> </xs:complexType> </xs:element> - <xs:element name="getServiceGroupsResponse"> + <xs:element name="removeAutoScalingPolicy"> <xs:complexType> <xs:sequence> - <xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="ax210:ServiceGroup"/> + <xs:element minOccurs="0" name="autoscalePolicyId" nillable="true" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> - <xs:element name="removeServiceGroup"> + <xs:element name="removeAutoScalingPolicyResponse"> <xs:complexType> <xs:sequence> - <xs:element minOccurs="0" name="groupName" nillable="true" type="xs:string"/> + <xs:element minOccurs="0" name="return" type="xs:boolean"/> </xs:sequence> </xs:complexType> </xs:element> - <xs:element name="addAutoScalingPolicy"> + <xs:element name="deployApplication"> <xs:complexType> <xs:sequence> - <xs:element minOccurs="0" name="autoscalePolicy" nillable="true" type="ax212:AutoscalePolicy"/> + <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="addAutoScalingPolicyResponse"> + <xs:element name="deployApplicationResponse"> <xs:complexType> <xs:sequence> <xs:element minOccurs="0" name="return" type="xs:boolean"/> </xs:sequence> </xs:complexType> </xs:element> - <xs:element name="getAutoScalingPolicies"> + <xs:element name="undeployApplication"> <xs:complexType> - <xs:sequence/> + <xs:sequence> + <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="getAutoScalingPoliciesResponse"> + <xs:element name="deleteApplication"> <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:sequence> </xs:complexType> </xs:element> - <xs:element name="updateAutoScalingPolicy"> + <xs:element name="AutoscalerServiceInvalidArgumentException"> <xs:complexType> <xs:sequence> - <xs:element minOccurs="0" name="autoscalePolicy" nillable="true" type="ax212:AutoscalePolicy"/> + <xs:element minOccurs="0" name="InvalidArgumentException" nillable="true" type="ax214:InvalidArgumentException"/> </xs:sequence> </xs:complexType> </xs:element> - <xs:element name="updateAutoScalingPolicyResponse"> + <xs:element name="updateClusterMonitor"> <xs:complexType> <xs:sequence> - <xs:element minOccurs="0" name="return" type="xs:boolean"/> + <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"/> + <xs:element minOccurs="0" name="properties" nillable="true" type="ax22:Properties"/> </xs:sequence> </xs:complexType> </xs:element> - <xs:element name="removeAutoScalingPolicy"> + <xs:element name="AutoscalerServiceInvalidServiceGroupException"> <xs:complexType> <xs:sequence> - <xs:element minOccurs="0" name="autoscalePolicyId" nillable="true" type="xs:string"/> + <xs:element minOccurs="0" name="InvalidServiceGroupException" nillable="true" type="ax25:InvalidServiceGroupException"/> </xs:sequence> </xs:complexType> </xs:element> - <xs:element name="removeAutoScalingPolicyResponse"> + <xs:element name="addServiceGroup"> <xs:complexType> <xs:sequence> - <xs:element minOccurs="0" name="return" type="xs:boolean"/> + <xs:element minOccurs="0" name="servicegroup" nillable="true" type="ax27:ServiceGroup"/> </xs:sequence> </xs:complexType> </xs:element> - <xs:element name="deployApplication"> + <xs:element name="findClusterId"> <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="alias" nillable="true" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> - <xs:element name="deployApplicationResponse"> + <xs:element name="findClusterIdResponse"> <xs:complexType> <xs:sequence> - <xs:element minOccurs="0" name="return" type="xs:boolean"/> + <xs:element minOccurs="0" name="return" nillable="true" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> - <xs:element name="undeployApplication"> + <xs:element name="undeployServiceGroup"> <xs:complexType> <xs:sequence> - <xs:element minOccurs="0" name="applicationId" nillable="true" type="xs:string"/> + <xs:element minOccurs="0" name="name" nillable="true" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> - <xs:element name="AutoscalerServiceInvalidArgumentException"> + <xs:element name="getApplicationNetworkPartitions"> <xs:complexType> <xs:sequence> - <xs:element minOccurs="0" name="InvalidArgumentException" nillable="true" type="ax220:InvalidArgumentException"/> + <xs:element minOccurs="0" name="applicationId" nillable="true" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> - <xs:element name="updateClusterMonitor"> + <xs:element name="getApplicationNetworkPartitionsResponse"> <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="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> - <xs:element name="AutoscalerServiceInvalidServiceGroupException"> + <xs:element name="AutoscalerServiceRemoteException"> <xs:complexType> <xs:sequence> - <xs:element minOccurs="0" name="InvalidServiceGroupException" nillable="true" type="ax29:InvalidServiceGroupException"/> + <xs:element minOccurs="0" name="RemoteException" nillable="true" type="ax219:RemoteException"/> </xs:sequence> </xs:complexType> </xs:element> - <xs:element name="addServiceGroup"> + <xs:element name="AutoscalerServiceInvalidApplicationPolicyException"> <xs:complexType> <xs:sequence> - <xs:element minOccurs="0" name="servicegroup" nillable="true" type="ax210:ServiceGroup"/> + <xs:element minOccurs="0" name="InvalidApplicationPolicyException" nillable="true" type="ax25:InvalidApplicationPolicyException"/> </xs:sequence> </xs:complexType> </xs:element> - <xs:element name="findClusterId"> + <xs:element name="addApplicationPolicy"> <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="applicationPolicy" nillable="true" type="ax213:ApplicationPolicy"/> </xs:sequence> </xs:complexType> </xs:element> - <xs:element name="findClusterIdResponse"> + <xs:element name="AutoscalerServiceApplicatioinPolicyNotExistsException"> <xs:complexType> <xs:sequence> - <xs:element minOccurs="0" name="return" nillable="true" type="xs:string"/> + <xs:element minOccurs="0" name="ApplicatioinPolicyNotExistsException" nillable="true" type="ax217:ApplicatioinPolicyNotExistsException"/> </xs:sequence> </xs:complexType> </xs:element> - <xs:element name="getApplicationNetworkPartitions"> + <xs:element name="updateApplicationPolicy"> <xs:complexType> <xs:sequence> - <xs:element minOccurs="0" name="applicationId" nillable="true" type="xs:string"/> + <xs:element minOccurs="0" name="applicationPolicy" nillable="true" type="ax213:ApplicationPolicy"/> </xs:sequence> </xs:complexType> </xs:element> - <xs:element name="getApplicationNetworkPartitionsResponse"> + <xs:element name="getApplicationPolicies"> <xs:complexType> - <xs:sequence> - <xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="xs:string"/> - </xs:sequence> + <xs:sequence/> </xs:complexType> </xs:element> - <xs:element name="undeployServiceGroup"> + <xs:element name="getApplicationPoliciesResponse"> <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="ax213:ApplicationPolicy"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> - <xs:schema xmlns:ax23="http://common.stratos.apache.org/xsd" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://deployment.policy.pojo.autoscaler.stratos.apache.org/xsd"> + <xs:schema xmlns:ax212="http://common.stratos.apache.org/xsd" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://deployment.policy.pojo.autoscaler.stratos.apache.org/xsd"> <xs:import namespace="http://common.stratos.apache.org/xsd"/> <xs:complexType name="ApplicationPolicy"> <xs:sequence> @@ -508,7 +509,7 @@ <xs:element minOccurs="0" name="id" nillable="true" type="xs:string"/> <xs:element maxOccurs="unbounded" minOccurs="0" name="networkPartitionGroups" nillable="true" type="xs:string"/> <xs:element maxOccurs="unbounded" minOccurs="0" name="networkPartitions" nillable="true" type="xs:string"/> - <xs:element minOccurs="0" name="properties" nillable="true" type="ax23:Properties"/> + <xs:element minOccurs="0" name="properties" nillable="true" type="ax22:Properties"/> </xs:sequence> </xs:complexType> </xs:schema> @@ -518,12 +519,12 @@ <xs:element minOccurs="0" name="message" nillable="true" type="xs:string"/> </xs:sequence> </xs:complexType> - <xs:complexType name="InvalidApplicationPolicyException"> + <xs:complexType name="InvalidServiceGroupException"> <xs:sequence> <xs:element minOccurs="0" name="message" nillable="true" type="xs:string"/> </xs:sequence> </xs:complexType> - <xs:complexType name="InvalidServiceGroupException"> + <xs:complexType name="InvalidApplicationPolicyException"> <xs:sequence> <xs:element minOccurs="0" name="message" nillable="true" type="xs:string"/> </xs:sequence>
