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/09 06:59:54 UTC
[1/3] stratos git commit: fixing startup of VM upon termination
Repository: stratos
Updated Branches:
refs/heads/4.1.0-test ff1cda638 -> d933d5961
fixing startup of VM upon termination
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/253c2d01
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/253c2d01
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/253c2d01
Branch: refs/heads/4.1.0-test
Commit: 253c2d01ec0d2c38fb4e36715a53b87456865166
Parents: 05eba61
Author: reka <rt...@gmail.com>
Authored: Mon Dec 8 23:47:06 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Mon Dec 8 23:47:06 2014 +0530
----------------------------------------------------------------------
.../applications/dependency/DependencyTree.java | 21 ++++--
.../autoscaler/monitor/MonitorFactory.java | 55 ++-------------
.../monitor/cluster/AbstractClusterMonitor.java | 2 +-
.../monitor/cluster/VMClusterMonitor.java | 74 ++++++++++++++++++++
.../monitor/component/GroupMonitor.java | 59 ++++++++--------
.../component/ParentComponentMonitor.java | 55 ++++++---------
6 files changed, 149 insertions(+), 117 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/253c2d01/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/DependencyTree.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/DependencyTree.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/DependencyTree.java
index 1f86ca4..1e8b69e 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/DependencyTree.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/DependencyTree.java
@@ -21,6 +21,8 @@ package org.apache.stratos.autoscaler.applications.dependency;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.stratos.autoscaler.applications.dependency.context.ApplicationChildContext;
+import org.apache.stratos.autoscaler.monitor.Monitor;
+import org.apache.stratos.autoscaler.monitor.component.ParentComponentMonitor;
import java.util.ArrayList;
import java.util.List;
@@ -163,26 +165,33 @@ public class DependencyTree {
*
* @return list of dependencies
*/
- public List<ApplicationChildContext> getStarAbleDependencies() {
+ public List<ApplicationChildContext> getStartAbleDependencies() {
//returning the top level as the monitor is in initializing state
return this.primaryApplicationContextList;
}
- public List<ApplicationChildContext> getStarAbleDependenciesByTermination() {
+ public List<ApplicationChildContext> getStarAbleDependenciesByTermination(
+ ParentComponentMonitor monitor,
+ String instanceId) {
//Breadth First search over the graph to find out which level has the terminated contexts
- return traverseGraphByLevel(this.primaryApplicationContextList);
+
+ return traverseGraphByLevel(this.primaryApplicationContextList, monitor, instanceId);
}
- private List<ApplicationChildContext> traverseGraphByLevel(List<ApplicationChildContext> contexts) {
+ private List<ApplicationChildContext> traverseGraphByLevel(List<ApplicationChildContext> contexts,
+ ParentComponentMonitor parentMonitor,
+ String instanceId) {
for(ApplicationChildContext context : contexts) {
- if(context.isTerminated()) {
+ Monitor monitor = parentMonitor.getMonitor(context.getId());
+ if(monitor.getInstance(instanceId) == null ||
+ monitor.getInstancesByParentInstanceId(instanceId).isEmpty()) {
return contexts;
}
}
for(ApplicationChildContext context : contexts) {
- return traverseGraphByLevel(context.getApplicationChildContextList());
+ return traverseGraphByLevel(context.getApplicationChildContextList(), parentMonitor, instanceId);
}
return null;
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/253c2d01/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 a80e50c..5ee986b 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
@@ -34,6 +34,7 @@ import org.apache.stratos.autoscaler.exception.partition.PartitionValidationExce
import org.apache.stratos.autoscaler.exception.policy.PolicyValidationException;
import org.apache.stratos.autoscaler.monitor.cluster.AbstractClusterMonitor;
import org.apache.stratos.autoscaler.monitor.cluster.ClusterMonitorFactory;
+import org.apache.stratos.autoscaler.monitor.cluster.VMClusterMonitor;
import org.apache.stratos.autoscaler.monitor.component.ApplicationMonitor;
import org.apache.stratos.autoscaler.monitor.component.GroupMonitor;
import org.apache.stratos.autoscaler.monitor.component.ParentComponentMonitor;
@@ -88,11 +89,7 @@ public class MonitorFactory {
return monitor;
}
- private static void createClusterInstance(String serviceType, String clusterId, String alias,
- String instanceId, String partitionId, String networkPartitionId) {
- CloudControllerClient.getInstance().createClusterInstance(serviceType, clusterId, alias,
- instanceId, partitionId, networkPartitionId);
- }
+
/**
* This will create the GroupMonitor based on given groupId by going thr Topology
@@ -271,51 +268,11 @@ public class MonitorFactory {
} else {
clusterMonitor.setHasGroupScalingDependent(false);
}
+ //Creating the instance of the cluster
+ ((VMClusterMonitor)clusterMonitor).createClusterInstance(parentInstanceIds, cluster);
+ //add it to autoscaler context
+ AutoscalerContext.getInstance().addClusterMonitor(clusterMonitor);
- for (String parentInstanceId : parentInstanceIds) {
- Instance parentMonitorInstance = parentMonitor.getInstance(parentInstanceId);
- String partitionId = null;
- if (parentMonitorInstance instanceof GroupInstance) {
- partitionId = parentMonitorInstance.getPartitionId();
- }
- if (parentMonitorInstance != null) {
- ClusterInstance clusterInstance = cluster.getInstanceContexts(parentInstanceId);
- if (clusterInstance != null) {
- // Cluster instance is already there. No need to create one.
- VMClusterContext clusterContext;
- clusterContext =
- ClusterContextFactory.getVMClusterContext(clusterInstance.getInstanceId(), cluster);
- clusterMonitor.setClusterContext(clusterContext);
- // create VMClusterContext and then add all the instanceContexts
- clusterContext.addInstanceContext(parentInstanceId, cluster);
- 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());
-
- if (clusterMonitor.hasMonitoringStarted().compareAndSet(false, true)) {
- clusterMonitor.startScheduler();
- log.info("Monitoring task for Cluster Monitor with cluster id " +
- clusterId + " started successfully");
- }
- }
- } else {
- createClusterInstance(cluster.getServiceName(), clusterId, null, parentInstanceId, partitionId,
- parentMonitorInstance.getNetworkPartitionId());
- }
-
- } else {
-
- }
- AutoscalerContext.getInstance().addClusterMonitor(clusterMonitor);
-
- }
return clusterMonitor;
http://git-wip-us.apache.org/repos/asf/stratos/blob/253c2d01/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/AbstractClusterMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/AbstractClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/AbstractClusterMonitor.java
index 277948f..91e5c4a 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/AbstractClusterMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/AbstractClusterMonitor.java
@@ -68,7 +68,7 @@ public abstract class AbstractClusterMonitor extends Monitor implements Runnable
protected AutoscalerRuleEvaluator autoscalerRuleEvaluator;
protected String serviceType;
private AtomicBoolean monitoringStarted;
- private String clusterId;
+ protected String clusterId;
private Cluster cluster;
private int monitoringIntervalMilliseconds;
private boolean isDestroyed;
http://git-wip-us.apache.org/repos/asf/stratos/blob/253c2d01/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 ef8491a..a43f89e 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
@@ -22,6 +22,8 @@ import org.apache.commons.configuration.XMLConfiguration;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.stratos.autoscaler.client.CloudControllerClient;
+import org.apache.stratos.autoscaler.context.AutoscalerContext;
+import org.apache.stratos.autoscaler.context.cluster.ClusterContextFactory;
import org.apache.stratos.autoscaler.context.cluster.ClusterInstanceContext;
import org.apache.stratos.autoscaler.context.cluster.VMClusterContext;
import org.apache.stratos.autoscaler.context.member.MemberStatsContext;
@@ -30,6 +32,8 @@ import org.apache.stratos.autoscaler.context.partition.network.ClusterLevelNetwo
import org.apache.stratos.autoscaler.event.publisher.ClusterStatusEventPublisher;
import org.apache.stratos.autoscaler.exception.InvalidArgumentException;
import org.apache.stratos.autoscaler.exception.cartridge.TerminationException;
+import org.apache.stratos.autoscaler.exception.partition.PartitionValidationException;
+import org.apache.stratos.autoscaler.exception.policy.PolicyValidationException;
import org.apache.stratos.autoscaler.monitor.events.MonitorScalingEvent;
import org.apache.stratos.autoscaler.monitor.events.MonitorStatusEvent;
import org.apache.stratos.autoscaler.monitor.events.builder.MonitorStatusEventBuilder;
@@ -48,6 +52,8 @@ import org.apache.stratos.common.constants.StratosConstants;
import org.apache.stratos.messaging.domain.applications.ApplicationStatus;
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.Cluster;
import org.apache.stratos.messaging.domain.topology.ClusterStatus;
import org.apache.stratos.messaging.domain.topology.Member;
@@ -1051,4 +1057,72 @@ public class VMClusterMonitor extends AbstractClusterMonitor {
}
+ public void createClusterInstance(List<String> parentInstanceIds, Cluster cluster)
+ throws PolicyValidationException, PartitionValidationException {
+ for (String parentInstanceId : parentInstanceIds) {
+ createInstance(parentInstanceId, cluster);
+ }
+
+ }
+
+ public void createClusterInstanceOnScaleUp(String instanceId)
+ throws PolicyValidationException, PartitionValidationException {
+ Cluster cluster = TopologyManager.getTopology().getService(this.serviceType).
+ getCluster(this.clusterId);
+ createInstance(instanceId, cluster);
+
+ }
+
+ private static void createClusterInstance(String serviceType, String clusterId, String alias,
+ String instanceId, String partitionId, String networkPartitionId) {
+ CloudControllerClient.getInstance().createClusterInstance(serviceType, clusterId, alias,
+ instanceId, partitionId, networkPartitionId);
+ }
+
+ private void createInstance(String parentInstanceId, Cluster cluster)
+ throws PolicyValidationException, PartitionValidationException {
+ Instance parentMonitorInstance = this.parent.getInstance(parentInstanceId);
+ String partitionId = null;
+ if (parentMonitorInstance instanceof GroupInstance) {
+ partitionId = parentMonitorInstance.getPartitionId();
+ }
+ if (parentMonitorInstance != null) {
+ ClusterInstance clusterInstance = cluster.getInstanceContexts(parentInstanceId);
+ if (clusterInstance != null) {
+ // Cluster instance is already there. No need to create one.
+ VMClusterContext clusterContext;
+ clusterContext =
+ ClusterContextFactory.getVMClusterContext(clusterInstance.getInstanceId(), cluster);
+ this.setClusterContext(clusterContext);
+ // create VMClusterContext and then add all the instanceContexts
+ clusterContext.addInstanceContext(parentInstanceId, cluster);
+ if (this.getInstance(clusterInstance.getInstanceId()) == null) {
+ this.addInstance(clusterInstance);
+ }
+ // Checking the current status of the cluster instance
+ boolean stateChanged =
+ ServiceReferenceHolder.getInstance().getClusterStatusProcessorChain()
+ .process("", cluster.getClusterId(), clusterInstance.getInstanceId());
+ if (!stateChanged && clusterInstance.getStatus() != ClusterStatus.Created) {
+ this.notifyParentMonitor(clusterInstance.getStatus(),
+ clusterInstance.getInstanceId());
+
+ if (this.hasMonitoringStarted().compareAndSet(false, true)) {
+ this.startScheduler();
+ log.info("Monitoring task for Cluster Monitor with cluster id " +
+ cluster.getClusterId() + " started successfully");
+ }
+ }
+ } else {
+ createClusterInstance(cluster.getServiceName(), cluster.getClusterId(), null, parentInstanceId, partitionId,
+ parentMonitorInstance.getNetworkPartitionId());
+ }
+
+ } else {
+
+ }
+
+ }
+
+
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/253c2d01/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 ac271ba..8d3f42d 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,7 +46,6 @@ 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;
@@ -177,7 +176,7 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
} else if (status1 == ClusterStatus.Inactive || status1 == GroupStatus.Inactive) {
//handling restart of stratos
- if(!this.aliasToActiveMonitorsMap.get(id).hasStartupDependents()) {
+ if (!this.aliasToActiveMonitorsMap.get(id).hasStartupDependents()) {
onChildActivatedEvent(id, instanceId);
} else {
this.markMonitorAsInactive(instanceId);
@@ -238,7 +237,7 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
Application application = ApplicationHolder.getApplications().getApplication(this.appId);
Group group = application.getGroupRecursively(statusEvent.getId());
//starting a new instance of this monitor
- createInstanceAndStartDependencyOnScaleup(group, statusEvent.getInstanceId());
+ createInstanceAndStartDependencyOnScaleup(statusEvent.getInstanceId());
}
}
@@ -347,7 +346,7 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
groupLevelNetworkPartitionContext = new GroupLevelNetworkPartitionContext(
networkPartitionId);
}
- if(log.isInfoEnabled()) {
+ if (log.isInfoEnabled()) {
log.info("[Network partition] " + networkPartitionId + "has been added for the " +
"[Group] " + this.id);
}
@@ -383,7 +382,7 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
networkPartitionContext.getPartitionCtxt(parentPartitionId) != null) {
partitionContext = new GroupLevelPartitionContext(0);
networkPartitionContext.addPartitionContext((GroupLevelPartitionContext) partitionContext);
- if(log.isInfoEnabled()) {
+ if (log.isInfoEnabled()) {
log.info("[Partition] " + parentPartitionId + "has been added for the " +
"[Group] " + this.id);
}
@@ -402,7 +401,7 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
childPartitionContexts.add((GroupLevelPartitionContext) partitionContext);
networkPartitionContext.addPartitionContext(
(GroupLevelPartitionContext) partitionContext);
- if(log.isInfoEnabled()) {
+ if (log.isInfoEnabled()) {
log.info("[Partition] " + childLevelPartition.getPartitionId() +
"has been added for the [Group] " + this.id);
}
@@ -441,7 +440,7 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
groupInstanceContext.addPartitionContext((GroupLevelPartitionContext) partitionContext);
groupLevelNetworkPartitionContext.addInstanceContext(groupInstanceContext);
- if(log.isInfoEnabled()) {
+ if (log.isInfoEnabled()) {
log.info("Group [Instance context] " + instanceId +
" has been added to [Group] " + this.id);
}
@@ -486,7 +485,7 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
//Have to check whether group has generated its own instances
List<Instance> existingGroupInstances = group.getInstanceContextsWithParentId(parentInstanceId);
- for(Instance instance : existingGroupInstances) {
+ for (Instance instance : existingGroupInstances) {
initialStartup = false;
partitionContext = groupLevelNetworkPartitionContext.
getPartitionContextById(instance.getPartitionId());
@@ -501,7 +500,7 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
* If the group instances have been partially created or not created,
* then create everything
*/
- if(existingGroupInstances.size() <= groupMin) {
+ if (existingGroupInstances.size() <= groupMin) {
for (int i = 0; i < groupMin - existingGroupInstances.size(); i++) {
// Get partitionContext to create instance in
List<GroupLevelPartitionContext> partitionContexts = groupLevelNetworkPartitionContext.
@@ -510,7 +509,7 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
new GroupLevelPartitionContext[partitionContexts.size()];
if (parentPartitionId == null) {
AutoscaleAlgorithm algorithm = this.getAutoscaleAlgorithm(
- groupLevelNetworkPartitionContext.getPartitionAlgorithm());
+ groupLevelNetworkPartitionContext.getPartitionAlgorithm());
partitionContext = algorithm.getNextScaleUpPartitionContext(
(partitionContexts.toArray(groupLevelPartitionContexts)));
} else {
@@ -526,7 +525,7 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
}
}
- if(log.isInfoEnabled()) {
+ if (log.isInfoEnabled()) {
log.info("Starting the dependencies for the [Group] " + group.getUniqueIdentifier());
}
startDependency(group, instanceIdsToStart);
@@ -534,20 +533,22 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
}
-
/**
* This will start the group instance based on the given parent instanceId
* A new monitor is not created in this case
*
- * @param group
* @param parentInstanceId
* @throws org.apache.stratos.autoscaler.exception.application.MonitorNotFoundException
*/
- public void createInstanceAndStartDependencyOnScaleup(Group group, String parentInstanceId)
+ public void createInstanceAndStartDependencyOnScaleup(String parentInstanceId)
throws MonitorNotFoundException {
// Get parent instance context
Instance parentInstanceContext = getParentInstanceContext(parentInstanceId);
+ //TODO to get lock
+ Group group = ApplicationHolder.getApplications().
+ getApplication(this.appId).getGroupRecursively(this.id);
+
// Get existing or create new GroupLevelNetworkPartitionContext
GroupLevelNetworkPartitionContext groupLevelNetworkPartitionContext =
getGroupLevelNetworkPartitionContext(group.getUniqueIdentifier(),
@@ -559,7 +560,7 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
PartitionContext partitionContext;
String parentPartitionId = parentInstanceContext.getPartitionId();
int groupMax = group.getGroupMaxInstances();
- if(group.getInstanceContextCount() < groupMax) {
+ if (group.getInstanceContextCount() < groupMax) {
// Get partitionContext to create instance in
if (parentPartitionId == null) {
AutoscaleAlgorithm algorithm = this.getAutoscaleAlgorithm(
@@ -571,7 +572,7 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
partitionContext = groupLevelNetworkPartitionContext.
getPartitionContextById(parentPartitionId);
}
- if(partitionContext != null) {
+ if (partitionContext != null) {
groupInstanceId = createGroupInstanceAndAddToMonitor(group, parentInstanceContext,
partitionContext,
groupLevelNetworkPartitionContext,
@@ -598,8 +599,8 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
* @param networkPartitionId
* @return
*/
- private GroupInstance createGroupInstance(Group group, String networkPartitionId,
- String parentInstanceId, String partitionId ) {
+ private GroupInstance createGroupInstance(Group group, String networkPartitionId,
+ String parentInstanceId, String partitionId) {
String instanceId = parentInstanceId;
int minGroupInstances = group.getGroupMinInstances();
int maxGroupInstances = group.getGroupMaxInstances();
@@ -631,31 +632,31 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
}
public boolean verifyGroupStatus(String instanceId, GroupStatus requiredStatus) {
- if(this.instanceIdToInstanceMap.containsKey(instanceId)) {
- if(((GroupInstance)this.instanceIdToInstanceMap.get(instanceId)).getStatus() == requiredStatus) {
+ if (this.instanceIdToInstanceMap.containsKey(instanceId)) {
+ if (((GroupInstance) this.instanceIdToInstanceMap.get(instanceId)).getStatus() == requiredStatus) {
return true;
}
} else {
List<GroupInstance> instances = new ArrayList<GroupInstance>();
String networkPartitionId = null;
int noOfInstancesOfRequiredStatus = 0;
- for(Instance instance : this.instanceIdToInstanceMap.values()) {
- GroupInstance groupInstance = (GroupInstance)instance;
- if(groupInstance.getParentId().equals(instanceId)) {
+ for (Instance instance : this.instanceIdToInstanceMap.values()) {
+ GroupInstance groupInstance = (GroupInstance) instance;
+ if (groupInstance.getParentId().equals(instanceId)) {
instances.add(groupInstance);
networkPartitionId = groupInstance.getNetworkPartitionId();
- if(groupInstance.getStatus() == requiredStatus) {
- noOfInstancesOfRequiredStatus ++;
+ if (groupInstance.getStatus() == requiredStatus) {
+ noOfInstancesOfRequiredStatus++;
}
}
}
- if(!instances.isEmpty()) {
+ if (!instances.isEmpty()) {
int minInstances = this.networkPartitionCtxts.get(networkPartitionId).
- getMinInstanceCount();
- if(noOfInstancesOfRequiredStatus >= minInstances) {
+ getMinInstanceCount();
+ if (noOfInstancesOfRequiredStatus >= minInstances) {
return true;
} else {
- if(requiredStatus == GroupStatus.Inactive && noOfInstancesOfRequiredStatus >= 1) {
+ if (requiredStatus == GroupStatus.Inactive && noOfInstancesOfRequiredStatus >= 1) {
return true;
}
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/253c2d01/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 0e9e267..61fbf11 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
@@ -40,6 +40,7 @@ import org.apache.stratos.autoscaler.exception.policy.PolicyValidationException;
import org.apache.stratos.autoscaler.monitor.Monitor;
import org.apache.stratos.autoscaler.monitor.MonitorFactory;
import org.apache.stratos.autoscaler.monitor.cluster.AbstractClusterMonitor;
+import org.apache.stratos.autoscaler.monitor.cluster.VMClusterMonitor;
import org.apache.stratos.autoscaler.monitor.events.builder.MonitorStatusEventBuilder;
import org.apache.stratos.autoscaler.util.ServiceReferenceHolder;
import org.apache.stratos.messaging.domain.applications.Group;
@@ -92,7 +93,7 @@ public abstract class ParentComponentMonitor extends Monitor {
public void startDependency(ParentComponent component, List<String> instanceIds) {
//start the first dependency
List<ApplicationChildContext> applicationContexts = this.startupDependencyTree.
- getStarAbleDependencies(); //TODO t
+ getStartAbleDependencies();
startDependency(applicationContexts, instanceIds);
}
@@ -105,7 +106,7 @@ public abstract class ParentComponentMonitor extends Monitor {
MonitorNotFoundException {
//start the first dependency
List<ApplicationChildContext> applicationContexts = this.startupDependencyTree.
- getStarAbleDependencies();
+ getStartAbleDependencies();
startDependency(applicationContexts, instanceId);
}
@@ -123,23 +124,6 @@ public abstract class ParentComponentMonitor extends Monitor {
}
/**
- * This will start the parallel dependencies at once from the top level.
- * it will get invoked when the monitor starts up only.
- */
- public void startDependency(ParentComponent component) {
- //start the first dependency
- List<ApplicationChildContext> applicationContexts = this.startupDependencyTree.
- getStarAbleDependencies();
- Collection<Instance> contexts = component.getInstanceIdToInstanceContextMap().values();
- //traversing through all the Instance context and start them
- List<String> instanceIds = new ArrayList<String>();
- for (Instance context : contexts) {
- instanceIds.add(context.getInstanceId());
- }
- startDependency(applicationContexts, instanceIds);
- }
-
- /**
* This will get invoked based on the activation event of its one of the child
*
* @param id alias/clusterId of which receive the activated event
@@ -153,28 +137,25 @@ public abstract class ParentComponentMonitor extends Monitor {
return startup;
}
- public boolean startAllChildrenDependency(ParentComponent component, String instanceId)
- throws TopologyInConsistentException {
- /*List<ApplicationChildContext> applicationContexts = this.startupDependencyTree
- .findAllChildrenOfAppContext(id);*/
- return false;//startDependency(applicationContexts, instanceId);
- }
-
/**
* This will start the parallel dependencies at once from the top level
* by traversing to find the terminated dependencies.
* it will get invoked when start a child monitor on termination of a sub tree
*/
- public void startDependencyOnTermination() throws TopologyInConsistentException {
+ public void startDependencyOnTermination(String instanceId) throws TopologyInConsistentException,
+ MonitorNotFoundException, PolicyValidationException, PartitionValidationException {
//start the first dependency which went to terminated
List<ApplicationChildContext> applicationContexts = this.startupDependencyTree.
- getStarAbleDependenciesByTermination();
+ getStarAbleDependenciesByTermination(this, instanceId);
for(ApplicationChildContext context : applicationContexts) {
if(context instanceof GroupChildContext) {
GroupMonitor groupMonitor = (GroupMonitor) this.aliasToActiveMonitorsMap.
get(context.getId());
+ groupMonitor.createInstanceAndStartDependencyOnScaleup(instanceId);
} else if(context instanceof ClusterChildContext) {
-
+ VMClusterMonitor clusterMonitor = (VMClusterMonitor) this.
+ aliasToActiveMonitorsMap.get(context.getId());
+ clusterMonitor.createClusterInstanceOnScaleUp(instanceId);
}
}
@@ -203,9 +184,7 @@ public abstract class ParentComponentMonitor extends Monitor {
startMonitor(this, context, instanceIds);
}
}
-
return true;
-
}
/**
@@ -389,10 +368,18 @@ public abstract class ParentComponentMonitor extends Monitor {
(parentContexts.isEmpty() || parentsTerminated || allParentsActive)) {
//Find the non existent monitor by traversing dependency tree
try {
- this.startDependencyOnTermination();
+ this.startDependencyOnTermination(instanceId);
} catch (TopologyInConsistentException e) {
//TODO revert the siblings and notify parent, change a flag for reverting/un-subscription
log.error("Error while starting the monitor upon termination" + e);
+ } catch (MonitorNotFoundException e) {
+ //TODO revert the siblings and notify parent, change a flag for reverting/un-subscription
+ log.error("Error while starting the monitor by relevant monitor not found" + e);
+ } catch (PartitionValidationException e) {
+ log.error("Error while starting the monitor upon termination by partition validation failed" + e);
+ } catch (PolicyValidationException e) {
+ log.error("Error while starting the monitor upon termination by policy validation failed" + e);
+
}
} else {
ServiceReferenceHolder.getInstance().getGroupStatusProcessorChain().
@@ -531,6 +518,10 @@ public abstract class ParentComponentMonitor extends Monitor {
return aliasToActiveMonitorsMap;
}
+ public Monitor getMonitor(String monitorId) {
+ return this.aliasToActiveMonitorsMap.get(monitorId);
+ }
+
public void setAliasToActiveMonitorsMap(Map<String, Monitor> aliasToActiveMonitorsMap) {
this.aliasToActiveMonitorsMap = aliasToActiveMonitorsMap;
}
[2/3] stratos git commit: fixing group termination issue
Posted by re...@apache.org.
fixing group termination issue
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/92b467cb
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/92b467cb
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/92b467cb
Branch: refs/heads/4.1.0-test
Commit: 92b467cbca98568f38b6119bdacd3915785f0aa8
Parents: 253c2d0
Author: reka <rt...@gmail.com>
Authored: Tue Dec 9 11:29:28 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Tue Dec 9 11:29:28 2014 +0530
----------------------------------------------------------------------
.../applications/topic/ApplicationBuilder.java | 12 ++++++------
.../autoscaler/monitor/cluster/VMClusterMonitor.java | 3 ++-
.../monitor/component/ParentComponentMonitor.java | 2 +-
3 files changed, 9 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/92b467cb/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 956d6d2..9463906 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
@@ -327,7 +327,7 @@ public class ApplicationBuilder {
Group group = application.getGroupRecursively(groupId);
if (group == null) {
- log.warn(String.format("Group does not exist: [group-id] %s",
+ log.warn(String.format("Group does not exist: [group-id] %s when terminated group",
groupId));
return;
}
@@ -371,7 +371,7 @@ public class ApplicationBuilder {
Group group = application.getGroupRecursively(groupId);
if (group == null) {
- log.warn(String.format("Group does not exist: [group-id] %s",
+ log.warn(String.format("Group does not exist: [group-id] %s when activating group",
groupId));
return;
}
@@ -414,7 +414,7 @@ public class ApplicationBuilder {
Group group = application.getGroupRecursively(groupId);
if (group == null) {
- log.warn(String.format("Group %s does not exist",
+ log.warn(String.format("Group %s does not exist when instance creating group ",
groupId));
return;
}
@@ -454,7 +454,7 @@ public class ApplicationBuilder {
Group group = application.getGroupRecursively(groupId);
if (group == null) {
- log.warn(String.format("Group %s does not exist",
+ log.warn(String.format("Group %s does not exist when creating group",
groupId));
return instance;
}
@@ -502,7 +502,7 @@ public class ApplicationBuilder {
Group group = application.getGroupRecursively(groupId);
if (group == null) {
- log.warn(String.format("Group does not exist: [group-id] %s",
+ log.warn(String.format("Group does not exist: [group-id] %s when inactive group",
groupId));
return;
}
@@ -545,7 +545,7 @@ public class ApplicationBuilder {
Group group = application.getGroupRecursively(groupId);
if (group == null) {
- log.warn(String.format("Group does not exist: [group-id] %s",
+ log.warn(String.format("Group does not exist: [group-id] %s when terminating group",
groupId));
return;
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/92b467cb/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 a43f89e..7b56e9a 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
@@ -190,7 +190,8 @@ public class VMClusterMonitor extends AbstractClusterMonitor {
ClusterInstance instance = (ClusterInstance) this.instanceIdToInstanceMap.
get(instanceContext.getId());
if ((instance.getStatus().getCode() <= ClusterStatus.Active.getCode()) ||
- (instance.getStatus() == ClusterStatus.Inactive && !hasStartupDependents) && !this.hasFaultyMember
+ (instance.getStatus() == ClusterStatus.Inactive && !hasStartupDependents)
+ && !this.hasFaultyMember
&& !stop) {
Runnable monitoringRunnable = new Runnable() {
http://git-wip-us.apache.org/repos/asf/stratos/blob/92b467cb/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 61fbf11..413df51 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
@@ -289,7 +289,7 @@ public abstract class ParentComponentMonitor extends Monitor {
//handling the killall scenario
if (this.parent != null) {
//send terminating to the parent. So that it will push terminating to its children
- ApplicationBuilder.handleGroupTerminatingEvent(this.appId, childId, instanceId);
+ ApplicationBuilder.handleGroupTerminatingEvent(this.appId, this.id, instanceId);
} else {
//if it is an application, send terminating event individually for children
sendTerminatingEventOnNotification(terminationList, childId, true, instanceId);
[3/3] stratos git commit: Merge branch '4.1.0-test' of
https://git-wip-us.apache.org/repos/asf/stratos into 4.1.0-test
Posted by re...@apache.org.
Merge branch '4.1.0-test' of https://git-wip-us.apache.org/repos/asf/stratos into 4.1.0-test
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/d933d596
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/d933d596
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/d933d596
Branch: refs/heads/4.1.0-test
Commit: d933d5961c41366a0a1c44f3e9177aa8d47a88a0
Parents: 92b467c ff1cda6
Author: reka <rt...@gmail.com>
Authored: Tue Dec 9 11:29:33 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Tue Dec 9 11:29:33 2014 +0530
----------------------------------------------------------------------
.../monitor/cluster/VMClusterMonitor.java | 22 +++++++
.../src/main/conf/drools/dependent-scaling.drl | 62 +++++++++++++++++---
2 files changed, 77 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/d933d596/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
----------------------------------------------------------------------