You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by im...@apache.org on 2014/12/16 06:13:47 UTC
stratos git commit: Fixing application locking logic
Repository: stratos
Updated Branches:
refs/heads/4.1.0-test 9333708ec -> 3b49fb848
Fixing application locking logic
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/3b49fb84
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/3b49fb84
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/3b49fb84
Branch: refs/heads/4.1.0-test
Commit: 3b49fb848db62084ac0f3f449bda40365fe5d95f
Parents: 9333708
Author: Imesh Gunaratne <im...@apache.org>
Authored: Tue Dec 16 10:34:23 2014 +0530
Committer: Imesh Gunaratne <im...@apache.org>
Committed: Tue Dec 16 10:43:40 2014 +0530
----------------------------------------------------------------------
.../autoscaler/api/AutoScalerServiceImpl.java | 72 +++++++++++---------
.../applications/topic/ApplicationBuilder.java | 2 +-
.../context/cluster/VMClusterContext.java | 2 +-
.../AutoscalerTopologyEventReceiver.java | 4 +-
.../autoscaler/monitor/MonitorFactory.java | 20 +++---
.../monitor/component/GroupMonitor.java | 3 +-
.../component/ParentComponentMonitor.java | 2 +-
.../ClusterStatusTerminatedProcessor.java | 2 -
.../stratos/autoscaler/util/AutoscalerUtil.java | 3 +-
9 files changed, 54 insertions(+), 56 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/3b49fb84/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
index d5c92e9..7bf93c0 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
@@ -32,7 +32,7 @@ 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.TopologyInConsistentException;
-import org.apache.stratos.autoscaler.exception.kubernetes.*;
+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.interfaces.AutoScalerServiceInterface;
@@ -77,28 +77,29 @@ public class AutoScalerServiceImpl implements AutoScalerServiceInterface {
}
private boolean validateDeploymentPolicy(DeploymentPolicy deploymentPolicy) {
-
- for(ChildPolicy childPolicy : deploymentPolicy.getChildPolicies()) {
- String alias = childPolicy.getId();
+ try {
ApplicationHolder.acquireReadLock();
- 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);
+
+ for (ChildPolicy childPolicy : deploymentPolicy.getChildPolicies()) {
+ String alias = childPolicy.getId();
+ 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);
+ }
}
- }
- try {
+
Application application = ApplicationHolder.getApplications().
- getApplication(deploymentPolicy.getApplicationId());
+ getApplication(deploymentPolicy.getApplicationId());
Partition[] partitions = new Partition[partitionList.size()];
- if(application != null) {
+ if (application != null) {
Group group = application.getGroupRecursively(alias);
- if(group != null) {
+ if (group != null) {
Set<ClusterDataHolder> clusterDataHolders = group.getClusterDataHoldersOfGroup();
//validating the group deployment policy against the leaf cartridges
- for(ClusterDataHolder clusterDataHolder : clusterDataHolders) {
+ for (ClusterDataHolder clusterDataHolder : clusterDataHolders) {
CloudControllerClient.getInstance().validateDeploymentPolicy(
clusterDataHolder.getServiceType(), partitionList.toArray(partitions));
}
@@ -106,7 +107,7 @@ public class AutoScalerServiceImpl implements AutoScalerServiceInterface {
//Validating the cartridge level deployment policy
ClusterDataHolder clusterDataHolder = application.
getClusterDataHolderRecursivelyByAlias(alias);
- if(clusterDataHolder != null) {
+ if (clusterDataHolder != null) {
CloudControllerClient.getInstance().validateDeploymentPolicy(
clusterDataHolder.getServiceType(), partitionList.toArray(partitions));
} else {
@@ -118,23 +119,20 @@ public class AutoScalerServiceImpl implements AutoScalerServiceInterface {
}
} else {
String msg = "Error while retrieving the application for the Deployment policy: " +
- deploymentPolicy.getApplicationId();
+ 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();
}
-
+ } 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;
}
@@ -166,12 +164,18 @@ public class AutoScalerServiceImpl implements AutoScalerServiceInterface {
@Override
public void addApplication(ApplicationContext applicationContext)
throws ApplicationDefinitionException {
+
+ if(log.isInfoEnabled()) {
+ log.info(String.format("Starting to add application: [application-id] ",
+ applicationContext.getApplicationId()));
+ }
+
ApplicationParser applicationParser = new DefaultApplicationParser();
applicationParser.parse(applicationContext);
applicationContext.setStatus(ApplicationContext.STATUS_CREATED);
AutoscalerContext.getInstance().addApplicationContext(applicationContext);
if(log.isInfoEnabled()) {
- log.info(String.format("Application added successfully: [application-id] ",
+ log.info(String.format("Successfully added application: [application-id] ",
applicationContext.getApplicationId()));
}
}
@@ -201,16 +205,18 @@ public class AutoScalerServiceImpl implements AutoScalerServiceInterface {
try {
String policyId = PolicyManager.getInstance().deployDeploymentPolicy(policy);
} catch (InvalidPolicyException e) {
- log.error("Error while deploying the deployment policy " + policy.getApplicationId(), e);
+ String message = "Could not deploy application: [application-id] " + policy.getApplicationId();
+ log.error(message, e);
+ throw new RuntimeException(message, e);
}
//Need to start the application Monitor after validation of the deployment policies.
//FIXME add validation
validateDeploymentPolicy(policy);
//Check whether all the clusters are there
- ApplicationHolder.acquireReadLock();
boolean allClusterInitialized = false;
try {
+ ApplicationHolder.acquireReadLock();
application = ApplicationHolder.getApplications().getApplication(policy.getApplicationId());
if (application != null) {
allClusterInitialized = AutoscalerUtil.allClustersInitialized(application);
@@ -228,7 +234,7 @@ public class AutoScalerServiceImpl implements AutoScalerServiceInterface {
"Waiting for them to be created");
}
} else {
- log.info("The application Monitor has already been created for [Application] " + applicationId);
+ log.info("The application monitor has already been created: [application-id] " + applicationId);
}
applicationContext.setStatus(ApplicationContext.STATUS_DEPLOYED);
AutoscalerContext.getInstance().updateApplicationContext(applicationContext);
http://git-wip-us.apache.org/repos/asf/stratos/blob/3b49fb84/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 c85fe7f..a64d071 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
@@ -56,8 +56,8 @@ public class ApplicationBuilder {
log.debug("Handling complete application event");
}
- ApplicationHolder.acquireReadLock();
try {
+ ApplicationHolder.acquireReadLock();
ApplicationsEventPublisher.sendCompleteApplicationsEvent(applications);
} finally {
ApplicationHolder.releaseReadLock();
http://git-wip-us.apache.org/repos/asf/stratos/blob/3b49fb84/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMClusterContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMClusterContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMClusterContext.java
index 47489a0..3f0feb4 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMClusterContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMClusterContext.java
@@ -241,8 +241,8 @@ public class VMClusterContext extends AbstractClusterContext {
int maxInstances = 1;
if (clusterInstanceContext == null) {
int minInstances = 1;
- ApplicationHolder.acquireReadLock();
try {
+ ApplicationHolder.acquireReadLock();
Application application = ApplicationHolder.getApplications().
getApplication(cluster.getAppId());
ClusterDataHolder dataHolder = application.
http://git-wip-us.apache.org/repos/asf/stratos/blob/3b49fb84/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java
index 08f5ca5..ad992ba 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java
@@ -90,8 +90,8 @@ public class AutoscalerTopologyEventReceiver {
protected void onEvent(Event event) {
if (!topologyInitialized) {
log.info("[CompleteTopologyEvent] Received: " + event.getClass());
- ApplicationHolder.acquireReadLock();
try {
+ ApplicationHolder.acquireReadLock();
Applications applications = ApplicationHolder.getApplications();
if (applications != null) {
for (Application application : applications.getApplications().values()) {
@@ -536,7 +536,7 @@ public class AutoscalerTopologyEventReceiver {
try {
long start = System.currentTimeMillis();
if (log.isDebugEnabled()) {
- log.debug("application monitor is going to be started for [application] " +
+ log.debug("Application monitor is going to be started for [application] " +
appId);
}
try {
http://git-wip-us.apache.org/repos/asf/stratos/blob/3b49fb84/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/MonitorFactory.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/MonitorFactory.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/MonitorFactory.java
index 264f440..3291ea9 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/MonitorFactory.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/MonitorFactory.java
@@ -99,9 +99,9 @@ public class MonitorFactory {
TopologyInConsistentException {
GroupMonitor groupMonitor;
boolean initialStartup = false;
- //acquiring read lock to create the monitor
- ApplicationHolder.acquireReadLock();
try {
+ //acquiring read lock to create the monitor
+ ApplicationHolder.acquireReadLock();
Group group = ApplicationHolder.getApplications().
getApplication(appId).getGroupRecursively(context.getId());
@@ -128,7 +128,6 @@ public class MonitorFactory {
}
} finally {
ApplicationHolder.releaseReadLock();
-
}
Group group = ApplicationHolder.getApplications().
@@ -158,33 +157,31 @@ public class MonitorFactory {
* This will create a new app monitor based on the give appId by getting the
* application from Topology
*
- * @param appId appId of the application which requires to create app monitor
+ * @param applicationId appId of the application which requires to create app monitor
* @return ApplicationMonitor
* @throws DependencyBuilderException throws while building dependency for app monitor
* @throws TopologyInConsistentException throws while traversing thr topology
*/
- public static ApplicationMonitor getApplicationMonitor(String appId)
+ public static ApplicationMonitor getApplicationMonitor(String applicationId)
throws DependencyBuilderException,
TopologyInConsistentException, PolicyValidationException {
ApplicationMonitor applicationMonitor;
- boolean initialStartup = false;
Application application;
- //acquiring read lock to start the monitor
- ApplicationHolder.acquireReadLock();
try {
- application = ApplicationHolder.getApplications().getApplication(appId);
+ //acquiring read lock to start the monitor
+ ApplicationHolder.acquireReadLock();
+ application = ApplicationHolder.getApplications().getApplication(applicationId);
if (application != null) {
applicationMonitor = new ApplicationMonitor(application);
applicationMonitor.setHasStartupDependents(false);
} else {
- String msg = "[Application] " + appId + " cannot be found in the Topology";
+ String msg = "Application not found in the topology: [application-id] " + applicationId;
throw new TopologyInConsistentException(msg);
}
} finally {
ApplicationHolder.releaseReadLock();
-
}
applicationMonitor.startMinimumDependencies(application);
@@ -202,7 +199,6 @@ public class MonitorFactory {
}*/
return applicationMonitor;
-
}
/**
http://git-wip-us.apache.org/repos/asf/stratos/blob/3b49fb84/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
index 0b2c21f..f69a05a 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
@@ -136,8 +136,8 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
// notify parent
log.info("[Group] " + this.id + "is notifying the [parent] " + this.parent.getId());
if (this.isGroupScalingEnabled()) {
- ApplicationHolder.acquireReadLock();
try {
+ ApplicationHolder.acquireReadLock();
Application application = ApplicationHolder.getApplications().
getApplication(this.appId);
if (application != null) {
@@ -148,7 +148,6 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
GroupInstance context = group.getInstanceContexts(instanceId);
MonitorStatusEventBuilder.handleGroupStatusEvent(this.parent,
status, this.id, context.getParentId());
-
}
}
} finally {
http://git-wip-us.apache.org/repos/asf/stratos/blob/3b49fb84/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 16e8330..e9f20c9 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
@@ -453,8 +453,8 @@ public abstract class ParentComponentMonitor extends Monitor {
if (monitor instanceof GroupMonitor) {
GroupMonitor monitor1 = (GroupMonitor) monitor;
- ApplicationHolder.acquireReadLock();
try {
+ ApplicationHolder.acquireReadLock();
if (monitor1.verifyGroupStatus(instanceId, GroupStatus.Active)) {
parentsActive = true;
http://git-wip-us.apache.org/repos/asf/stratos/blob/3b49fb84/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusTerminatedProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusTerminatedProcessor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusTerminatedProcessor.java
index 3cf5121..1d0b82e 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusTerminatedProcessor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusTerminatedProcessor.java
@@ -103,8 +103,6 @@ public class ClusterStatusTerminatedProcessor extends ClusterStatusProcessor {
}
}
}
-
-
} finally {
TopologyManager.releaseReadLockForCluster(monitor.getServiceId(), monitor.getClusterId());
http://git-wip-us.apache.org/repos/asf/stratos/blob/3b49fb84/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
index 7c8dd2d..144d062 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
@@ -411,8 +411,7 @@ public class AutoscalerUtil {
}*/
try {
long start = System.currentTimeMillis();
- log.info("application monitor is going to be started for [application] " +
- appId);
+ log.info("Application monitor is going to be started for [application] " + appId);
try {
applicationMonitor = MonitorFactory.getApplicationMonitor(appId);
} catch (PolicyValidationException e) {