You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by sa...@apache.org on 2014/12/12 14:43:03 UTC
[2/2] stratos git commit: Dependent scaling related changes.
Dependent scaling related changes.
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/1ee24837
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/1ee24837
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/1ee24837
Branch: refs/heads/4.1.0-test
Commit: 1ee24837736a28465beda7a44b884aab309d8904
Parents: 23087d1
Author: sajhak <sa...@gmail.com>
Authored: Fri Dec 12 19:08:25 2014 +0530
Committer: sajhak <sa...@gmail.com>
Committed: Fri Dec 12 19:12:04 2014 +0530
----------------------------------------------------------------------
.../autoscaler/api/AutoScalerServiceImpl.java | 10 +-
.../dependency/DependencyBuilder.java | 96 ++----
.../parser/DefaultApplicationParser.java | 1 +
.../context/cluster/ClusterInstanceContext.java | 13 +-
.../context/cluster/VMClusterContext.java | 35 +-
.../AutoscalerTopologyEventReceiver.java | 4 +-
.../autoscaler/monitor/MonitorFactory.java | 7 +-
.../monitor/cluster/VMClusterMonitor.java | 2 +-
.../monitor/component/GroupMonitor.java | 30 +-
.../component/ParentComponentMonitor.java | 9 +-
.../stratos/autoscaler/pojo/Dependencies.java | 15 +-
.../autoscaler/rule/RuleTasksDelegator.java | 3 +
.../definitions/DependencyDefinitions.java | 15 +-
.../deployer/DefaultServiceGroupDeployer.java | 12 +-
.../domain/applications/DependencyOrder.java | 16 +-
.../src/main/conf/drools/scaling.drl | 9 +-
.../src/main/resources/AutoScalerService.wsdl | 344 +++++++++----------
17 files changed, 308 insertions(+), 313 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/1ee24837/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 41d027f..66f6be8 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
@@ -341,15 +341,15 @@ public class AutoScalerServiceImpl implements AutoScalerServiceInterface {
log.debug("StartupOrder: is null");
}
}
- String[] scalingOrders = dependencies.getScalingOrders();
+ String[] scalingDependents = dependencies.getScalingDependants();
if (log.isDebugEnabled()) {
- log.debug("ScalingOrders " + scalingOrders);
+ log.debug("ScalingDependent " + scalingDependents);
- if (scalingOrders != null) {
- log.debug("ScalingOrder:size " + scalingOrders.length);
+ if (scalingDependents != null) {
+ log.debug("ScalingDependents:size " + scalingDependents.length);
} else {
- log.debug("ScalingOrder: is null");
+ log.debug("ScalingDependent: is null");
}
}
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/1ee24837/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/DependencyBuilder.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/DependencyBuilder.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/DependencyBuilder.java
index 7c9f792..745aaa5 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/DependencyBuilder.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/DependencyBuilder.java
@@ -27,6 +27,7 @@ import org.apache.stratos.autoscaler.exception.application.DependencyBuilderExce
import org.apache.stratos.messaging.domain.applications.*;
import java.util.Collection;
+import java.util.HashSet;
import java.util.Set;
/**
@@ -131,69 +132,7 @@ public class DependencyBuilder {
}
}
- //Parsing the scaling order
- Set<ScalingDependentList> scalingDependentLists = dependencyOrder.getScalingDependentLists();
-
- if (scalingDependentLists != null) {
- for (ScalingDependentList scalingDependentList : scalingDependentLists) {
- foundContext = null;
- parentContext = null;
-
-
- for (String scalingOrderComponent : scalingDependentList.getScalingDependentListComponents()) {
-
-
- if (scalingOrderComponent != null){
- String applicationContextId = null;
- if (scalingOrderComponent.startsWith(Constants.GROUP + ".")) {
- //getting the group alias
- applicationContextId = getGroupFromStartupOrder(scalingOrderComponent);
-
- } else if (scalingOrderComponent.startsWith(Constants.CARTRIDGE + ".")) {
- //getting the cluster alias
- applicationContextId = getClusterFromStartupOrder(scalingOrderComponent);
-
- } else {
- log.warn("[Scaling Order]: " + scalingOrderComponent + " contains unknown reference");
- }
-
- if(applicationContextId != null) {
- ApplicationChildContext applicationContext
- = dependencyTree.findApplicationContextWithIdInPrimaryTree(applicationContextId);
-
- ApplicationChildContext existingApplicationContext =
- dependencyTree.findApplicationContextWithIdInScalingDependencyTree(applicationContextId);
- if (existingApplicationContext == null) {
-
- if (parentContext != null) {
-
- parentContext.setGroupScalingEnabled(true);
- //appending the scaling order to already added parent group/cluster
- parentContext.addApplicationContext(applicationContext);
- parentContext = applicationContext;
- if (log.isDebugEnabled()) {
- log.debug("Found an existing [dependency] " + parentContext.getId() +
- " and adding the [dependency] " + applicationContextId + " as the child");
- }
- } else {
- //adding list of scaling order to the dependency tree
- dependencyTree.addScalingApplicationContext(applicationContext);
- parentContext = applicationContext;
- }
- } else {
- String msg = "Scaling order is not consistent. It contains the group/cluster " +
- "which has been already used in another scaling order";
- throw new DependencyBuilderException(msg);
-
- }
- }
- }
- }
-
-
- }
- }
-
+
}
//adding the rest of the children who are independent to the top level
@@ -216,6 +155,36 @@ public class DependencyBuilder {
}
return dependencyTree;
}
+
+ /**
+ *
+ * Utility method to build scaling dependencies
+ *
+ */
+ public Set<String> buildScalingDependencies(ParentComponent component) {
+ log.info(" ******* in build scaling dependencies ************ "); // TODO - remove
+ Set<String> scalingDependencies = new HashSet<String>();
+ if(component.getDependencyOrder() != null && component.getDependencyOrder().getScalingDependents() != null) {
+ log.info(" ******* in build scaling dependencies 22 ************ "); // TODO - remove
+ for (String string : component.getDependencyOrder().getScalingDependents()) {
+
+ log.info(" ******* in build scaling dependencies 33 ************ "); // TODO - remove
+ if (string.startsWith(Constants.GROUP + ".")) {
+ //getting the group alias
+ scalingDependencies.add(getGroupFromStartupOrder(string));
+ } else if (string.startsWith(Constants.CARTRIDGE + ".")) {
+ //getting the cluster alias
+ String id = getClusterFromStartupOrder(string);
+ //getting the cluster-id from cluster alias
+ ClusterDataHolder clusterDataHolder = (ClusterDataHolder) component.getClusterDataMap().get(id);
+ scalingDependencies.add(clusterDataHolder.getClusterId());
+ } else {
+ log.warn("[Scaling Dependency]: " + string + " contains unknown reference");
+ }
+ }
+ }
+ return scalingDependencies;
+ }
/**
* Utility method to get the group alias from the startup order Eg: group.mygroup
@@ -238,4 +207,5 @@ public class DependencyBuilder {
}
+
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/1ee24837/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java
index eaaf19e..364274c 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java
@@ -453,6 +453,7 @@ public class DefaultApplicationParser implements ApplicationParser {
dependencyOrder.setStartupOrders(ParserUtils.convert(startupOrders, groupCtxt));
}
dependencyOrder.setTerminationBehaviour(getKillbehaviour(groupCtxt.getName(),serviceGroup));
+ //dependencyOrder.setScalingDependents(scalingDependents);
group.setDependencyOrder(dependencyOrder);
Map<String, ClusterDataHolder> clusterDataMap;
http://git-wip-us.apache.org/repos/asf/stratos/blob/1ee24837/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterInstanceContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterInstanceContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterInstanceContext.java
index ae63615..884c25e 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterInstanceContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterInstanceContext.java
@@ -64,9 +64,12 @@ public class ClusterInstanceContext extends InstanceContext {
private int currentPartitionIndex;
private String networkPartitionId;
+
+ private boolean hasScalingDependants;
public ClusterInstanceContext(String clusterInstanceId, String partitionAlgo,
- int min, int max, String networkPartitionId) {
+ int min, int max, String networkPartitionId,
+ boolean hasScalingDependants) {
super(clusterInstanceId);
this.networkPartitionId = networkPartitionId;
@@ -80,8 +83,7 @@ public class ClusterInstanceContext extends InstanceContext {
memoryConsumption = new MemoryConsumption();
requiredInstanceCountBasedOnStats = minInstanceCount;
requiredInstanceCountBasedOnDependencies = minInstanceCount;
-
-
+ this.hasScalingDependants = hasScalingDependants;
}
public List<ClusterLevelPartitionContext> getPartitionCtxts() {
@@ -459,4 +461,9 @@ public class ClusterInstanceContext extends InstanceContext {
public boolean isAverageRequestServedPerInstanceReset() {
return averageRequestServedPerInstanceReset;
}
+
+ public boolean isHasScalingDependants() {
+ return hasScalingDependants;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/1ee24837/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMClusterContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMClusterContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMClusterContext.java
index 0c1931e..fba52ac 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMClusterContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMClusterContext.java
@@ -18,6 +18,9 @@
*/
package org.apache.stratos.autoscaler.context.cluster;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.stratos.autoscaler.applications.ApplicationHolder;
@@ -41,16 +44,14 @@ import org.apache.stratos.messaging.domain.topology.Cluster;
import org.apache.stratos.messaging.domain.topology.Member;
import org.apache.stratos.messaging.domain.topology.MemberStatus;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
/*
* It holds the runtime data of a VM cluster
*/
public class VMClusterContext extends AbstractClusterContext {
- private static final Log log = LogFactory.getLog(VMClusterContext.class);
+ private static final long serialVersionUID = 17570842529682141L;
+
+ private static final Log log = LogFactory.getLog(VMClusterContext.class);
// Map<NetworkpartitionId, Network Partition Context>
protected Map<String, ClusterLevelNetworkPartitionContext> networkPartitionCtxts;
@@ -120,7 +121,7 @@ public class VMClusterContext extends AbstractClusterContext {
return null;
}
- public void addInstanceContext(String instanceId, Cluster cluster)
+ public void addInstanceContext(String instanceId, Cluster cluster, boolean hasGroupScalingDependent)
throws PolicyValidationException, PartitionValidationException {
ClusterLevelNetworkPartitionContext networkPartitionContext = null;
ClusterInstance clusterInstance = cluster.getInstanceContexts(instanceId);
@@ -147,10 +148,10 @@ public class VMClusterContext extends AbstractClusterContext {
if (clusterInstance.getPartitionId() != null) {
//Need to add partition Context based on the given one from the parent
networkPartitionContext = addPartition(clusterInstance, cluster,
- networkPartitionContext, null);
+ networkPartitionContext, null, hasGroupScalingDependent);
} else {
networkPartitionContext = parseDeploymentPolicy(clusterInstance, cluster,
- policy, networkPartitionContext);
+ policy, networkPartitionContext, hasGroupScalingDependent);
}
if (!networkPartitionCtxts.containsKey(clusterInstance.getNetworkPartitionId())) {
this.networkPartitionCtxts.put(clusterInstance.getNetworkPartitionId(),
@@ -168,7 +169,8 @@ public class VMClusterContext extends AbstractClusterContext {
ClusterInstance clusterInstance,
Cluster cluster,
ChildPolicy childPolicy,
- ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext)
+ ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext,
+ boolean hasGroupScalingDependent)
throws PolicyValidationException, PartitionValidationException {
if (childPolicy == null) {
@@ -197,16 +199,10 @@ public class VMClusterContext extends AbstractClusterContext {
ChildLevelNetworkPartition networkPartition;
networkPartition = childPolicy.
getChildLevelNetworkPartition(clusterInstance.getNetworkPartitionId());
- if (clusterLevelNetworkPartitionContext == null) {
- clusterLevelNetworkPartitionContext = new ClusterLevelNetworkPartitionContext(
- networkPartition.getId(),
- networkPartition.getPartitionAlgo(),
- networkPartition.getMin());
- }
-
+
//Fill cluster instance context with child level partitions
for (ChildLevelPartition childLevelPartition : networkPartition.getChildLevelPartitions()) {
- addPartition(clusterInstance, cluster, clusterLevelNetworkPartitionContext, childLevelPartition);
+ addPartition(clusterInstance, cluster, clusterLevelNetworkPartitionContext, childLevelPartition, hasGroupScalingDependent);
}
return clusterLevelNetworkPartitionContext;
}
@@ -215,7 +211,8 @@ public class VMClusterContext extends AbstractClusterContext {
ClusterInstance clusterInstance,
Cluster cluster,
ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext,
- ChildLevelPartition childLevelPartition)
+ ChildLevelPartition childLevelPartition,
+ boolean hasGroupScalingDependent)
throws PolicyValidationException, PartitionValidationException {
if (clusterLevelNetworkPartitionContext == null) {
String msg =
@@ -256,7 +253,7 @@ public class VMClusterContext extends AbstractClusterContext {
}
clusterInstanceContext = new ClusterInstanceContext(clusterInstance.getInstanceId(),
clusterLevelNetworkPartitionContext.getPartitionAlgorithm(),
- minInstances, maxInstances, nPartitionId);
+ minInstances, maxInstances, nPartitionId, hasGroupScalingDependent);
}
String partitionId;
if (childLevelPartition != null) {
http://git-wip-us.apache.org/repos/asf/stratos/blob/1ee24837/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 b1217db..8b41824 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
@@ -453,7 +453,9 @@ public class AutoscalerTopologyEventReceiver {
clusterMonitor.setClusterContext(clusterContext);
}
- clusterContext.addInstanceContext(instanceId, cluster);
+ log.info(" Cluster monitor has scaling dependents"
+ + " ["+clusterMonitor.hasGroupScalingDependent()+"] "); // TODO -- remove this log..
+ clusterContext.addInstanceContext(instanceId, cluster, clusterMonitor.hasGroupScalingDependent());
if (clusterMonitor.getInstance(instanceId) == null) {
// adding the same instance in topology to monitor as a reference
ClusterInstance clusterInstance1 = cluster.getInstanceContexts(instanceId);
http://git-wip-us.apache.org/repos/asf/stratos/blob/1ee24837/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 5ee986b..3f83741 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
@@ -125,13 +125,14 @@ public class MonitorFactory {
groupMonitor.setHasStartupDependents(false);
}
}
+
+
if (group.isGroupScalingEnabled()) {
groupMonitor.setGroupScalingEnabled(true);
} else if (parentMonitor instanceof GroupMonitor) {
- if (((GroupMonitor) parentMonitor).isGroupScalingEnabled() ||
- parentMonitor.hasGroupScalingDependent()) {
+ /*if (parentMonitor.hasGroupScalingDependent() || parentMonitor.getList --> not empty) {
groupMonitor.setHasGroupScalingDependent(true);
- }
+ }*/
}
} finally {
ApplicationHolder.releaseReadLock();
http://git-wip-us.apache.org/repos/asf/stratos/blob/1ee24837/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 9ebd24f..bd841ba 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
@@ -1148,7 +1148,7 @@ public class VMClusterMonitor extends AbstractClusterMonitor {
}
// create VMClusterContext and then add all the instanceContexts
- clusterContext.addInstanceContext(parentInstanceId, cluster);
+ clusterContext.addInstanceContext(parentInstanceId, cluster, this.hasGroupScalingDependent());
if (this.getInstance(clusterInstance.getInstanceId()) == null) {
this.addInstance(clusterInstance);
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/1ee24837/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 35cb6c5..0928e93 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
@@ -52,9 +52,11 @@ import org.apache.stratos.messaging.domain.topology.ClusterStatus;
import org.apache.stratos.messaging.domain.topology.lifecycle.LifeCycleState;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Set;
/**
* This is GroupMonitor to monitor the group which consists of
@@ -263,23 +265,19 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
+ ", [event] " + scalingEvent.getId() + ", [group instance] " + scalingEvent.getInstanceId());
}
- //find the child context of this group, from scaling dependency tree
- GroupChildContext currentChildContextInScalingTree =
- (GroupChildContext) scalingDependencyTree.findApplicationContextWithIdInScalingDependencyTree(id);
-
+ //find the child context of this group,
//Notifying children, if this group has scaling dependencies
- if (currentChildContextInScalingTree.isGroupScalingEnabled()) {
- for (ApplicationChildContext applicationChildContext :
- currentChildContextInScalingTree.getApplicationChildContextList()) {
-
- //Get group monitor so that it can notify it's children
- Monitor monitor = aliasToActiveMonitorsMap.get(applicationChildContext.getId());
-
- if (monitor instanceof GroupMonitor || monitor instanceof ApplicationMonitor) {
-
- monitor.onParentScalingEvent(scalingEvent);
- }
- }
+ if(scalingDependencies != null && !scalingDependencies.isEmpty()) {
+ // has dependencies. Notify children
+ if (aliasToActiveMonitorsMap != null
+ && !aliasToActiveMonitorsMap.values().isEmpty()) {
+ for (String dependent : scalingDependencies) {
+ Monitor monitor = aliasToActiveMonitorsMap.get(dependent);
+ if (monitor instanceof GroupMonitor || monitor instanceof ApplicationMonitor) {
+ monitor.onParentScalingEvent(scalingEvent);
+ }
+ }
+ }
}
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/1ee24837/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 33bc4cb..3912029 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
@@ -44,6 +44,7 @@ import org.apache.stratos.autoscaler.monitor.cluster.VMClusterMonitor;
import org.apache.stratos.autoscaler.util.ServiceReferenceHolder;
import org.apache.stratos.messaging.domain.applications.GroupStatus;
import org.apache.stratos.messaging.domain.applications.ParentComponent;
+import org.apache.stratos.messaging.domain.applications.ScalingDependentList;
import org.apache.stratos.messaging.domain.instance.ClusterInstance;
import org.apache.stratos.messaging.domain.instance.Instance;
import org.apache.stratos.messaging.domain.topology.ClusterStatus;
@@ -65,7 +66,7 @@ public abstract class ParentComponentMonitor extends Monitor {
//The monitors dependency tree with all the start-able/kill-able dependencies
protected DependencyTree startupDependencyTree;
//The monitors dependency tree with all the scaling dependencies
- protected DependencyTree scalingDependencyTree;
+ protected Set<String> scalingDependencies;
//monitors map, key=GroupAlias/clusterId and value=GroupMonitor/AbstractClusterMonitor
protected Map<String, Monitor> aliasToActiveMonitorsMap;
//Pending monitors list
@@ -84,8 +85,7 @@ public abstract class ParentComponentMonitor extends Monitor {
this.id = component.getUniqueIdentifier();
//Building the startup dependencies for this monitor within the immediate children
startupDependencyTree = DependencyBuilder.getInstance().buildDependency(component);
- //Building the scaling dependencies for this monitor within the immediate children
- scalingDependencyTree = DependencyBuilder.getInstance().buildDependency(component);
+ scalingDependencies = DependencyBuilder.getInstance().buildScalingDependencies(component);
}
/**
@@ -706,5 +706,8 @@ private class MonitorAdder implements Runnable {
}
}
+ public Set<String> getScalingDependencies() {
+ return scalingDependencies;
+ }
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/1ee24837/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/Dependencies.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/Dependencies.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/Dependencies.java
index da63a4d..a9e3548 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/Dependencies.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/Dependencies.java
@@ -26,7 +26,7 @@ public class Dependencies implements Serializable {
private String [] startupOrders;
- private String [] scalingOrders;
+ private String [] scalingDependants;
private String terminationBehaviour;
@@ -46,11 +46,12 @@ public class Dependencies implements Serializable {
this.startupOrders = startupOrders;
}
- public String[] getScalingOrders() {
- return scalingOrders;
- }
+ public String[] getScalingDependants() {
+ return scalingDependants;
+ }
- public void setScalingOrders(String[] scalingOrders) {
- this.scalingOrders = scalingOrders;
- }
+ public void setScalingDependants(String[] scalingDependants) {
+ this.scalingDependants = scalingDependants;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/1ee24837/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java
index 0e89a80..09dd518 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java
@@ -309,6 +309,9 @@ public class RuleTasksDelegator {
public void delegateScalingDependencyNotification(String clusterId, String networkPartitionId, float factor) {
+ if(log.isDebugEnabled()) {
+ log.debug("In Delegate scaling dependent notification..");
+ }
//Notify parent for checking scaling dependencies
AbstractClusterMonitor clusterMonitor = AutoscalerContext.getInstance().getClusterMonitor(clusterId);
if (clusterMonitor instanceof VMClusterMonitor) {
http://git-wip-us.apache.org/repos/asf/stratos/blob/1ee24837/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/grouping/definitions/DependencyDefinitions.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/grouping/definitions/DependencyDefinitions.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/grouping/definitions/DependencyDefinitions.java
index 3b71e8e..d6934a9 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/grouping/definitions/DependencyDefinitions.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/grouping/definitions/DependencyDefinitions.java
@@ -33,7 +33,7 @@ public class DependencyDefinitions implements Serializable {
private List<String> startupOrders;
- private List<String> scalingOrders;
+ private List<String> scalingDependants;
private String terminationBehaviour;
@@ -53,11 +53,12 @@ public class DependencyDefinitions implements Serializable {
this.startupOrders = startupOrders;
}
- public List<String> getScalingOrders() {
- return scalingOrders;
- }
+ public List<String> getScalingDependants() {
+ return scalingDependants;
+ }
- public void setScalingOrders(List<String> scalingOrders) {
- this.scalingOrders = scalingOrders;
- }
+ public void setScalingDependants(List<String> scalingDependants) {
+ this.scalingDependants = scalingDependants;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/1ee24837/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/grouping/deployer/DefaultServiceGroupDeployer.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/grouping/deployer/DefaultServiceGroupDeployer.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/grouping/deployer/DefaultServiceGroupDeployer.java
index 891a85f..d075775 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/grouping/deployer/DefaultServiceGroupDeployer.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/grouping/deployer/DefaultServiceGroupDeployer.java
@@ -312,6 +312,10 @@ public class DefaultServiceGroupDeployer implements ServiceGroupDeployer {
// validate termination behavior
validateTerminationBehavior(depDefs.getTerminationBehaviour());
deps.setTerminationBehaviour(depDefs.getTerminationBehaviour());
+ if (depDefs.getScalingDependants() != null) {
+ deps.setScalingDependants(depDefs.getScalingDependants()
+ .toArray(new String[depDefs.getScalingDependants().size()]));
+ }
servicegroup.setDependencies(deps);
}
@@ -340,10 +344,10 @@ public class DefaultServiceGroupDeployer implements ServiceGroupDeployer {
depsDef.setStartupOrders(startupOrdersDef);
}
- String [] scalingOrders = deps.getScalingOrders();
- if (scalingOrders != null && scalingOrders[0] != null) {
- List<String> scalingOrdersDef = Arrays.asList(scalingOrders);
- depsDef.setStartupOrders(scalingOrdersDef);
+ String [] scalingDependants = deps.getScalingDependants();
+ if (scalingDependants != null && scalingDependants[0] != null) {
+ List<String> scalingDependenciesDef = Arrays.asList(scalingDependants);
+ depsDef.setScalingDependants(scalingDependenciesDef);
}
depsDef.setTerminationBehaviour(deps.getTerminationBehaviour());
http://git-wip-us.apache.org/repos/asf/stratos/blob/1ee24837/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/DependencyOrder.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/DependencyOrder.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/DependencyOrder.java
index 127cd4f..1225fe0 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/DependencyOrder.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/DependencyOrder.java
@@ -28,7 +28,7 @@ public class DependencyOrder implements Serializable {
private Set<StartupOrder> startupOrders;
- private Set<ScalingDependentList> scalingDependentLists;
+ private Set<String> scalingDependents;
private String terminationBehaviour;
@@ -52,11 +52,13 @@ public class DependencyOrder implements Serializable {
this.startupOrders = startupOrders;
}
- public Set<ScalingDependentList> getScalingDependentLists() {
- return scalingDependentLists;
- }
+ public Set<String> getScalingDependents() {
+ return scalingDependents;
+ }
- public void setScalingDependentLists(Set<ScalingDependentList> scalingDependentLists) {
- this.scalingDependentLists = scalingDependentLists;
- }
+ public void setScalingDependents(Set<String> scalingDependents) {
+ this.scalingDependents = scalingDependents;
+ }
+
+
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/1ee24837/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl
----------------------------------------------------------------------
diff --git a/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl b/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl
index 0b70dfd..346dd00 100644
--- a/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl
+++ b/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl
@@ -129,7 +129,7 @@ dialect "mvel"
// delegator.delegateScalingDependencyNotification(clusterId, clusterInstanceContext.getId(), factor);
boolean partitionsAvailable = true;
- int count = 0;
+ int count = 0;
while(count != additionalInstances && partitionsAvailable){
ClusterLevelPartitionContext partitionContext = (ClusterLevelPartitionContext)autoscaleAlgorithm.getNextScaleUpPartitionContext(clusterInstanceContext.getPartitionCtxtsAsAnArray());
@@ -137,7 +137,12 @@ dialect "mvel"
log.info("[scale-up] Partition available, hence trying to spawn an instance to scale up!" );
log.debug("[scale-up] " + " [partition] " + partitionContext.getPartitionId() + " [cluster] " + clusterId );
- delegator.delegateSpawn(partitionContext, clusterId, clusterInstanceContext.getId(), isPrimary);
+ log.debug("[scale-up] " + " has scaling dependents " + clusterInstanceContext.isHasScalingDependants() + " [cluster] " + clusterId );
+ if(clusterInstanceContext.isHasScalingDependants()) {
+ delegator.delegateScalingDependencyNotification(clusterId, clusterInstanceContext.getNetworkPartitionId(), factor);
+ } else {
+ delegator.delegateSpawn(partitionContext, clusterId, clusterInstanceContext.getId(), isPrimary);
+ }
count++;
} else {