You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by re...@apache.org on 2014/12/03 13:47:42 UTC
[1/4] stratos git commit: fixing instance id handling in processor
and improving monitor startup to check whether clusters are there
Repository: stratos
Updated Branches:
refs/heads/master 412d5c8da -> b59adf8f9
fixing instance id handling in processor and improving monitor startup to check whether clusters are there
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/95dd1542
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/95dd1542
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/95dd1542
Branch: refs/heads/master
Commit: 95dd15426542dfc114afc39c87f26542e6311808
Parents: 563fd43
Author: reka <rt...@gmail.com>
Authored: Wed Dec 3 17:53:24 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Wed Dec 3 17:53:35 2014 +0530
----------------------------------------------------------------------
.../autoscaler/api/AutoScalerServiceImpl.java | 1 +
.../autoscaler/context/AutoscalerContext.java | 2 ++
.../ClusterLevelNetworkPartitionContext.java | 7 +++-
.../monitor/cluster/VMClusterMonitor.java | 4 ++-
.../monitor/component/ApplicationMonitor.java | 31 ++++++++----------
.../monitor/component/GroupMonitor.java | 34 ++++++--------------
.../ClusterStatusTerminatedProcessor.java | 19 ++++++-----
7 files changed, 47 insertions(+), 51 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/95dd1542/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 8270ab0..5fc9a3a 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
@@ -123,6 +123,7 @@ public class AutoScalerServiceImpl implements AutoScalerServiceInterface {
Application application = ApplicationHolder.getApplications().
getApplication(deploymentPolicy.getApplicationId());
if(application != null) {
+
allClusterInitialized = AutoscalerUtil.allClustersInitialized(application);
}
} finally {
http://git-wip-us.apache.org/repos/asf/stratos/blob/95dd1542/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/AutoscalerContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/AutoscalerContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/AutoscalerContext.java
index ca6efb4..51fad05 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/AutoscalerContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/AutoscalerContext.java
@@ -20,6 +20,7 @@
*/
package org.apache.stratos.autoscaler.context;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -44,6 +45,7 @@ public class AutoscalerContext {
private AutoscalerContext() {
setClusterMonitors(new HashMap<String, AbstractClusterMonitor>());
setApplicationMonitors(new HashMap<String, ApplicationMonitor>());
+ pendingApplicationMonitors = new ArrayList<String>();
}
public static AutoscalerContext getInstance() {
http://git-wip-us.apache.org/repos/asf/stratos/blob/95dd1542/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ClusterLevelNetworkPartitionContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ClusterLevelNetworkPartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ClusterLevelNetworkPartitionContext.java
index 45dd636..036228d 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ClusterLevelNetworkPartitionContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ClusterLevelNetworkPartitionContext.java
@@ -103,10 +103,15 @@ public class ClusterLevelNetworkPartitionContext extends NetworkPartitionContext
return instanceIdToClusterInstanceContextMap;
}
- public void setInstanceIdToClusterInstanceContextMap(Map<String, ClusterInstanceContext> instanceIdToClusterInstanceContextMap) {
+ public void setInstanceIdToClusterInstanceContextMap(
+ Map<String, ClusterInstanceContext> instanceIdToClusterInstanceContextMap) {
this.instanceIdToClusterInstanceContextMap = instanceIdToClusterInstanceContextMap;
}
+ public boolean containsClusterInstanceContext(String instanceId) {
+ return this.instanceIdToClusterInstanceContextMap.containsKey(instanceId);
+ }
+
public int getMin() {
return min;
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/95dd1542/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
index 5162d4c..e55377b 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
@@ -34,6 +34,7 @@ import org.apache.stratos.autoscaler.monitor.events.MonitorScalingEvent;
import org.apache.stratos.autoscaler.monitor.events.MonitorStatusEvent;
import org.apache.stratos.autoscaler.monitor.events.builder.MonitorStatusEventBuilder;
import org.apache.stratos.autoscaler.rule.AutoscalerRuleEvaluator;
+import org.apache.stratos.autoscaler.status.processor.cluster.ClusterStatusTerminatedProcessor;
import org.apache.stratos.autoscaler.util.StatusChecker;
import org.apache.stratos.autoscaler.status.processor.cluster.ClusterStatusActiveProcessor;
import org.apache.stratos.autoscaler.status.processor.cluster.ClusterStatusInActiveProcessor;
@@ -916,7 +917,8 @@ public class VMClusterMonitor extends AbstractClusterMonitor {
+ "[member] %s", memberId));
}
//Checking whether the cluster state can be changed either from in_active to created/terminating to terminated
- StatusChecker.getInstance().onMemberTermination(clusterId, instanceId);
+ ServiceReferenceHolder.getInstance().getClusterStatusProcessorChain().process(
+ ClusterStatusTerminatedProcessor.class.getName(), clusterId, instanceId);
}
@Override
http://git-wip-us.apache.org/repos/asf/stratos/blob/95dd1542/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 e174560..ca70ba5 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
@@ -36,10 +36,12 @@ import org.apache.stratos.autoscaler.monitor.events.builder.MonitorStatusEventBu
import org.apache.stratos.autoscaler.pojo.policy.PolicyManager;
import org.apache.stratos.autoscaler.pojo.policy.deployment.DeploymentPolicy;
import org.apache.stratos.autoscaler.pojo.policy.deployment.partition.network.ApplicationLevelNetworkPartition;
+import org.apache.stratos.autoscaler.util.ServiceReferenceHolder;
import org.apache.stratos.messaging.domain.applications.Application;
import org.apache.stratos.messaging.domain.applications.ApplicationStatus;
import org.apache.stratos.messaging.domain.applications.GroupStatus;
import org.apache.stratos.messaging.domain.instance.ApplicationInstance;
+import org.apache.stratos.messaging.domain.instance.GroupInstance;
import org.apache.stratos.messaging.domain.topology.ClusterStatus;
import org.apache.stratos.messaging.domain.topology.lifecycle.LifeCycleState;
@@ -137,18 +139,6 @@ public class ApplicationMonitor extends ParentComponentMonitor {
//mark the child monitor as inActive in the map
this.markMonitorAsTerminating(id);
- } else if (status1 == ClusterStatus.Created || status1 == GroupStatus.Created) {
- if (this.terminatingMonitorsList.contains(id)) {
- this.terminatingMonitorsList.remove(id);
- this.aliasToActiveMonitorsMap.remove(id);
- }
- //TODO
- /*if (this.status == ApplicationStatus.Terminating) {
- StatusChecker.getInstance().onChildStatusChange(id, this.id, this.appId);
- } else {
- onChildTerminatedEvent(id);
- }*/
-
} else if (status1 == ClusterStatus.Terminated || status1 == GroupStatus.Terminated) {
//Check whether all dependent goes Terminated and then start them in parallel.
if (this.terminatingMonitorsList.contains(id)) {
@@ -157,11 +147,18 @@ public class ApplicationMonitor extends ParentComponentMonitor {
} else {
log.warn("[monitor] " + id + " cannot be found in the inActive monitors list");
}
- //TODO
- /*if (this.status == ApplicationStatus.Terminating || this.status == ApplicationStatus.Terminated) {
- StatusChecker.getInstance().onChildStatusChange(id, this.id, this.appId);
- log.info("Executing the un-subscription request for the [monitor] " + id);
- }*/
+ ApplicationInstance instance = (ApplicationInstance)instanceIdToInstanceMap.get(instanceId);
+ if (instance != null) {
+ if(instance.getStatus() == ApplicationStatus.Terminating) {
+ ServiceReferenceHolder.getInstance().getGroupStatusProcessorChain().process(this.id,
+ appId, instanceId);
+ } else {
+ onChildTerminatedEvent(id, instanceId);
+ }
+ } else {
+ log.warn("The required instance cannot be found in the the [GroupMonitor] " +
+ this.id);
+ }
}
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/95dd1542/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 63d0295..2334916 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
@@ -181,14 +181,6 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
this.markMonitorAsInactive(instanceId);
onChildInactiveEvent(id, instanceId);
- } else if (status1 == ClusterStatus.Created || status1 == GroupStatus.Created) {
- if (this.terminatingMonitorsList.contains(instanceId)) {
- this.terminatingMonitorsList.remove(instanceId);
- this.aliasToActiveMonitorsMap.remove(instanceId);
- if (AutoscalerContext.getInstance().getClusterMonitors().containsKey(id)) {
- AutoscalerContext.getInstance().removeClusterMonitor(id);
- }
- }
} else if (status1 == ClusterStatus.Terminating || status1 == GroupStatus.Terminating) {
//mark the child monitor as inActive in the map
this.markMonitorAsTerminating(instanceId);
@@ -201,23 +193,17 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
} else {
log.warn("[monitor] " + id + " cannot be found in the inActive monitors list");
}
- //If cluster monitor, need to terminate the existing one
- ApplicationHolder.releaseReadLock();
- GroupStatus instanceStatus;
- try {
- Group group = ApplicationHolder.getApplications().
- getApplication(appId).getGroupRecursively(this.id);
- instanceStatus = group.getInstanceContexts(instanceId).getStatus();
-
- } finally {
- ApplicationHolder.releaseReadLock();
- }
-
- if (instanceStatus == GroupStatus.Terminating) {
- ServiceReferenceHolder.getInstance().getGroupStatusProcessorChain().process(this.id,
- appId, instanceId);
+ GroupInstance instance = (GroupInstance)this.instanceIdToInstanceMap.get(instanceId);
+ if (instance != null) {
+ if(instance.getStatus() == GroupStatus.Terminating) {
+ ServiceReferenceHolder.getInstance().getGroupStatusProcessorChain().process(this.id,
+ appId, instanceId);
+ } else {
+ onChildTerminatedEvent(id, instanceId);
+ }
} else {
- onChildTerminatedEvent(id, instanceId);
+ log.warn("The required instance cannot be found in the the [GroupMonitor] " +
+ this.id);
}
}
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/95dd1542/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 00abe34..52b5f36 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
@@ -71,7 +71,7 @@ public class ClusterStatusTerminatedProcessor extends ClusterStatusProcessor {
private boolean doProcess(String clusterId, String instanceId) {
VMClusterMonitor monitor = (VMClusterMonitor) AutoscalerContext.getInstance().
getClusterMonitor(clusterId);
- boolean clusterMonitorHasMembers = clusterMonitorHasMembers(monitor);
+ boolean clusterMonitorHasMembers = clusterInstanceHasMembers(monitor, instanceId);
boolean clusterTerminated = false;
try {
TopologyManager.acquireReadLockForCluster(monitor.getServiceId(), monitor.getClusterId());
@@ -83,10 +83,11 @@ public class ClusterStatusTerminatedProcessor extends ClusterStatusProcessor {
if (cluster != null) {
try {
ApplicationHolder.acquireReadLock();
- Application application = ApplicationHolder.getApplications().getApplication(appId);
- //if all members removed from the cluster and cluster is in terminating,
- // either it has to be terminated or Reset
- if (!clusterMonitorHasMembers && cluster.getStatus(null) == ClusterStatus.Terminating) {
+ /**
+ * if all members removed from the cluster and cluster is in terminating,
+ * either it has to be terminated or Reset
+ */
+ if (!clusterMonitorHasMembers) {
if (log.isInfoEnabled()) {
log.info("Publishing Cluster terminated event for [application]: " + appId +
" [cluster]: " + clusterId);
@@ -119,17 +120,19 @@ public class ClusterStatusTerminatedProcessor extends ClusterStatusProcessor {
* @param monitor the cluster monitor
* @return whether has members or not
*/
- private boolean clusterMonitorHasMembers(VMClusterMonitor monitor) {
+ private boolean clusterInstanceHasMembers(VMClusterMonitor monitor, String instanceId) {
boolean hasMember = false;
for (ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext :
monitor.getAllNetworkPartitionCtxts().values()) {
//minimum check per partition
- for(ClusterInstanceContext clusterInstanceContext :
- clusterLevelNetworkPartitionContext.getClusterInstanceContextMap().values()) {
+ if(clusterLevelNetworkPartitionContext.containsClusterInstanceContext(instanceId)) {
+ ClusterInstanceContext clusterInstanceContext = clusterLevelNetworkPartitionContext.
+ getClusterInstanceContext(instanceId);
for (ClusterLevelPartitionContext partitionContext :
clusterInstanceContext.getPartitionCtxts()) {
if (partitionContext.getNonTerminatedMemberCount() > 0) {
hasMember = true;
+ return hasMember;
} else {
hasMember = false;
}
[3/4] stratos git commit: udpating with correct terminology
Posted by re...@apache.org.
udpating with correct terminology
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/bf2c6720
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/bf2c6720
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/bf2c6720
Branch: refs/heads/master
Commit: bf2c672071e69e653a3a2f39af24e8db603b9e9f
Parents: 412d5c8
Author: reka <rt...@gmail.com>
Authored: Wed Dec 3 15:16:49 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Wed Dec 3 17:53:35 2014 +0530
----------------------------------------------------------------------
.../org/apache/stratos/rest/endpoint/api/StratosApiV41.java | 9 ++++-----
.../stratos/rest/endpoint/api/StratosApiV41Utils.java | 6 +++---
2 files changed, 7 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/bf2c6720/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 4be676d..a8eab46 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
@@ -42,7 +42,6 @@ import org.apache.stratos.rest.endpoint.bean.ApplicationBean;
import org.apache.stratos.rest.endpoint.bean.CartridgeInfoBean;
import org.apache.stratos.rest.endpoint.bean.StratosApiResponse;
import org.apache.stratos.rest.endpoint.bean.SubscriptionDomainRequest;
-import org.apache.stratos.rest.endpoint.bean.autoscaler.partition.Partition;
import org.apache.stratos.rest.endpoint.bean.autoscaler.policy.autoscale.AutoscalePolicy;
import org.apache.stratos.rest.endpoint.bean.autoscaler.policy.deployment.DeploymentPolicy;
import org.apache.stratos.rest.endpoint.bean.cartridge.definition.CartridgeDefinitionBean;
@@ -330,8 +329,8 @@ public class StratosApiV41 extends AbstractApi {
@Produces("application/json")
@Consumes("application/json")
@AuthorizationAction("/permission/admin/manage/add/cartridgeDefinition")
- public Response unDeployDeploymentPolicy(@PathParam("applicationId") String applicationId) throws RestAPIException {
- StratosApiV41Utils.undeployDeploymentPolicy(applicationId);
+ public Response unDeployApplication(@PathParam("applicationId") String applicationId) throws RestAPIException {
+ StratosApiV41Utils.undeployApplication(applicationId);
return Response.noContent().build();
}
@@ -510,9 +509,9 @@ public class StratosApiV41 extends AbstractApi {
@Consumes("application/json")
@AuthorizationAction("/permission/protected/manage/monitor/tenants")
@SuperTenantService(true)
- public Response unDeployApplicationDefinition(@PathParam("applicationId") String applicationId)
+ public Response removeApplicationDefinition(@PathParam("applicationId") String applicationId)
throws RestAPIException {
- StratosApiV41Utils.unDeployApplication(applicationId, getConfigContext(), getUsername(),
+ StratosApiV41Utils.removeApplication(applicationId, getConfigContext(), getUsername(),
getTenantDomain());
return Response.noContent().build();
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/bf2c6720/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 02d23bf..08ef896 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
@@ -201,8 +201,8 @@ public class StratosApiV41Utils {
}
}
- public static void unDeployApplication(String appId, ConfigurationContext ctxt,
- String userName, String tenantDomain) throws RestAPIException {
+ public static void removeApplication(String appId, ConfigurationContext ctxt,
+ String userName, String tenantDomain) throws RestAPIException {
try {
int tenantId = ApplicationManagementUtil.getTenantId(ctxt);
@@ -237,7 +237,7 @@ public class StratosApiV41Utils {
return commonPolicies.toArray(new DeploymentPolicy[0]);
}
- public static void undeployDeploymentPolicy(String applicationId) throws RestAPIException {
+ public static void undeployApplication(String applicationId) throws RestAPIException {
AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient();
if (autoscalerServiceClient != null) {
try {
[4/4] stratos git commit: fixing NPE while instance creation
Posted by re...@apache.org.
fixing NPE while instance creation
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/b59adf8f
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/b59adf8f
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/b59adf8f
Branch: refs/heads/master
Commit: b59adf8f90f73cf69a016f11e1cd4e9c81c0572d
Parents: 95dd154
Author: reka <rt...@gmail.com>
Authored: Wed Dec 3 18:17:08 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Wed Dec 3 18:17:08 2014 +0530
----------------------------------------------------------------------
.../autoscaler/api/AutoScalerServiceImpl.java | 21 ++++++++++----------
.../AutoscalerTopologyEventReceiver.java | 10 ++++++----
2 files changed, 17 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/b59adf8f/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 5fc9a3a..7733520 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
@@ -22,14 +22,14 @@ 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.context.AutoscalerContext;
-//import org.apache.stratos.autoscaler.NetworkPartitionLbHolder;
import org.apache.stratos.autoscaler.applications.parser.ApplicationParser;
import org.apache.stratos.autoscaler.applications.parser.DefaultApplicationParser;
import org.apache.stratos.autoscaler.applications.pojo.ApplicationContext;
import org.apache.stratos.autoscaler.applications.topic.ApplicationBuilder;
import org.apache.stratos.autoscaler.client.CloudControllerClient;
-import org.apache.stratos.autoscaler.exception.*;
+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.kubernetes.*;
import org.apache.stratos.autoscaler.exception.partition.PartitionValidationException;
@@ -37,13 +37,12 @@ import org.apache.stratos.autoscaler.exception.policy.InvalidPolicyException;
import org.apache.stratos.autoscaler.interfaces.AutoScalerServiceInterface;
import org.apache.stratos.autoscaler.kubernetes.KubernetesManager;
import org.apache.stratos.autoscaler.monitor.cluster.AbstractClusterMonitor;
-import org.apache.stratos.autoscaler.pojo.policy.deployment.partition.network.ApplicationLevelNetworkPartition;
-//import org.apache.stratos.autoscaler.pojo.policy.deployment.partition.PartitionManager;
import org.apache.stratos.autoscaler.pojo.Dependencies;
import org.apache.stratos.autoscaler.pojo.ServiceGroup;
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.DeploymentPolicy;
+import org.apache.stratos.autoscaler.pojo.policy.deployment.partition.network.ApplicationLevelNetworkPartition;
import org.apache.stratos.autoscaler.pojo.policy.deployment.partition.network.Partition;
import org.apache.stratos.autoscaler.registry.RegistryManager;
import org.apache.stratos.autoscaler.util.AutoscalerUtil;
@@ -53,7 +52,6 @@ import org.apache.stratos.common.kubernetes.KubernetesGroup;
import org.apache.stratos.common.kubernetes.KubernetesHost;
import org.apache.stratos.common.kubernetes.KubernetesMaster;
import org.apache.stratos.messaging.domain.applications.Application;
-import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
import org.apache.stratos.metadata.client.defaults.DefaultMetaDataServiceClient;
import org.apache.stratos.metadata.client.defaults.MetaDataServiceClient;
import org.apache.stratos.metadata.client.exception.MetaDataServiceClientException;
@@ -63,13 +61,16 @@ import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Map;
+//import org.apache.stratos.autoscaler.NetworkPartitionLbHolder;
+//import org.apache.stratos.autoscaler.pojo.policy.deployment.partition.PartitionManager;
+
/**
* Auto Scaler Service API is responsible getting Partitions and Policies.
*/
public class AutoScalerServiceImpl implements AutoScalerServiceInterface {
private static final Log log = LogFactory.getLog(AutoScalerServiceImpl.class);
-// PartitionManager partitionManager = PartitionManager.getInstance();
+ // PartitionManager partitionManager = PartitionManager.getInstance();
KubernetesManager kubernetesManager = KubernetesManager.getInstance();
//
// public Partition[] getAllAvailablePartitions() {
@@ -122,7 +123,7 @@ public class AutoScalerServiceImpl implements AutoScalerServiceInterface {
try {
Application application = ApplicationHolder.getApplications().
getApplication(deploymentPolicy.getApplicationId());
- if(application != null) {
+ if (application != null) {
allClusterInitialized = AutoscalerUtil.allClustersInitialized(application);
}
@@ -130,7 +131,7 @@ public class AutoScalerServiceImpl implements AutoScalerServiceInterface {
ApplicationHolder.releaseReadLock();
}
- if(allClusterInitialized && !AutoscalerContext.getInstance().containsPendingMonitor(appId)) {
+ if (allClusterInitialized && !AutoscalerContext.getInstance().containsPendingMonitor(appId)) {
AutoscalerUtil.getInstance().
startApplicationMonitor(appId);
@@ -244,7 +245,7 @@ public class AutoScalerServiceImpl implements AutoScalerServiceInterface {
return kubernetesManager.updateKubernetesHost(kubernetesHost);
}
-// @Override
+ // @Override
public Partition[] getPartitionsOfGroup(String deploymentPolicyId, String groupId) {
DeploymentPolicy depPol = this.getDeploymentPolicy(deploymentPolicyId);
if (null == depPol) {
http://git-wip-us.apache.org/repos/asf/stratos/blob/b59adf8f/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 89e711f..6251d18 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
@@ -23,6 +23,7 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.stratos.autoscaler.applications.ApplicationHolder;
import org.apache.stratos.autoscaler.context.AutoscalerContext;
+import org.apache.stratos.autoscaler.context.cluster.AbstractClusterContext;
import org.apache.stratos.autoscaler.context.cluster.ClusterContextFactory;
import org.apache.stratos.autoscaler.context.cluster.VMClusterContext;
import org.apache.stratos.autoscaler.event.publisher.ClusterStatusEventPublisher;
@@ -441,10 +442,11 @@ public class AutoscalerTopologyEventReceiver {
VMClusterContext clusterContext =
(VMClusterContext) clusterMonitor.getClusterContext();
if (clusterContext == null) {
- clusterMonitor.setClusterContext(
- ClusterContextFactory.
- getVMClusterContext(instanceId,
- cluster));
+ clusterContext = ClusterContextFactory.
+ getVMClusterContext(instanceId,
+ cluster);
+ clusterMonitor.setClusterContext(clusterContext);
+
}
clusterContext.addInstanceContext(instanceId, cluster);
if(clusterMonitor.getInstance(instanceId) == null) {
[2/4] stratos git commit: improving the application monitor creation
based on clusters event as well as it is async
Posted by re...@apache.org.
improving the application monitor creation based on clusters event as well as it is async
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/563fd434
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/563fd434
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/563fd434
Branch: refs/heads/master
Commit: 563fd4347f06282b7f1b27a54d05bb83024d3103
Parents: bf2c672
Author: reka <rt...@gmail.com>
Authored: Wed Dec 3 15:17:25 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Wed Dec 3 17:53:35 2014 +0530
----------------------------------------------------------------------
.../autoscaler/api/AutoScalerServiceImpl.java | 10 ++--
.../autoscaler/context/AutoscalerContext.java | 23 +++++++++
.../AutoscalerTopologyEventReceiver.java | 51 +++-----------------
.../stratos/autoscaler/util/AutoscalerUtil.java | 12 +++--
4 files changed, 42 insertions(+), 54 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/563fd434/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 5593e1f..8270ab0 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
@@ -114,31 +114,29 @@ public class AutoScalerServiceImpl implements AutoScalerServiceInterface {
public String addDeploymentPolicy(DeploymentPolicy deploymentPolicy) throws InvalidPolicyException {
String policyId = PolicyManager.getInstance().deployDeploymentPolicy(deploymentPolicy);
//Need to start the application Monitor after validation of the deployment policies.
-
+ //FIXME add validation
//Check whether all the clusters are there
ApplicationHolder.acquireReadLock();
boolean allClusterInitialized = false;
-
+ String appId = deploymentPolicy.getApplicationId();
try {
Application application = ApplicationHolder.getApplications().
getApplication(deploymentPolicy.getApplicationId());
if(application != null) {
allClusterInitialized = AutoscalerUtil.allClustersInitialized(application);
}
-
} finally {
ApplicationHolder.releaseReadLock();
}
- if(allClusterInitialized) {
+ if(allClusterInitialized && !AutoscalerContext.getInstance().containsPendingMonitor(appId)) {
AutoscalerUtil.getInstance().
- startApplicationMonitor(deploymentPolicy.getApplicationId());
+ startApplicationMonitor(appId);
} else {
log.info("The application clusters are not yet created. " +
"Waiting for them to be created");
}
-
return policyId;
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/563fd434/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/AutoscalerContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/AutoscalerContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/AutoscalerContext.java
index fe067f7..ca6efb4 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/AutoscalerContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/AutoscalerContext.java
@@ -21,6 +21,7 @@
package org.apache.stratos.autoscaler.context;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import org.apache.stratos.autoscaler.monitor.component.ApplicationMonitor;
@@ -37,6 +38,8 @@ public class AutoscalerContext {
private Map<String, AbstractClusterMonitor> clusterMonitors;
// Map<ApplicationId, ApplicationMonitor>
private Map<String, ApplicationMonitor> applicationMonitors;
+ //pending application monitors
+ private List<String> pendingApplicationMonitors;
private AutoscalerContext() {
setClusterMonitors(new HashMap<String, AbstractClusterMonitor>());
@@ -86,4 +89,24 @@ public class AutoscalerContext {
public void setApplicationMonitors(Map<String, ApplicationMonitor> applicationMonitors) {
this.applicationMonitors = applicationMonitors;
}
+
+ public List<String> getPendingApplicationMonitors() {
+ return pendingApplicationMonitors;
+ }
+
+ public void setPendingApplicationMonitors(List<String> pendingApplicationMonitors) {
+ this.pendingApplicationMonitors = pendingApplicationMonitors;
+ }
+
+ public void addPendingMonitor(String appId) {
+ this.pendingApplicationMonitors.add(appId);
+ }
+
+ public void removeFromPendingMonitors(String appId) {
+ this.pendingApplicationMonitors.remove(appId);
+ }
+
+ public boolean containsPendingMonitor(String appId) {
+ return this.pendingApplicationMonitors.contains(appId);
+ }
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/563fd434/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 10eee4f..89e711f 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
@@ -84,46 +84,6 @@ public class AutoscalerTopologyEventReceiver {
}
- private boolean allClustersInitialized(Application application) {
- boolean allClustersInitialized = false;
- for (ClusterDataHolder holder : application.getClusterDataRecursively()) {
- TopologyManager.acquireReadLockForCluster(holder.getServiceType(),
- holder.getClusterId());
-
- try {
- Topology topology = TopologyManager.getTopology();
- if (topology != null) {
- Service service = topology.getService(holder.getServiceType());
- if (service != null) {
- if (service.clusterExists(holder.getClusterId())) {
- allClustersInitialized = true;
- return allClustersInitialized;
- } else {
- if (log.isDebugEnabled()) {
- log.debug("[Cluster] " + holder.getClusterId() + " is not found in " +
- "the Topology");
- }
- allClustersInitialized = false;
- }
- } else {
- if (log.isDebugEnabled()) {
- log.debug("Service is null in the CompleteTopologyEvent");
- }
- }
- } else {
- if (log.isDebugEnabled()) {
- log.debug("Topology is null in the CompleteTopologyEvent");
- }
- }
- } finally {
- TopologyManager.releaseReadLockForCluster(holder.getServiceType(),
- holder.getClusterId());
- }
- }
- return allClustersInitialized;
- }
-
-
private void addEventListeners() {
// Listen to topology events that affect clusters
topologyEventReceiver.addEventListener(new CompleteTopologyEventListener() {
@@ -136,7 +96,7 @@ public class AutoscalerTopologyEventReceiver {
Applications applications = ApplicationHolder.getApplications();
if (applications != null) {
for (Application application : applications.getApplications().values()) {
- if (allClustersInitialized(application)) {
+ if (AutoscalerUtil.allClustersInitialized(application)) {
DeploymentPolicy policy = PolicyManager.getInstance().
getDeploymentPolicyByApplication(
application.getUniqueIdentifier());
@@ -178,8 +138,13 @@ public class AutoscalerTopologyEventReceiver {
try {
//acquire read lock
ApplicationHolder.acquireReadLock();
- //start the application monitor
- //startApplicationMonitor(appId);
+ //start the application monitor if the policy exists
+ DeploymentPolicy policy = PolicyManager.getInstance().
+ getDeploymentPolicyByApplication(appId);
+ if(policy != null && !AutoscalerContext.getInstance().
+ containsPendingMonitor(appId)) {
+ AutoscalerUtil.getInstance().startApplicationMonitor(appId);
+ }
} catch (Exception e) {
String msg = "Error processing event " + e.getLocalizedMessage();
log.error(msg, e);
http://git-wip-us.apache.org/repos/asf/stratos/blob/563fd434/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 476e8bb..2ed1074 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
@@ -351,7 +351,9 @@ public class AutoscalerUtil {
public synchronized void startApplicationMonitor(String applicationId) {
Thread th = null;
- if (AutoscalerContext.getInstance().getAppMonitor(applicationId) == null) {
+ AutoscalerContext autoscalerContext = AutoscalerContext.getInstance();
+ if (autoscalerContext.getAppMonitor(applicationId) == null) {
+ autoscalerContext.addPendingMonitor(applicationId);
th = new Thread(new ApplicationMonitorAdder(applicationId));
}
if (th != null) {
@@ -383,10 +385,8 @@ public class AutoscalerUtil {
}
try {
long start = System.currentTimeMillis();
- if (log.isDebugEnabled()) {
- log.debug("application monitor is going to be started for [application] " +
+ log.info("application monitor is going to be started for [application] " +
appId);
- }
try {
applicationMonitor = MonitorFactory.getApplicationMonitor(appId);
} catch (PolicyValidationException e) {
@@ -414,8 +414,10 @@ public class AutoscalerUtil {
log.error(msg);
throw new RuntimeException(msg);
}
+ AutoscalerContext autoscalerContext = AutoscalerContext.getInstance();
- AutoscalerContext.getInstance().addAppMonitor(applicationMonitor);
+ autoscalerContext.removeAppMonitor(appId);
+ autoscalerContext.addAppMonitor(applicationMonitor);
if (log.isInfoEnabled()) {
log.info(String.format("Application monitor has been added successfully: " +
"[application] %s", applicationMonitor.getId()));