Repository: stratos Updated Branches: refs/heads/4.1.0-beta-deployment-policy-fix 714cbc5f3 -> 067b303c0
Moving cloud controller client operations to common bundle. Removing unused methods in autoscaler Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/067b303c Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/067b303c Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/067b303c Branch: refs/heads/4.1.0-beta-deployment-policy-fix Commit: 067b303c0e61fa99825bd9303639fbb2be41b9c1 Parents: 714cbc5 Author: sajhak <[email protected]> Authored: Thu Feb 19 13:12:59 2015 +0530 Committer: sajhak <[email protected]> Committed: Thu Feb 19 13:13:12 2015 +0530 ---------------------------------------------------------------------- .../parser/DefaultApplicationParser.java | 6 +- .../client/CloudControllerClient.java | 146 +------------------ .../monitor/cluster/ClusterMonitor.java | 80 +++++++--- .../autoscaler/rule/RuleTasksDelegator.java | 13 +- .../services/impl/AutoscalerServiceImpl.java | 86 ++--------- .../client/CloudControllerServiceClient.java | 44 +++++- 6 files changed, 121 insertions(+), 254 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/067b303c/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java index 6646802..578834d 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java @@ -40,8 +40,10 @@ import org.apache.stratos.autoscaler.pojo.ServiceGroup; import org.apache.stratos.autoscaler.registry.RegistryManager; import org.apache.stratos.autoscaler.util.AutoscalerConstants; import org.apache.stratos.autoscaler.util.AutoscalerUtil; +import org.apache.stratos.cloud.controller.stub.CloudControllerServiceCartridgeNotFoundExceptionException; import org.apache.stratos.cloud.controller.stub.domain.CartridgeInfo; import org.apache.stratos.common.Properties; +import org.apache.stratos.common.client.CloudControllerServiceClient; import org.apache.stratos.messaging.domain.application.*; import org.wso2.carbon.identity.oauth.stub.OAuthAdminServiceException; @@ -881,8 +883,8 @@ public class DefaultApplicationParser implements ApplicationParser { private CartridgeInfo getCartridge(String cartridgeType) throws ApplicationDefinitionException { try { - return CloudControllerClient.getInstance().getCartrdgeInformation(cartridgeType); - } catch (CartridgeInformationException e) { + return CloudControllerServiceClient.getInstance().getCartridgeInfo(cartridgeType); + } catch (Exception e) { throw new ApplicationDefinitionException(e); } } http://git-wip-us.apache.org/repos/asf/stratos/blob/067b303c/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/CloudControllerClient.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/CloudControllerClient.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/CloudControllerClient.java index 5279f44..ffebf6f 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/CloudControllerClient.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/CloudControllerClient.java @@ -81,62 +81,7 @@ public class CloudControllerClient { } } - /* - * This will validate the given partitions against the given cartridge type. - */ - - public synchronized boolean validateDeploymentPolicy(String cartridgeType, org.apache.stratos.autoscaler.pojo.policy.deployment.partition.network.Partition[] partitions) throws PartitionValidationException { - try { - if (log.isInfoEnabled()) { - log.info(String.format("Validating partitions of policy via cloud controller: [cartridge-type] %s", cartridgeType)); - } - long startTime = System.currentTimeMillis(); - boolean result = stub.validateDeploymentPolicy(cartridgeType, - AutoscalerObjectConverter.convertASPartitionsToCCStubPartitions(partitions)); - if (log.isDebugEnabled()) { - long endTime = System.currentTimeMillis(); - log.debug(String.format("Service call validateDeploymentPolicy() returned in %dms", (endTime - startTime))); - } - return result; - } catch (RemoteException e) { - log.error(e.getMessage(), e); - throw new PartitionValidationException(e.getMessage(), e); - } catch (CloudControllerServiceInvalidPartitionExceptionException e) { - log.error(e.getFaultMessage().getInvalidPartitionException().getMessage(), e); - throw new PartitionValidationException(e.getFaultMessage().getInvalidPartitionException().getMessage()); - } catch (CloudControllerServiceInvalidCartridgeTypeExceptionException e) { - log.error(e.getFaultMessage().getInvalidCartridgeTypeException().getMessage(), e); - throw new PartitionValidationException(e.getFaultMessage().getInvalidCartridgeTypeException().getMessage()); - } - - } - - /* - * Calls the CC to validate the partition. - */ - public synchronized boolean validatePartition(Partition partition) throws PartitionValidationException { - - try { - if (log.isInfoEnabled()) { - log.info(String.format("Validating partition via cloud controller: [id] %s", partition.getId())); - } - long startTime = System.currentTimeMillis(); - boolean result = stub.validatePartition(partition); - if (log.isDebugEnabled()) { - long endTime = System.currentTimeMillis(); - log.debug(String.format("Service call validatePartition() returned in %dms", (endTime - startTime))); - } - return result; - } catch (RemoteException e) { - log.error(e.getMessage(), e); - throw new PartitionValidationException(e.getMessage(), e); - } catch (CloudControllerServiceInvalidPartitionExceptionException e) { - log.error(e.getFaultMessage().getInvalidPartitionException().getMessage(), e); - throw new PartitionValidationException(e.getFaultMessage().getInvalidPartitionException().getMessage(), e); - } - - } - + public synchronized MemberContext startInstance(Partition partition, String clusterId, String clusterInstanceId, String networkPartitionId, boolean isPrimary, @@ -200,29 +145,7 @@ public class CloudControllerClient { } } - public synchronized void terminateInstances(String clusterId) throws TerminationException { - try { - if (log.isInfoEnabled()) { - log.info(String.format("Terminating all instances of cluster via cloud controller: [cluster] %s", clusterId)); - } - long startTime = System.currentTimeMillis(); - stub.terminateInstances(clusterId); - if (log.isDebugEnabled()) { - long endTime = System.currentTimeMillis(); - log.debug(String.format("Service call terminateInstances() returned in %dms", (endTime - startTime))); - } - } catch (RemoteException e) { - String msg = e.getMessage(); - log.error(msg, e); - throw new TerminationException(msg, e); - - } catch (CloudControllerServiceInvalidClusterExceptionException e) { - String message = e.getFaultMessage().getInvalidClusterException().getMessage(); - log.error(message, e); - throw new TerminationException(message, e); - } - } - + public synchronized void createApplicationClusters(String appId, ApplicationClusterContext[] applicationClusterContexts) { List<org.apache.stratos.cloud.controller.stub.domain.ApplicationClusterContext> contextDTOs = @@ -262,67 +185,6 @@ public class CloudControllerClient { } - - public void createClusterInstance (String serviceType, String clusterId, String alias, - String instanceId, String partitionId, String networkPartitionId){ - try { - stub.createClusterInstance(serviceType, clusterId, alias, instanceId, - partitionId, networkPartitionId); - - } catch (RemoteException e) { - String msg = e.getMessage(); - log.error(msg, e); - throw new RuntimeException(msg, e); - } catch (CloudControllerServiceClusterInstanceCreationExceptionException e) { - String msg = e.getMessage(); - log.error(msg, e); - throw new RuntimeException(msg, e); - } - } - - public synchronized void terminateInstance(String memberId) throws TerminationException { - try { - if (log.isInfoEnabled()) { - log.info(String.format("Terminating instance via cloud controller: [member] %s", memberId)); - } - long startTime = System.currentTimeMillis(); - stub.terminateInstance(memberId); - if (log.isDebugEnabled()) { - long endTime = System.currentTimeMillis(); - log.debug(String.format("Service call terminateInstance() returned in %dms", (endTime - startTime))); - } - } catch (RemoteException e) { - String msg = e.getMessage(); - log.error(msg, e); - throw new TerminationException(msg, e); - } catch (CloudControllerServiceInvalidMemberExceptionException e) { - String msg = e.getFaultMessage().getInvalidMemberException().getMessage(); - log.error(msg, e); - throw new TerminationException(msg, e); - } catch (CloudControllerServiceInvalidCartridgeTypeExceptionException e) { - String msg = e.getFaultMessage().getInvalidCartridgeTypeException().getMessage(); - log.error(msg, e); - throw new TerminationException(msg, e); - } catch (CloudControllerServiceCloudControllerExceptionException e) { - String msg = e.getMessage(); - log.error(msg, e); - throw new TerminationException(msg, e); - } - } - - public CartridgeInfo getCartrdgeInformation(String cartridgeType) throws CartridgeInformationException { - - try { - return stub.getCartridgeInfo(cartridgeType); - - } catch (RemoteException e) { - String msg = e.getMessage(); - log.error(msg, e); - throw new CartridgeInformationException(msg, e); - } catch (CloudControllerServiceCartridgeNotFoundExceptionException e) { - String msg = e.getMessage(); - log.error(msg, e); - throw new CartridgeInformationException(msg, e); - } - } + + } http://git-wip-us.apache.org/repos/asf/stratos/blob/067b303c/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 e2db9e6..37a56af 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,11 +18,23 @@ */ 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.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; + +import org.apache.axis2.AxisFault; 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.client.CloudControllerClient; import org.apache.stratos.autoscaler.context.InstanceContext; import org.apache.stratos.autoscaler.context.cluster.AbstractClusterContext; import org.apache.stratos.autoscaler.context.cluster.ClusterContext; @@ -34,7 +46,6 @@ import org.apache.stratos.autoscaler.context.partition.network.ClusterLevelNetwo import org.apache.stratos.autoscaler.event.publisher.ClusterStatusEventPublisher; import org.apache.stratos.autoscaler.event.publisher.InstanceNotificationPublisher; import org.apache.stratos.autoscaler.exception.InvalidArgumentException; -import org.apache.stratos.autoscaler.exception.cartridge.TerminationException; import org.apache.stratos.autoscaler.exception.partition.PartitionValidationException; import org.apache.stratos.autoscaler.exception.policy.PolicyValidationException; import org.apache.stratos.autoscaler.monitor.Monitor; @@ -53,6 +64,7 @@ import org.apache.stratos.autoscaler.util.ServiceReferenceHolder; import org.apache.stratos.cloud.controller.stub.domain.MemberContext; import org.apache.stratos.common.Properties; import org.apache.stratos.common.Property; +import org.apache.stratos.common.client.CloudControllerServiceClient; import org.apache.stratos.common.constants.StratosConstants; import org.apache.stratos.common.threading.StratosThreadPool; import org.apache.stratos.messaging.domain.application.ApplicationStatus; @@ -64,18 +76,33 @@ 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.*; -import org.apache.stratos.messaging.event.topology.*; +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.message.receiver.topology.TopologyManager; import org.drools.runtime.StatefulKnowledgeSession; import org.drools.runtime.rule.FactHandle; -import java.util.*; -import java.util.concurrent.ExecutorService; -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 @@ -378,20 +405,27 @@ public class ClusterMonitor extends Monitor implements Runnable { return groupScalingEnabledSubtree; } - private static void terminateMember(String memberId) { - try { - CloudControllerClient.getInstance().terminateInstance(memberId); - - } catch (TerminationException e) { - log.error("Unable to terminate member: [member-id] " + memberId, e); - } - } + + private static void createClusterInstance(String serviceType, + String clusterId, String alias, String instanceId, + String partitionId, String networkPartitionId) { + + try { + CloudControllerServiceClient.getInstance().createClusterInstance( + serviceType, clusterId, alias, instanceId, partitionId, + networkPartitionId); + } catch (RemoteException e) { + String msg = " Exception occurred in creating cluster instance with cluster-id [" + clusterId + + "] instance-id ["+instanceId+"] service-type ["+serviceType+"]" + + "] alias ["+alias+"] partition-id ["+partitionId+"]" + + "] network-parition-id ["+networkPartitionId+"]" + + " .Reason ["+e.getMessage()+"]" ; + log.error(msg); + throw new RuntimeException(msg, e); + } + - private static void createClusterInstance(String serviceType, String clusterId, String alias, - String instanceId, String partitionId, String networkPartitionId) { - CloudControllerClient.getInstance().createClusterInstance(serviceType, clusterId, alias, - instanceId, partitionId, networkPartitionId); - } + } public void addClusterLevelNWPartitionContext(ClusterLevelNetworkPartitionContext clusterLevelNWPartitionCtxt) { networkPartitionIdToClusterLevelNetworkPartitionCtxts.put(clusterLevelNWPartitionCtxt.getId(), clusterLevelNWPartitionCtxt); http://git-wip-us.apache.org/repos/asf/stratos/blob/067b303c/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java index f69bf05..f61fce8 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java @@ -38,6 +38,7 @@ import org.apache.stratos.autoscaler.exception.cartridge.TerminationException; import org.apache.stratos.autoscaler.monitor.cluster.ClusterMonitor; import org.apache.stratos.autoscaler.util.AutoscalerConstants; import org.apache.stratos.cloud.controller.stub.domain.MemberContext; +import org.apache.stratos.common.client.CloudControllerServiceClient; import org.apache.stratos.common.constants.StratosConstants; /** @@ -292,12 +293,10 @@ public class RuleTasksDelegator { public void terminateObsoleteInstance(String memberId) { try { - CloudControllerClient.getInstance().terminateInstance(memberId); + CloudControllerServiceClient.getInstance().terminateInstance(memberId); } catch (Exception e) { log.error("Cannot terminate instance", e); - } catch (TerminationException e) { - log.error("Cannot terminate instance", e); - } + } } //Grouping @@ -306,15 +305,13 @@ public class RuleTasksDelegator { if (log.isDebugEnabled()) { log.debug("delegateTerminateAll - begin"); } - CloudControllerClient.getInstance().terminateInstances(clusterId); + CloudControllerServiceClient.getInstance().terminateAllInstances(clusterId); if (log.isDebugEnabled()) { log.debug("delegateTerminateAll - done"); } } catch (Exception e) { log.error("Cannot terminate instance", e); - } catch (TerminationException e) { - log.error("Cannot terminate instance", e); - } + } } public int getPredictedReplicasForStat(int minReplicas, float statUpperLimit, float statPredictedValue) { http://git-wip-us.apache.org/repos/asf/stratos/blob/067b303c/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 4f2dbbd..8793424 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 @@ -18,23 +18,33 @@ */ package org.apache.stratos.autoscaler.services.impl; +import java.rmi.RemoteException; +import java.text.MessageFormat; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; + import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.stratos.autoscaler.applications.ApplicationHolder; import org.apache.stratos.autoscaler.applications.parser.ApplicationParser; import org.apache.stratos.autoscaler.applications.parser.DefaultApplicationParser; -import org.apache.stratos.autoscaler.applications.pojo.*; +import org.apache.stratos.autoscaler.applications.pojo.ApplicationClusterContext; +import org.apache.stratos.autoscaler.applications.pojo.ApplicationContext; +import org.apache.stratos.autoscaler.applications.pojo.ArtifactRepositoryContext; +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.applications.pojo.SubscribableInfoContext; import org.apache.stratos.autoscaler.applications.topic.ApplicationBuilder; -import org.apache.stratos.autoscaler.client.CloudControllerClient; import org.apache.stratos.autoscaler.context.AutoscalerContext; import org.apache.stratos.autoscaler.exception.AutoScalerException; import org.apache.stratos.autoscaler.exception.InvalidArgumentException; import org.apache.stratos.autoscaler.exception.application.ApplicationDefinitionException; import org.apache.stratos.autoscaler.exception.application.InvalidApplicationPolicyException; -import org.apache.stratos.autoscaler.exception.application.TopologyInConsistentException; import org.apache.stratos.autoscaler.exception.kubernetes.InvalidServiceGroupException; -import org.apache.stratos.autoscaler.exception.partition.PartitionValidationException; import org.apache.stratos.autoscaler.exception.policy.InvalidPolicyException; import org.apache.stratos.autoscaler.monitor.cluster.ClusterMonitor; import org.apache.stratos.autoscaler.pojo.Dependencies; @@ -43,9 +53,7 @@ import org.apache.stratos.autoscaler.pojo.policy.PolicyManager; import org.apache.stratos.autoscaler.pojo.policy.autoscale.AutoscalePolicy; import org.apache.stratos.autoscaler.pojo.policy.deployment.ApplicationPolicy; import org.apache.stratos.autoscaler.pojo.policy.deployment.ApplicationPolicyNetworkPartitionReference; -import org.apache.stratos.autoscaler.pojo.policy.deployment.ChildPolicy; import org.apache.stratos.autoscaler.pojo.policy.deployment.DeploymentPolicy; -import org.apache.stratos.autoscaler.pojo.policy.deployment.partition.network.ChildLevelNetworkPartition; import org.apache.stratos.autoscaler.pojo.policy.deployment.partition.network.NetworkPartition; import org.apache.stratos.autoscaler.pojo.policy.deployment.partition.network.Partition; import org.apache.stratos.autoscaler.registry.RegistryManager; @@ -60,16 +68,10 @@ 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.application.Group; import org.apache.stratos.metadata.client.defaults.DefaultMetaDataServiceClient; import org.apache.stratos.metadata.client.defaults.MetaDataServiceClient; import org.apache.stratos.metadata.client.exception.MetaDataServiceClientException; import org.wso2.carbon.registry.api.RegistryException; -import java.rmi.RemoteException; -import com.google.gdata.wireformats.ObjectConverter; -import java.text.MessageFormat; -import java.util.*; /** * Auto Scaler Service API is responsible getting Partitions and Policies. @@ -82,66 +84,6 @@ public class AutoscalerServiceImpl implements AutoscalerService { return PolicyManager.getInstance().getAutoscalePolicyList(); } - private boolean validateDeploymentPolicy(DeploymentPolicy deploymentPolicy) { - try { - ApplicationHolder.acquireReadLock(); - - for (ChildPolicy childPolicy : deploymentPolicy.getChildPolicies()) { - String alias = childPolicy.getAlias(); - List<Partition> partitionList = new ArrayList<Partition>(); - for (ChildLevelNetworkPartition networkPartition : childPolicy.getChildLevelNetworkPartitions()) { - Partition[] partitions = deploymentPolicy.getApplicationLevelNetworkPartition( - networkPartition.getId()).getPartitions(); - for (Partition partition : partitions) { - partitionList.add(partition); - } - } - - Application application = ApplicationHolder.getApplications().getApplication( - deploymentPolicy.getApplicationId()); - Partition[] partitions = new Partition[partitionList.size()]; - if (application != null) { - Group group = application.getGroupRecursively(alias); - if (group != null) { - Set<ClusterDataHolder> clusterDataHolders = group.getClusterDataHoldersOfGroup(); - //validating the group deployment policy against the leaf cartridges - for (ClusterDataHolder clusterDataHolder : clusterDataHolders) { - CloudControllerClient.getInstance().validateDeploymentPolicy( - clusterDataHolder.getServiceType(), partitionList.toArray(partitions)); - } - } else { - //Validating the cartridge level deployment policy - ClusterDataHolder clusterDataHolder = application. - getClusterDataHolderRecursivelyByAlias(alias); - if (clusterDataHolder != null) { - CloudControllerClient.getInstance().validateDeploymentPolicy( - clusterDataHolder.getServiceType(), partitionList.toArray(partitions)); - } else { - String msg = "Error while retrieving the group/cluster for the deployment " + - "policy: " + alias; - log.error(msg); - throw new TopologyInConsistentException(msg); - } - } - } else { - String msg = "Error while retrieving the application for the deployment policy: " + - deploymentPolicy.getApplicationId(); - log.error(msg); - throw new TopologyInConsistentException(msg); - } - } - } catch (PartitionValidationException e) { - log.error("Error while validating the deployment policy", e); - //TODO throw exception - } catch (TopologyInConsistentException e) { - log.error("Error while validating the deployment policy", e); - //TODO throw exception - } finally { - ApplicationHolder.releaseReadLock(); - } - return true; - } - @Override public boolean addAutoScalingPolicy(AutoscalePolicy autoscalePolicy) throws InvalidPolicyException { return PolicyManager.getInstance().addAutoscalePolicy(autoscalePolicy); http://git-wip-us.apache.org/repos/asf/stratos/blob/067b303c/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 a6c4684..2e20ca6 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 @@ -112,9 +112,30 @@ public class CloudControllerServiceClient { return stub.getServiceGroup(name); } + public void terminateInstance(String memberId) throws Exception { + if (log.isInfoEnabled()) { + log.info(String.format("Terminating instance via cloud controller: [member] %s", memberId)); + } + long startTime = System.currentTimeMillis(); + stub.terminateInstance(memberId); + if (log.isDebugEnabled()) { + long endTime = System.currentTimeMillis(); + log.debug(String.format("Service call terminateInstance() returned in %dms", (endTime - startTime))); + } + } + public void terminateAllInstances(String clusterId) throws RemoteException, - CloudControllerServiceInvalidClusterExceptionException { - stub.terminateInstances(clusterId); + CloudControllerServiceInvalidClusterExceptionException { + if (log.isInfoEnabled()) { + log.info(String.format("Terminating all instances of cluster via cloud controller: [cluster] %s", clusterId)); + } + long startTime = System.currentTimeMillis(); + stub.terminateInstances(clusterId); + + if (log.isDebugEnabled()) { + long endTime = System.currentTimeMillis(); + log.debug(String.format("Service call terminateInstances() returned in %dms", (endTime - startTime))); + } } public String[] getRegisteredCartridges() throws RemoteException { @@ -184,11 +205,6 @@ public class CloudControllerServiceClient { return stub.updateKubernetesHost(kubernetesHost); } - public void validatePartition(Partition partition) throws RemoteException, - CloudControllerServiceInvalidPartitionExceptionException { - stub.validatePartition(partition); - } - public void addDeploymentPolicy(DeploymentPolicy deploymentPolicy) throws CloudControllerServiceDeploymentPolicyAlreadyExistsExceptionException, RemoteException, CloudControllerServiceInvalidDeploymentPolicyExceptionException { @@ -237,4 +253,18 @@ public class CloudControllerServiceClient { public NetworkPartition getNetworkPartition(String networkPartitionId) throws RemoteException { return stub.getNetworkPartition(networkPartitionId); } + + public void createClusterInstance(String serviceType, String clusterId, + String alias, String instanceId, String partitionId, + String networkPartitionId) throws RemoteException { + try { + stub.createClusterInstance(serviceType, clusterId, alias, + instanceId, partitionId, networkPartitionId); + + } catch (CloudControllerServiceClusterInstanceCreationExceptionException e) { + String msg = e.getFaultMessage().getClusterInstanceCreationException().getMessage(); + log.error(msg, e); + throw new RuntimeException(msg, e); + } + } }
