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/06 21:02:01 UTC
stratos git commit: fixing status calculation issue for groups and
fixing restart of monitor hierarchy
Repository: stratos
Updated Branches:
refs/heads/master bebed8056 -> 8d9632f89
fixing status calculation issue for groups and fixing restart of monitor hierarchy
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/8d9632f8
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/8d9632f8
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/8d9632f8
Branch: refs/heads/master
Commit: 8d9632f894bff150db6e54684cea2fb90f1330fe
Parents: bebed80
Author: reka <rt...@gmail.com>
Authored: Sun Dec 7 01:31:44 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Sun Dec 7 01:31:44 2014 +0530
----------------------------------------------------------------------
.../applications/topic/ApplicationBuilder.java | 163 ++++++++++---------
.../autoscaler/monitor/MonitorFactory.java | 78 ++++-----
.../monitor/component/GroupMonitor.java | 35 +++-
.../component/ParentComponentMonitor.java | 21 ++-
.../stratos/autoscaler/util/AutoscalerUtil.java | 8 +-
.../domain/applications/ParentComponent.java | 77 +++++----
6 files changed, 207 insertions(+), 175 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/8d9632f8/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 63d8ab9..27457f4 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
@@ -20,10 +20,10 @@ package org.apache.stratos.autoscaler.applications.topic;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.autoscaler.context.AutoscalerContext;
import org.apache.stratos.autoscaler.applications.ApplicationHolder;
import org.apache.stratos.autoscaler.applications.pojo.ApplicationClusterContext;
import org.apache.stratos.autoscaler.client.CloudControllerClient;
+import org.apache.stratos.autoscaler.context.AutoscalerContext;
import org.apache.stratos.autoscaler.event.publisher.ClusterStatusEventPublisher;
import org.apache.stratos.autoscaler.monitor.component.ApplicationMonitor;
import org.apache.stratos.autoscaler.monitor.component.GroupMonitor;
@@ -82,35 +82,38 @@ public class ApplicationBuilder {
}
public static ApplicationInstance handleApplicationInstanceCreatedEvent(String appId, String instanceId,
- String networkPartitionId) {
+ String networkPartitionId) {
if (log.isDebugEnabled()) {
log.debug("Handling application activation event: [application-id] " + appId);
}
-
- Applications applications = ApplicationHolder.getApplications();
- Application application = applications.getApplication(appId);
- //update the status of the Group
- if (application == null) {
- log.warn(String.format("Application does not exist: [application-id] %s",
- appId));
- return null;
- }
-
- ApplicationStatus status = ApplicationStatus.Created;
ApplicationInstance applicationInstance = null;
+ //acquiring write lock to add the required instances
+ ApplicationHolder.acquireWriteLock();
+ try {
- if (!application.containsInstanceContext(instanceId)) {
- //setting the status, persist and publish
- applicationInstance = new ApplicationInstance(appId, instanceId);
- applicationInstance.setStatus(status);
- applicationInstance.setNetworkPartitionId(networkPartitionId);
- application.addInstance(instanceId, applicationInstance);
- //updateApplicationMonitor(appId, status);
- ApplicationHolder.persistApplication(application);
- ApplicationsEventPublisher.sendApplicationInstanceCreatedEvent(appId, applicationInstance);
- } else {
- log.warn(String.format("Application Instance Context already exists" +
- " [appId] %s [ApplicationInstanceId] %s", appId, instanceId));
+ Applications applications = ApplicationHolder.getApplications();
+ Application application = applications.getApplication(appId);
+ //update the status of the Group
+ if (application == null) {
+ log.warn(String.format("Application does not exist: [application-id] %s",
+ appId));
+ return null;
+ }
+
+ if (!application.containsInstanceContext(instanceId)) {
+ //setting the status, persist and publish
+ applicationInstance = new ApplicationInstance(appId, instanceId);
+ applicationInstance.setNetworkPartitionId(networkPartitionId);
+ application.addInstance(instanceId, applicationInstance);
+ //updateApplicationMonitor(appId, status);
+ ApplicationHolder.persistApplication(application);
+ ApplicationsEventPublisher.sendApplicationInstanceCreatedEvent(appId, applicationInstance);
+ } else {
+ log.warn(String.format("Application Instance Context already exists" +
+ " [appId] %s [ApplicationInstanceId] %s", appId, instanceId));
+ }
+ } finally {
+ ApplicationHolder.releaseWriteLock();
}
return applicationInstance;
}
@@ -139,7 +142,7 @@ public class ApplicationBuilder {
ApplicationsEventPublisher.sendApplicationInstanceActivatedEvent(appId, instanceId);
} else {
log.warn(String.format("Application state transition is not valid: [application-id] %s " +
- " [instance-id] %s [current-status] %s [status-requested] %s",
+ " [instance-id] %s [current-status] %s [status-requested] %s",
appId, instanceId, context.getStatus(), status));
}
}
@@ -161,7 +164,7 @@ public class ApplicationBuilder {
} else {
org.apache.stratos.autoscaler.pojo.policy.deployment.DeploymentPolicy policy =
PolicyManager.getInstance().getDeploymentPolicyByApplication(appId);
- if(policy != null) {
+ if (policy != null) {
log.warn(String.format("Application has been found in the ApplicationsTopology" +
": [application-id] %s, Please unDeploy the Application Policy.",
appId));
@@ -223,11 +226,11 @@ public class ApplicationBuilder {
if (service != null) {
Cluster cluster = service.getCluster(aClusterData.getClusterId());
if (cluster != null) {
- for(ClusterInstance instance : cluster.getInstanceIdToInstanceContextMap().values()) {
+ for (ClusterInstance instance : cluster.getInstanceIdToInstanceContextMap().values()) {
ClusterStatusEventPublisher.sendClusterTerminatingEvent(appId,
- aClusterData.getServiceType(),
- aClusterData.getClusterId(),
- instance.getInstanceId());
+ aClusterData.getServiceType(),
+ aClusterData.getClusterId(),
+ instance.getInstanceId());
}
}
}
@@ -253,22 +256,25 @@ public class ApplicationBuilder {
} else {
Application application = applications.getApplication(appId);
Set<ClusterDataHolder> clusterData = application.getClusterDataRecursively();
-
+ ApplicationInstance instance = application.getInstanceContexts(instanceId);
ApplicationStatus status = ApplicationStatus.Terminated;
- if (application.isStateTransitionValid(status, instanceId)) {
+ if (instance.isStateTransitionValid(status)) {
//setting the status, persist and publish
- application.setStatus(status, instanceId);
+ instance.setStatus(status);
+ application.removeInstance(instanceId);
updateApplicationMonitor(appId, status, instanceId);
//removing the monitor
- AutoscalerContext.getInstance().removeAppMonitor(appId);
- //Removing the application from memory and registry
- ApplicationHolder.removeApplication(appId);
- log.info("Application is removed: [application-id] " + appId);
+ if(application.getInstanceContextCount() == 0) {
+ AutoscalerContext.getInstance().removeAppMonitor(appId);
+ //Removing the application from memory and registry
+ ApplicationHolder.removeApplication(appId);
+ log.info("Application is removed: [application-id] " + appId);
+ }
ApplicationsEventPublisher.sendApplicationInstanceTerminatedEvent(appId, clusterData);
} else {
log.warn(String.format("Application state transition is not valid: [application-id] %s " +
- " [current-status] %s [status-requested] %s", appId,
+ " [current-status] %s [status-requested] %s", appId,
application.getInstanceContexts(instanceId).getStatus(),
status));
}
@@ -302,6 +308,7 @@ public class ApplicationBuilder {
if (context != null) {
if (context.isStateTransitionValid(status)) {
//setting the status, persist and publish
+ context.setStatus(status);
updateGroupMonitor(appId, groupId, status, instanceId);
ApplicationHolder.persistApplication(application);
ApplicationsEventPublisher.sendGroupInstanceTerminatedEvent(appId, groupId, instanceId);
@@ -345,6 +352,7 @@ public class ApplicationBuilder {
if (context != null) {
if (context.isStateTransitionValid(status)) {
//setting the status, persist and publish
+ context.setStatus(status);
updateGroupMonitor(appId, groupId, status, instanceId);
ApplicationHolder.persistApplication(application);
ApplicationsEventPublisher.sendGroupInstanceActivatedEvent(appId, groupId, instanceId);
@@ -399,46 +407,51 @@ public class ApplicationBuilder {
String networkPartitionId,
String instanceId,
String partitionId) {
- if (log.isDebugEnabled()) {
- log.debug("Handling Group creation for the [group]: " + groupId +
- " in the [application] " + appId);
- }
-
GroupInstance instance = null;
- Applications applications = ApplicationHolder.getApplications();
- Application application = applications.getApplication(appId);
- //update the status of the Group
- if (application == null) {
- log.warn(String.format("Application %s does not exist",
- appId));
- return instance;
- }
+ ApplicationHolder.acquireWriteLock();
+ try {
+ if (log.isDebugEnabled()) {
+ log.debug("Handling Group creation for the [group]: " + groupId +
+ " in the [application] " + appId);
+ }
+ Applications applications = ApplicationHolder.getApplications();
+ Application application = applications.getApplication(appId);
+ //update the status of the Group
+ if (application == null) {
+ log.warn(String.format("Application %s does not exist",
+ appId));
+ return instance;
+ }
- Group group = application.getGroupRecursively(groupId);
- if (group == null) {
- log.warn(String.format("Group %s does not exist",
- groupId));
- return instance;
- }
+ Group group = application.getGroupRecursively(groupId);
+ if (group == null) {
+ log.warn(String.format("Group %s does not exist",
+ groupId));
+ return instance;
+ }
- GroupStatus status = GroupStatus.Created;
+ GroupStatus status = GroupStatus.Created;
- if (!group.containsInstanceContext(instanceId)) {
- //setting the status, persist and publish
- instance = new GroupInstance(groupId, instanceId);
- instance.setParentId(parentId);
- instance.setPartitionId(partitionId);
- instance.setNetworkPartitionId(networkPartitionId);
- instance.setStatus(status);
- group.addInstance(instanceId, instance);
- //updateGroupMonitor(appId, groupId, status);
- ApplicationHolder.persistApplication(application);
- ApplicationsEventPublisher.sendGroupInstanceCreatedEvent(appId, groupId, instance);
- } else {
- log.warn("Group Instance Context already exists: [group-id] " + groupId +
- " [Group-Instance-Id] " + instanceId);
+ if (!group.containsInstanceContext(instanceId)) {
+ //setting the status, persist and publish
+ instance = new GroupInstance(groupId, instanceId);
+ instance.setParentId(parentId);
+ instance.setPartitionId(partitionId);
+ instance.setNetworkPartitionId(networkPartitionId);
+ instance.setStatus(status);
+ group.addInstance(instanceId, instance);
+ //updateGroupMonitor(appId, groupId, status);
+ ApplicationHolder.persistApplication(application);
+ ApplicationsEventPublisher.sendGroupInstanceCreatedEvent(appId, groupId, instance);
+ } else {
+ log.warn("Group Instance Context already exists: [group-id] " + groupId +
+ " [Group-Instance-Id] " + instanceId);
+ }
+ } finally {
+ ApplicationHolder.releaseWriteLock();
}
-
+
+
return instance;
}
@@ -470,6 +483,7 @@ public class ApplicationBuilder {
if (context != null) {
if (context.isStateTransitionValid(status)) {
//setting the status, persist and publish
+ context.setStatus(status);
updateGroupMonitor(appId, groupId, status, instanceId);
ApplicationHolder.persistApplication(application);
ApplicationsEventPublisher.sendGroupInstanceInActivateEvent(appId, groupId, instanceId);
@@ -514,6 +528,7 @@ public class ApplicationBuilder {
if (context != null) {
if (context.isStateTransitionValid(status)) {
//setting the status, persist and publish
+ context.setStatus(status);
updateGroupMonitor(appId, groupId, status, instanceId);
ApplicationHolder.persistApplication(application);
ApplicationsEventPublisher.sendGroupInstanceTerminatingEvent(appId, groupId, instanceId);
http://git-wip-us.apache.org/repos/asf/stratos/blob/8d9632f8/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 643710d..a981eec 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
@@ -45,6 +45,7 @@ import org.apache.stratos.messaging.domain.instance.ClusterInstance;
import org.apache.stratos.messaging.domain.instance.GroupInstance;
import org.apache.stratos.messaging.domain.instance.Instance;
import org.apache.stratos.messaging.domain.topology.Cluster;
+import org.apache.stratos.messaging.domain.topology.ClusterStatus;
import org.apache.stratos.messaging.domain.topology.Service;
import org.apache.stratos.messaging.domain.topology.Topology;
import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
@@ -140,36 +141,24 @@ public class MonitorFactory {
}
- //acquiring write lock to add the group instances
- ApplicationHolder.acquireWriteLock();
- try {
- Group group = ApplicationHolder.getApplications().
- getApplication(appId).getGroupRecursively(context.getId());
- //Starting the minimum dependencies
- initialStartup = groupMonitor.createInstanceAndStartDependencyAtStartup(group, instanceIds);
- } finally {
- ApplicationHolder.releaseWriteLock();
- }
+ Group group = ApplicationHolder.getApplications().
+ getApplication(appId).getGroupRecursively(context.getId());
+ //Starting the minimum dependencies
+ initialStartup = groupMonitor.createInstanceAndStartDependencyAtStartup(group, instanceIds);
/**
* If not first app deployment, acquiring read lock to check current the status of the group,
* when the stratos got to restarted
*/
- if (!initialStartup) {
- ApplicationHolder.acquireReadLock();
- try {
- Group group = ApplicationHolder.getApplications().
- getApplication(appId).getGroupRecursively(context.getId());
- //Starting statusChecking to make it sync with the Topology in the restart of stratos.
- for (GroupInstance instance : group.getInstanceIdToInstanceContextMap().values()) {
- ServiceReferenceHolder.getInstance().
- getGroupStatusProcessorChain().
- process(group.getUniqueIdentifier(), appId, instance.getInstanceId());
- }
- } finally {
- ApplicationHolder.releaseReadLock();
+ /*if (!initialStartup) {
+ //Starting statusChecking to make it sync with the Topology in the restart of stratos.
+ for (GroupInstance instance : group.getInstanceIdToInstanceContextMap().values()) {
+ ServiceReferenceHolder.getInstance().
+ getGroupStatusProcessorChain().
+ process(group.getUniqueIdentifier(), appId, instance.getInstanceId());
}
- }
+
+ }*/
return groupMonitor;
@@ -189,10 +178,11 @@ public class MonitorFactory {
TopologyInConsistentException, PolicyValidationException {
ApplicationMonitor applicationMonitor;
boolean initialStartup = false;
+ Application application;
//acquiring read lock to start the monitor
ApplicationHolder.acquireReadLock();
try {
- Application application = ApplicationHolder.getApplications().getApplication(appId);
+ application = ApplicationHolder.getApplications().getApplication(appId);
if (application != null) {
applicationMonitor = new ApplicationMonitor(application);
applicationMonitor.setHasStartupDependents(false);
@@ -207,32 +197,19 @@ public class MonitorFactory {
}
- //acquiring write lock to add the required instances
- ApplicationHolder.acquireWriteLock();
- try {
- Application application = ApplicationHolder.getApplications().getApplication(appId);
- initialStartup = applicationMonitor.startMinimumDependencies(application);
- } finally {
- ApplicationHolder.releaseWriteLock();
- }
+ initialStartup = applicationMonitor.startMinimumDependencies(application);
- //If not first app deployment, then calculate the current status of the app instance.
+ /*//If not first app deployment, then calculate the current status of the app instance.
if (!initialStartup) {
- ApplicationHolder.acquireReadLock();
- try {
- Application application = ApplicationHolder.getApplications().getApplication(appId);
- for (ApplicationInstance instance :
- application.getInstanceIdToInstanceContextMap().values()) {
- //Starting statusChecking to make it sync with the Topology in the restart of stratos.
- ServiceReferenceHolder.getInstance().
- getGroupStatusProcessorChain().
- process(appId, appId, instance.getInstanceId());
+ for (ApplicationInstance instance :
+ application.getInstanceIdToInstanceContextMap().values()) {
+ //Starting statusChecking to make it sync with the Topology in the restart of stratos.
+ ServiceReferenceHolder.getInstance().
+ getGroupStatusProcessorChain().
+ process(appId, appId, instance.getInstanceId());
- }
- } finally {
- ApplicationHolder.releaseReadLock();
}
- }
+ }*/
return applicationMonitor;
@@ -321,6 +298,13 @@ public class MonitorFactory {
if (clusterMonitor.getInstance(clusterInstance.getInstanceId()) == null) {
clusterMonitor.addInstance(clusterInstance);
}
+ //Checking the current status of the cluster instance
+ boolean stateChanged = ServiceReferenceHolder.getInstance().getClusterStatusProcessorChain().
+ process("", clusterId, clusterInstance.getInstanceId());
+ if(!stateChanged && clusterInstance.getStatus() != ClusterStatus.Created) {
+ clusterMonitor.notifyParentMonitor(clusterInstance.getStatus(),
+ clusterInstance.getInstanceId());
+ }
}
} else {
createClusterInstance(cluster.getServiceName(),
http://git-wip-us.apache.org/repos/asf/stratos/blob/8d9632f8/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 fb96bea..ec73fd1 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
@@ -46,6 +46,7 @@ import org.apache.stratos.messaging.domain.applications.Application;
import org.apache.stratos.messaging.domain.applications.ApplicationStatus;
import org.apache.stratos.messaging.domain.applications.Group;
import org.apache.stratos.messaging.domain.applications.GroupStatus;
+import org.apache.stratos.messaging.domain.instance.ClusterInstance;
import org.apache.stratos.messaging.domain.instance.GroupInstance;
import org.apache.stratos.messaging.domain.instance.Instance;
import org.apache.stratos.messaging.domain.topology.ClusterStatus;
@@ -124,7 +125,6 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
* @param status status of the group
*/
public void setStatus(GroupStatus status, String instanceId) {
- ((GroupInstance) this.instanceIdToInstanceMap.get(instanceId)).setStatus(status);
if (status == GroupStatus.Inactive && !this.hasStartupDependents) {
log.info("[Group] " + this.id + "is not notifying the parent, " +
@@ -171,6 +171,7 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
String instanceId = statusEvent.getInstanceId();
LifeCycleState status1 = statusEvent.getStatus();
//Events coming from parent are In_Active(in faulty detection), Scaling events, termination
+
if (status1 == ClusterStatus.Active || status1 == GroupStatus.Active) {
onChildActivatedEvent(id, instanceId);
@@ -325,20 +326,24 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
getDeploymentPolicyByApplication(appId).
getChildPolicy(groupId);
-
+ String networkPartitionId = parentInstanceContext.getNetworkPartitionId();
if (this.networkPartitionCtxts.containsKey(parentInstanceContext)) {
groupLevelNetworkPartitionContext = this.networkPartitionCtxts.
- get(parentInstanceContext.getNetworkPartitionId());
+ get(networkPartitionId);
} else {
if (policy != null) {
ChildLevelNetworkPartition networkPartition = policy.
getChildLevelNetworkPartition(parentInstanceContext.getNetworkPartitionId());
groupLevelNetworkPartitionContext = new GroupLevelNetworkPartitionContext(
- parentInstanceContext.getNetworkPartitionId(),
+ networkPartitionId,
networkPartition.getPartitionAlgo());
} else {
groupLevelNetworkPartitionContext = new GroupLevelNetworkPartitionContext(
- parentInstanceContext.getNetworkPartitionId());
+ networkPartitionId);
+ }
+ if(log.isInfoEnabled()) {
+ log.info("[Network partition] " + networkPartitionId + "has been added for the " +
+ "[Group] " + this.id);
}
this.addNetworkPartitionContext(groupLevelNetworkPartitionContext);
}
@@ -372,6 +377,10 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
networkPartitionContext.getPartitionCtxt(parentPartitionId) != null) {
partitionContext = new GroupLevelPartitionContext(0);
networkPartitionContext.addPartitionContext((GroupLevelPartitionContext) partitionContext);
+ if(log.isInfoEnabled()) {
+ log.info("[Partition] " + parentPartitionId + "has been added for the " +
+ "[Group] " + this.id);
+ }
}
} else {
ChildLevelNetworkPartition networkPartition = policy.
@@ -387,6 +396,10 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
childPartitionContexts.add((GroupLevelPartitionContext) partitionContext);
networkPartitionContext.addPartitionContext(
(GroupLevelPartitionContext) partitionContext);
+ if(log.isInfoEnabled()) {
+ log.info("[Partition] " + childLevelPartition.getPartitionId() +
+ "has been added for the [Group] " + this.id);
+ }
}
}
}
@@ -422,6 +435,11 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
groupInstanceContext.addPartitionContext((GroupLevelPartitionContext) partitionContext);
groupLevelNetworkPartitionContext.addInstanceContext(groupInstanceContext);
+ if(log.isInfoEnabled()) {
+ log.info("Group [Instance context] " + instanceId +
+ " has been added to [Group] " + this.id);
+ }
+
if (partitionContext != null) {
((GroupLevelPartitionContext) partitionContext).addActiveInstance(groupInstance);
}
@@ -465,11 +483,11 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
for(Instance instance : existingGroupInstances) {
initialStartup = false;
partitionContext = groupLevelNetworkPartitionContext.
- getPartitionContextById(parentPartitionId);
+ getPartitionContextById(instance.getPartitionId());
groupInstanceId = createGroupInstanceAndAddToMonitor(group, parentInstanceContext,
partitionContext,
groupLevelNetworkPartitionContext,
- null);
+ (GroupInstance) instance);
instanceIdsToStart.add(groupInstanceId);
}
@@ -502,6 +520,9 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
}
}
+ if(log.isInfoEnabled()) {
+ log.info("Starting the dependencies for the [Group] " + group.getUniqueIdentifier());
+ }
startDependency(group, instanceIdsToStart);
return initialStartup;
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/8d9632f8/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 a0710ac..721f291 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
@@ -42,8 +42,10 @@ import org.apache.stratos.autoscaler.monitor.MonitorFactory;
import org.apache.stratos.autoscaler.monitor.cluster.AbstractClusterMonitor;
import org.apache.stratos.autoscaler.monitor.events.builder.MonitorStatusEventBuilder;
import org.apache.stratos.autoscaler.util.ServiceReferenceHolder;
+import org.apache.stratos.messaging.domain.applications.Group;
import org.apache.stratos.messaging.domain.applications.GroupStatus;
import org.apache.stratos.messaging.domain.applications.ParentComponent;
+import org.apache.stratos.messaging.domain.instance.ClusterInstance;
import org.apache.stratos.messaging.domain.instance.Instance;
import org.apache.stratos.messaging.domain.topology.ClusterStatus;
import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
@@ -266,6 +268,7 @@ public abstract class ParentComponentMonitor extends Monitor {
startDep = startDependencyByInstanceCreation(eventId, instanceId);
}
+ //Checking whether all the monitors got created
if (!startDep) {
ServiceReferenceHolder.getInstance().getGroupStatusProcessorChain().
process(this.id, this.appId, instanceId);
@@ -276,7 +279,6 @@ public abstract class ParentComponentMonitor extends Monitor {
//TODO revert the siblings and notify parent, change a flag for reverting/un-subscription
log.error(e);
}
-
}
/**
@@ -603,16 +605,16 @@ public abstract class ParentComponentMonitor extends Monitor {
public void run() {
Monitor monitor = null;
int retries = 5;
- boolean success;
- do {
- //TODO remove thread.sleep, exectutor service
+ boolean success = false;
+ while (!success && retries != 0) {
+ /*//TODO remove thread.sleep, exectutor service
try {
Thread.sleep(5000);
} catch (InterruptedException e1) {
- }
+ }*/
- if (log.isDebugEnabled()) {
- log.debug("Monitor is going to be started for [group/cluster] "
+ if (log.isInfoEnabled()) {
+ log.info("Monitor is going to be started for [group/cluster] "
+ context.getId());
}
try {
@@ -633,12 +635,9 @@ public abstract class ParentComponentMonitor extends Monitor {
String msg = "Monitor creation failed for: " + context.getId();
log.warn(msg, e);
retries--;
-
}
success = true;
-
- } while (!success && retries != 0);
-
+ }
if (monitor == null) {
String msg = "Monitor creation failed, even after retrying for 5 times, "
http://git-wip-us.apache.org/repos/asf/stratos/blob/8d9632f8/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 7e2ac38..8bea86e 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
@@ -378,11 +378,11 @@ public class AutoscalerUtil {
ApplicationMonitor applicationMonitor = null;
int retries = 5;
boolean success = false;
- do {
- try {
+ while (!success && retries != 0) {
+ /*try {
Thread.sleep(5000);
} catch (InterruptedException e1) {
- }
+ }*/
try {
long start = System.currentTimeMillis();
log.info("application monitor is going to be started for [application] " +
@@ -406,7 +406,7 @@ public class AutoscalerUtil {
log.warn(msg, e);
retries--;
}
- } while (!success && retries != 0);
+ }
if (applicationMonitor == null) {
String msg = "Application monitor creation failed, even after retrying for 5 times, "
http://git-wip-us.apache.org/repos/asf/stratos/blob/8d9632f8/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java
index 8b8b879..4dd6b34 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java
@@ -31,14 +31,14 @@ import java.util.*;
public abstract class ParentComponent<T extends Instance> implements Serializable {
- // Dependency Order
- private DependencyOrder dependencyOrder;
// Group Map, key = Group.alias
protected final Map<String, Group> aliasToGroupMap;
// Cluster Id map, key = subscription alias for the cartridge type
protected final Map<String, ClusterDataHolder> aliasToClusterDataMap;
// Group/Cluster Instance Context map, key = instance id
protected Map<String, T> instanceIdToInstanceContextMap;
+ // Dependency Order
+ private DependencyOrder dependencyOrder;
// flag for Group level scaling
private boolean isGroupScalingEnabled;
//flag for group instance level monitoring
@@ -46,7 +46,7 @@ public abstract class ParentComponent<T extends Instance> implements Serializabl
//deployment policy
private String deploymentPolicy;
- public ParentComponent () {
+ public ParentComponent() {
this.isGroupScalingEnabled = false;
this.isGroupInstanceMonitoringEnabled = false;
aliasToGroupMap = new HashMap<String, Group>();
@@ -60,7 +60,7 @@ public abstract class ParentComponent<T extends Instance> implements Serializabl
*
* @return unique identifier String
*/
- public abstract String getUniqueIdentifier ();
+ public abstract String getUniqueIdentifier();
/**
* Adds a group
@@ -72,15 +72,6 @@ public abstract class ParentComponent<T extends Instance> implements Serializabl
}
/**
- * Setter for Group alias to Group map
- *
- * @param groupAliasToGroup Map, key = alias given to the Group, value = Group
- */
- public void setGroups(Map<String, Group> groupAliasToGroup) {
- aliasToGroupMap.putAll(groupAliasToGroup);
- }
-
- /**
* Get the Group for the given alias in the context of the parent entity.
* Will not search recursively in the nested levels.
*
@@ -103,7 +94,7 @@ public abstract class ParentComponent<T extends Instance> implements Serializabl
return travereAndCheckRecursively(aliasToGroupMap, groupAlias);
}
- private Group travereAndCheckRecursively (Map<String,Group> aliasToGroupMap, String groupAlias) {
+ private Group travereAndCheckRecursively(Map<String, Group> aliasToGroupMap, String groupAlias) {
if (aliasToGroupMap.containsKey(groupAlias)) {
synchronized (aliasToGroupMap) {
@@ -121,10 +112,10 @@ public abstract class ParentComponent<T extends Instance> implements Serializabl
}
public ClusterDataHolder getClusterDataHolderRecursivelyByAlias(String alias) {
- if(this.aliasToClusterDataMap.containsKey(alias)) {
+ if (this.aliasToClusterDataMap.containsKey(alias)) {
return this.aliasToClusterDataMap.get(alias);
} else {
- if(this.aliasToGroupMap != null && !this.aliasToGroupMap.isEmpty()) {
+ if (this.aliasToGroupMap != null && !this.aliasToGroupMap.isEmpty()) {
return getClusterDataByAlias(alias, this.aliasToGroupMap.values());
}
}
@@ -160,12 +151,12 @@ public abstract class ParentComponent<T extends Instance> implements Serializabl
}
/**
- * Setter for Dependency Order
+ * Setter for Group alias to Group map
*
- * @param dependencyOrder Dependency Order object
+ * @param groupAliasToGroup Map, key = alias given to the Group, value = Group
*/
- public void setDependencyOrder(DependencyOrder dependencyOrder) {
- this.dependencyOrder = dependencyOrder;
+ public void setGroups(Map<String, Group> groupAliasToGroup) {
+ aliasToGroupMap.putAll(groupAliasToGroup);
}
/**
@@ -178,6 +169,15 @@ public abstract class ParentComponent<T extends Instance> implements Serializabl
}
/**
+ * Setter for Dependency Order
+ *
+ * @param dependencyOrder Dependency Order object
+ */
+ public void setDependencyOrder(DependencyOrder dependencyOrder) {
+ this.dependencyOrder = dependencyOrder;
+ }
+
+ /**
* Setter for alias to Cluster Data map
*
* @param aliasToClusterData Map, key = alias given to the cluster, value = ClusterData object
@@ -203,7 +203,7 @@ public abstract class ParentComponent<T extends Instance> implements Serializabl
*
* @return Set of ClusterDataHolder objects if available, else null
*/
- public Set<ClusterDataHolder> getClusterDataRecursively () {
+ public Set<ClusterDataHolder> getClusterDataRecursively() {
Set<ClusterDataHolder> appClusterData = new HashSet<ClusterDataHolder>();
@@ -224,18 +224,27 @@ public abstract class ParentComponent<T extends Instance> implements Serializabl
* Adds InstanceContext of a child to the instanceIdToInstanceContextMap.
*
* @param instanceId instance id of child
- * @param instance InstanceContext object
+ * @param instance InstanceContext object
*/
public void addInstance(String instanceId, T instance) {
instanceIdToInstanceContextMap.put(instanceId, instance);
}
/**
+ * This will remove the instance from instanceIdToInstanceContextMap
+ *
+ * @param instanceId instance id of child
+ */
+ public void removeInstance(String instanceId) {
+ instanceIdToInstanceContextMap.remove(instanceId);
+ }
+
+ /**
* Adds InstanceContext of a child to the instanceIdToInstanceContextMap.
*
* @param instanceId instance id of child
*/
- public boolean containsInstanceContext (String instanceId) {
+ public boolean containsInstanceContext(String instanceId) {
return getInstanceIdToInstanceContextMap().containsKey(instanceId);
}
@@ -246,7 +255,7 @@ public abstract class ParentComponent<T extends Instance> implements Serializabl
* @param instanceId instance id
* @return InstanceContext obj. if exists, else null
*/
- public T getInstanceContexts (String instanceId) {
+ public T getInstanceContexts(String instanceId) {
// if map is empty, return null
if (getInstanceIdToInstanceContextMap().isEmpty()) {
return null;
@@ -266,7 +275,7 @@ public abstract class ParentComponent<T extends Instance> implements Serializabl
* @param parentInstanceId parent instance id
* @return InstanceContext obj. if exists, else null
*/
- public List<Instance> getInstanceContextsWithParentId (String parentInstanceId) {
+ public List<Instance> getInstanceContextsWithParentId(String parentInstanceId) {
// if map is empty, return null
List<Instance> contexts = new ArrayList<Instance>();
@@ -275,9 +284,9 @@ public abstract class ParentComponent<T extends Instance> implements Serializabl
}
// if instanceId is null, just get the first InstanceContext
- if (parentInstanceId == null) {
- for(Instance context : instanceIdToInstanceContextMap.values()) {
- if(parentInstanceId.equals(context.getParentId())) {
+ if (parentInstanceId != null) {
+ for (Instance context : instanceIdToInstanceContextMap.values()) {
+ if (parentInstanceId.equals(context.getParentId())) {
contexts.add(context);
}
}
@@ -291,12 +300,16 @@ public abstract class ParentComponent<T extends Instance> implements Serializabl
*
* @return number of instance contexts
*/
- public int getInstanceContextCount () {
+ public int getInstanceContextCount() {
return getInstanceIdToInstanceContextMap().keySet().size();
}
- protected void getClusterData (Set<ClusterDataHolder> clusterData, Collection<Group> groups) {
+ public int getComponentsCount() {
+ return getClusterDataMap().keySet().size() + getAliasToGroupMap().keySet().size();
+ }
+
+ protected void getClusterData(Set<ClusterDataHolder> clusterData, Collection<Group> groups) {
for (Group group : groups) {
if (group.getClusterDataMap() != null && !group.getClusterDataMap().isEmpty()) {
@@ -308,11 +321,11 @@ public abstract class ParentComponent<T extends Instance> implements Serializabl
}
}
- private ClusterDataHolder getClusterDataByAlias (String alias, Collection<Group> groups) {
+ private ClusterDataHolder getClusterDataByAlias(String alias, Collection<Group> groups) {
for (Group group : groups) {
if (group.getClusterDataMap() != null && !group.getClusterDataMap().isEmpty()) {
- if(group.getClusterData(alias) != null) {
+ if (group.getClusterData(alias) != null) {
return group.getClusterData(alias);
}
} else {