Removing ApplicationManager references in autoscaler component. AS should always refer to ApplicationHolder
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/b778c6dc Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/b778c6dc Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/b778c6dc Branch: refs/heads/master Commit: b778c6dcbda964933e99b9d00c7c62b9d7512875 Parents: 57ecc64 Author: Akila Perera <[email protected]> Authored: Wed Aug 26 12:28:00 2015 +0530 Committer: Akila Perera <[email protected]> Committed: Wed Aug 26 12:28:00 2015 +0530 ---------------------------------------------------------------------- .../services/impl/AutoscalerServiceImpl.java | 148 ++++++++++++------- 1 file changed, 91 insertions(+), 57 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/b778c6dc/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 f0e797f..3ccd970 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 @@ -25,13 +25,7 @@ import org.apache.stratos.autoscaler.algorithms.networkpartition.NetworkPartitio 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.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.pojo.*; import org.apache.stratos.autoscaler.applications.topic.ApplicationBuilder; import org.apache.stratos.autoscaler.client.AutoscalerCloudControllerClient; import org.apache.stratos.autoscaler.context.AutoscalerContext; @@ -44,7 +38,6 @@ import org.apache.stratos.autoscaler.exception.*; import org.apache.stratos.autoscaler.exception.application.ApplicationDefinitionException; import org.apache.stratos.autoscaler.exception.application.InvalidApplicationPolicyException; import org.apache.stratos.autoscaler.exception.application.InvalidServiceGroupException; -import org.apache.stratos.autoscaler.exception.CartridgeNotFoundException; import org.apache.stratos.autoscaler.exception.policy.*; import org.apache.stratos.autoscaler.monitor.cluster.ClusterMonitor; import org.apache.stratos.autoscaler.monitor.component.ApplicationMonitor; @@ -76,7 +69,6 @@ import org.apache.stratos.messaging.domain.application.ClusterDataHolder; import org.apache.stratos.messaging.domain.instance.ClusterInstance; 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; @@ -165,8 +157,9 @@ public class AutoscalerServiceImpl implements AutoscalerService { } if (AutoscalerContext.getInstance().getApplicationContext(applicationId) == null) { - String message = "Application is not found as ApplicationContext. Please add application before updating it: " + - "[application-id] " + applicationId; + String message = + "Application is not found as ApplicationContext. Please add application before updating it: " + + "[application-id] " + applicationId; log.error(message); throw new ApplicationDefinitionException(message); } @@ -251,7 +244,8 @@ public class AutoscalerServiceImpl implements AutoscalerService { application = ApplicationHolder.getApplications().getApplication(applicationId); application.setApplicationPolicyId(applicationPolicyId); ApplicationHolder.persistApplication(application); - } finally { + } + finally { ApplicationHolder.releaseWriteLock(); } @@ -276,7 +270,8 @@ public class AutoscalerServiceImpl implements AutoscalerService { applicationId); return true; - } catch (Exception e) { + } + catch (Exception e) { ApplicationContext applicationContext = RegistryManager.getInstance(). getApplicationContext(applicationId); if (applicationContext != null) { @@ -357,8 +352,10 @@ public class AutoscalerServiceImpl implements AutoscalerService { applicationContext.getApplicationId())); } } - } catch (Exception e) { - String message = "Could not add application signup: [application-id]" + applicationContext.getApplicationId(); + } + catch (Exception e) { + String message = + "Could not add application signup: [application-id]" + applicationContext.getApplicationId(); log.error(message, e); throw new RuntimeException(message, e); } @@ -396,7 +393,8 @@ public class AutoscalerServiceImpl implements AutoscalerService { StratosManagerServiceClient serviceClient = StratosManagerServiceClient.getInstance(); - ApplicationSignUp applicationSignUp[] = serviceClient.getApplicationSignUps(applicationContext.getApplicationId()); + ApplicationSignUp applicationSignUp[] = + serviceClient.getApplicationSignUps(applicationContext.getApplicationId()); if (applicationSignUp != null) { for (ApplicationSignUp appSignUp : applicationSignUp) { if (appSignUp != null) { @@ -405,7 +403,8 @@ public class AutoscalerServiceImpl implements AutoscalerService { } } - } catch (Exception e) { + } + catch (Exception e) { String message = "Could not remove application signup(s)"; log.error(message, e); throw new RuntimeException(message, e); @@ -437,7 +436,8 @@ public class AutoscalerServiceImpl implements AutoscalerService { } } - private void updateArtifactRepositoryList(List<ArtifactRepository> artifactRepositoryList, CartridgeContext[] cartridgeContexts) { + private void updateArtifactRepositoryList(List<ArtifactRepository> artifactRepositoryList, + CartridgeContext[] cartridgeContexts) { if (cartridgeContexts == null) { return; @@ -445,7 +445,8 @@ public class AutoscalerServiceImpl implements AutoscalerService { for (CartridgeContext cartridgeContext : cartridgeContexts) { SubscribableInfoContext subscribableInfoContext = cartridgeContext.getSubscribableInfoContext(); - ArtifactRepositoryContext artifactRepositoryContext = subscribableInfoContext.getArtifactRepositoryContext(); + ArtifactRepositoryContext artifactRepositoryContext = + subscribableInfoContext.getArtifactRepositoryContext(); if (artifactRepositoryContext != null) { ArtifactRepository artifactRepository = new ArtifactRepository(); @@ -536,7 +537,8 @@ public class AutoscalerServiceImpl implements AutoscalerService { if (log.isInfoEnabled()) { log.info("Application undeployment process started: [application-id] " + applicationId); } - } catch (Exception e) { + } + catch (Exception e) { String message = "Could not start application undeployment process: [application-id] " + applicationId; log.error(message, e); throw new RuntimeException(message, e); @@ -546,7 +548,8 @@ public class AutoscalerServiceImpl implements AutoscalerService { @Override public boolean deleteApplication(String applicationId) { try { - ApplicationContext applicationContext = AutoscalerContext.getInstance().getApplicationContext(applicationId); + ApplicationContext applicationContext = + AutoscalerContext.getInstance().getApplicationContext(applicationId); Application application = ApplicationHolder.getApplications().getApplication(applicationId); if ((applicationContext == null) || (application == null)) { String msg = String.format("Application cannot be deleted, application not found: [application-id] %s", @@ -570,7 +573,8 @@ public class AutoscalerServiceImpl implements AutoscalerService { ApplicationBuilder.handleApplicationRemoval(applicationId); log.info(String.format("Application deleted successfully: [application-id] %s", applicationId)); - } catch (Exception e) { + } + catch (Exception e) { String message = String.format("Could not delete application: [application-id] %s", applicationId); log.error(message, e); throw new RuntimeException(message, e); @@ -714,7 +718,8 @@ public class AutoscalerServiceImpl implements AutoscalerService { try { RegistryManager.getInstance().updateServiceGroup(cartridgeGroup); - } catch (org.wso2.carbon.registry.core.exceptions.RegistryException e) { + } + catch (org.wso2.carbon.registry.core.exceptions.RegistryException e) { String message = (String.format("Cannot update cartridge group: [group-name] %s", cartridgeGroup.getName())); throw new RuntimeException(message, e); @@ -745,7 +750,8 @@ public class AutoscalerServiceImpl implements AutoscalerService { } throw new CartridgeGroupNotFoundException(msg); } - } catch (org.wso2.carbon.registry.core.exceptions.RegistryException e) { + } + catch (org.wso2.carbon.registry.core.exceptions.RegistryException e) { String message = "Could not remove cartridge group: " + groupName; log.error(message, e); throw new RuntimeException(message, e); @@ -759,15 +765,17 @@ public class AutoscalerServiceImpl implements AutoscalerService { } try { return RegistryManager.getInstance().getServiceGroup(name); - } catch (Exception e) { + } + catch (Exception e) { throw new AutoScalerException("Error occurred while retrieving cartridge group", e); } } @Override public String findClusterId(String applicationId, String alias) { + ApplicationHolder.acquireReadLock(); try { - Application application = ApplicationManager.getApplications().getApplication(applicationId); + Application application = ApplicationHolder.getApplications().getApplication(applicationId); if (application != null) { ClusterDataHolder clusterData = application.getClusterDataHolderRecursivelyByAlias(alias); @@ -776,11 +784,15 @@ public class AutoscalerServiceImpl implements AutoscalerService { } } return null; - } catch (Exception e) { + } + catch (Exception e) { String message = String.format("Could not find cluster id: [application-id] %s [alias] %s", applicationId, alias); throw new AutoScalerException(message, e); } + finally { + ApplicationHolder.releaseReadLock(); + } } public ServiceGroup[] getServiceGroups() throws AutoScalerException { @@ -794,7 +806,8 @@ public class AutoscalerServiceImpl implements AutoscalerService { public boolean undeployServiceGroup(String name) throws AutoScalerException { try { RegistryManager.getInstance().removeServiceGroup(name); - } catch (RegistryException e) { + } + catch (RegistryException e) { throw new AutoScalerException("Error occurred while removing the cartridge groups", e); } return true; @@ -842,7 +855,8 @@ public class AutoscalerServiceImpl implements AutoscalerService { } @Override - public boolean removeApplicationPolicy(String applicationPolicyId) throws InvalidPolicyException, UnremovablePolicyException { + public boolean removeApplicationPolicy(String applicationPolicyId) + throws InvalidPolicyException, UnremovablePolicyException { if (removableApplicationPolicy(applicationPolicyId)) { return PolicyManager.getInstance().removeApplicationPolicy(applicationPolicyId); @@ -873,9 +887,11 @@ public class AutoscalerServiceImpl implements AutoscalerService { } String applicationPolicyId = applicationPolicy.getId(); - ApplicationPolicy existingApplicationPolicy = PolicyManager.getInstance().getApplicationPolicy(applicationPolicyId); + ApplicationPolicy existingApplicationPolicy = + PolicyManager.getInstance().getApplicationPolicy(applicationPolicyId); if (existingApplicationPolicy == null) { - String msg = String.format("No such application policy found [application-policy-id] %s", applicationPolicyId); + String msg = + String.format("No such application policy found [application-policy-id] %s", applicationPolicyId); log.error(msg); throw new ApplicatioinPolicyNotExistsException(msg); } @@ -899,16 +915,17 @@ public class AutoscalerServiceImpl implements AutoscalerService { } Application application; + ApplicationHolder.acquireReadLock(); try { - ApplicationManager.acquireReadLockForApplication(applicationId); - application = ApplicationManager.getApplications().getApplication(applicationId); + application = ApplicationHolder.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); + } + finally { + ApplicationHolder.releaseReadLock(); } Set<ClusterDataHolder> allClusters = application.getClusterDataRecursively(); @@ -920,7 +937,8 @@ public class AutoscalerServiceImpl implements AutoscalerService { try { TopologyManager.acquireReadLockForCluster(serviceType, clusterId); cluster = TopologyManager.getTopology().getService(serviceType).getCluster(clusterId); - } finally { + } + finally { TopologyManager.releaseReadLockForCluster(serviceType, clusterId); } @@ -950,12 +968,15 @@ public class AutoscalerServiceImpl implements AutoscalerService { 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)); + log.info(String.format( + "Terminating member forcefully [member-id] %s of the cluster [cluster-id] %s " + + "[application-id] %s", memberIdToTerminate, clusterId, application)); AutoscalerCloudControllerClient.getInstance().terminateInstanceForcefully(memberIdToTerminate); - } catch (Exception e) { - log.error(String.format("Forceful termination of member %s has failed, but continuing forceful " + - "deletion of other members", memberIdToTerminate)); + } + catch (Exception e) { + log.error( + String.format("Forceful termination of member %s has failed, but continuing forceful " + + "deletion of other members", memberIdToTerminate)); } } } @@ -1016,7 +1037,8 @@ public class AutoscalerServiceImpl implements AutoscalerService { } // deployment policy should contain at least one network partition reference - if (null == deploymentPolicy.getNetworkPartitionRefs() || deploymentPolicy.getNetworkPartitionRefs().length == 0) { + if (null == deploymentPolicy.getNetworkPartitionRefs() || + deploymentPolicy.getNetworkPartitionRefs().length == 0) { String msg = String.format("Deployment policy does not have any network partition references: " + "[deployment-policy-id] %s", deploymentPolicyId); log.error(msg); @@ -1088,7 +1110,8 @@ public class AutoscalerServiceImpl implements AutoscalerService { PartitionRef[] partitions = networkPartitionRef.getPartitionRefs(); if (null == partitions || partitions.length == 0) { String msg = String.format("Network partition does not have any partition references: " - + "[deployment-policy-id] %s [network-partition-id] %s", deploymentPolicyId, networkPartitionId); + + "[deployment-policy-id] %s [network-partition-id] %s", deploymentPolicyId, + networkPartitionId); log.error(msg); throw new InvalidDeploymentPolicyException(msg); } @@ -1097,7 +1120,8 @@ public class AutoscalerServiceImpl implements AutoscalerService { @Override public boolean updateDeploymentPolicy(DeploymentPolicy deploymentPolicy) throws RemoteException, - InvalidDeploymentPolicyException, DeploymentPolicyNotExistsException, InvalidPolicyException, CloudControllerConnectionException { + InvalidDeploymentPolicyException, DeploymentPolicyNotExistsException, InvalidPolicyException, + CloudControllerConnectionException { validateDeploymentPolicy(deploymentPolicy); @@ -1137,24 +1161,30 @@ public class AutoscalerServiceImpl implements AutoscalerService { if (clusterLevelNetworkPartitionContext != null) { try { addNewPartitionsToClusterMonitor(clusterLevelNetworkPartitionContext, networkPartition, - deploymentPolicy.getDeploymentPolicyID(), clusterMonitor.getClusterContext().getServiceId()); - } catch (RemoteException e) { + deploymentPolicy.getDeploymentPolicyID(), + clusterMonitor.getClusterContext().getServiceId()); + } + catch (RemoteException e) { - String message = "Connection to cloud controller failed, Cluster monitor update failed for" + - " [deployment-policy] " + deploymentPolicy.getDeploymentPolicyID(); + String message = + "Connection to cloud controller failed, Cluster monitor update failed for" + + " [deployment-policy] " + deploymentPolicy.getDeploymentPolicyID(); log.error(message); throw new CloudControllerConnectionException(message, e); - } catch (CloudControllerServiceInvalidPartitionExceptionException e) { + } + catch (CloudControllerServiceInvalidPartitionExceptionException e) { String message = "Invalid partition, Cluster monitor update failed for [deployment-policy] " + deploymentPolicy.getDeploymentPolicyID(); log.error(message); throw new InvalidDeploymentPolicyException(message, e); - } catch (CloudControllerServiceInvalidCartridgeTypeExceptionException e) { + } + catch (CloudControllerServiceInvalidCartridgeTypeExceptionException e) { - String message = "Invalid cartridge type, Cluster monitor update failed for [deployment-policy] " - + deploymentPolicy.getDeploymentPolicyID() + " [cartridge] " - + clusterMonitor.getClusterContext().getServiceId(); + String message = + "Invalid cartridge type, Cluster monitor update failed for [deployment-policy] " + + deploymentPolicy.getDeploymentPolicyID() + " [cartridge] " + + clusterMonitor.getClusterContext().getServiceId(); log.error(message); throw new InvalidDeploymentPolicyException(message, e); } @@ -1168,17 +1198,20 @@ public class AutoscalerServiceImpl implements AutoscalerService { private void removeOldPartitionsFromClusterMonitor(NetworkPartitionContext clusterLevelNetworkPartitionContext, NetworkPartitionRef networkPartition) { - for (InstanceContext instanceContext : clusterLevelNetworkPartitionContext.getInstanceIdToInstanceContextMap().values()) { + for (InstanceContext instanceContext : clusterLevelNetworkPartitionContext.getInstanceIdToInstanceContextMap() + .values()) { ClusterInstanceContext clusterInstanceContext = (ClusterInstanceContext) instanceContext; - for (ClusterLevelPartitionContext clusterLevelPartitionContext : clusterInstanceContext.getPartitionCtxts()) { + for (ClusterLevelPartitionContext clusterLevelPartitionContext : clusterInstanceContext + .getPartitionCtxts()) { if (null == networkPartition.getPartitionRef(clusterLevelPartitionContext.getPartitionId())) { //It has found that this partition context which is in cluster monitor is removed in updated policy clusterLevelPartitionContext.setIsObsoletePartition(true); - Iterator<MemberContext> memberContextIterator = clusterLevelPartitionContext.getActiveMembers().iterator(); + Iterator<MemberContext> memberContextIterator = + clusterLevelPartitionContext.getActiveMembers().iterator(); while (memberContextIterator.hasNext()) { clusterLevelPartitionContext.moveActiveMemberToTerminationPendingMembers( @@ -1265,7 +1298,8 @@ public class AutoscalerServiceImpl implements AutoscalerService { try { Collection<DeploymentPolicy> deploymentPolicies = PolicyManager.getInstance().getDeploymentPolicies(); return deploymentPolicies.toArray(new DeploymentPolicy[deploymentPolicies.size()]); - } catch (Exception e) { + } + catch (Exception e) { String message = "Could not get deployment policies"; log.error(message); throw new AutoScalerException(message, e);
