You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by la...@apache.org on 2014/12/15 05:12:31 UTC
[2/3] stratos git commit: Adding ScalingOverMaxEvent notification flow
Adding ScalingOverMaxEvent notification flow
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/a33869fd
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/a33869fd
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/a33869fd
Branch: refs/heads/4.1.0-test
Commit: a33869fd759485c2103cc877927bce7184177c5c
Parents: 7c6b466
Author: Lahiru Sandaruwan <la...@apache.org>
Authored: Mon Dec 15 09:27:39 2014 +0530
Committer: Lahiru Sandaruwan <la...@apache.org>
Committed: Mon Dec 15 09:27:39 2014 +0530
----------------------------------------------------------------------
.../context/cluster/ClusterInstanceContext.java | 2 +-
.../autoscaler/monitor/EventHandler.java | 8 +++++++
.../monitor/cluster/VMClusterMonitor.java | 11 ++++++++++
.../monitor/component/ApplicationMonitor.java | 6 +++++
.../monitor/component/GroupMonitor.java | 6 +++++
.../builder/MonitorStatusEventBuilder.java | 14 ++++++++++++
.../autoscaler/rule/RuleTasksDelegator.java | 23 +++++++++++++++++---
7 files changed, 66 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/a33869fd/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 0f62e64..86ed605 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
@@ -474,7 +474,7 @@ public class ClusterInstanceContext extends InstanceContext {
return clusterId;
}
- public boolean isGroupScalingEnabledSubtree() {
+ public boolean isInGroupScalingEnabledSubtree() {
return groupScalingEnabledSubtree;
}
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/a33869fd/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/EventHandler.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/EventHandler.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/EventHandler.java
index 866a8f7..7805a13 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/EventHandler.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/EventHandler.java
@@ -21,6 +21,7 @@ package org.apache.stratos.autoscaler.monitor;
import org.apache.stratos.autoscaler.exception.application.MonitorNotFoundException;
import org.apache.stratos.autoscaler.monitor.events.ScalingEvent;
import org.apache.stratos.autoscaler.monitor.events.MonitorStatusEvent;
+import org.apache.stratos.autoscaler.monitor.events.ScalingOverMaxEvent;
/**
* Event Handler to notify the observer/to receive notification
@@ -49,6 +50,13 @@ public interface EventHandler {
public abstract void onChildScalingEvent(ScalingEvent scalingEvent);
/**
+ * Triggered when a scaling over max event is received from a child.
+ *
+ * @param scalingOverMaxEvent
+ */
+ public abstract void onChildScalingOverMaxEvent(ScalingOverMaxEvent scalingOverMaxEvent);
+
+ /**
* Triggered when a scaling event is received from the parent.
*
* @param scalingEvent
http://git-wip-us.apache.org/repos/asf/stratos/blob/a33869fd/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 71009d3..7401a3b 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
@@ -36,6 +36,7 @@ import org.apache.stratos.autoscaler.exception.partition.PartitionValidationExce
import org.apache.stratos.autoscaler.exception.policy.PolicyValidationException;
import org.apache.stratos.autoscaler.monitor.events.ScalingEvent;
import org.apache.stratos.autoscaler.monitor.events.MonitorStatusEvent;
+import org.apache.stratos.autoscaler.monitor.events.ScalingOverMaxEvent;
import org.apache.stratos.autoscaler.monitor.events.builder.MonitorStatusEventBuilder;
import org.apache.stratos.autoscaler.rule.AutoscalerRuleEvaluator;
import org.apache.stratos.autoscaler.status.processor.cluster.ClusterStatusActiveProcessor;
@@ -389,6 +390,11 @@ public class VMClusterMonitor extends AbstractClusterMonitor {
}
@Override
+ public void onChildScalingOverMaxEvent(ScalingOverMaxEvent scalingOverMaxEvent) {
+
+ }
+
+ @Override
public void onParentScalingEvent(ScalingEvent scalingEvent) {
if (log.isDebugEnabled()) {
@@ -447,6 +453,11 @@ public class VMClusterMonitor extends AbstractClusterMonitor {
MonitorStatusEventBuilder.handleClusterScalingEvent(this.parent, networkPartitionId, instanceId, factor, this.id, serviceType);
}
+ public void sendScalingOverMaxEvent(String networkPartitionId, String instanceId, float factor) {
+
+ MonitorStatusEventBuilder.handleScalingOverMaxEvent(this.parent, networkPartitionId, instanceId, factor, this.id, serviceType);
+ }
+
@Override
public void handleGradientOfLoadAverageEvent(
GradientOfLoadAverageEvent gradientOfLoadAverageEvent) {
http://git-wip-us.apache.org/repos/asf/stratos/blob/a33869fd/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java
index 9573a95..107adff 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java
@@ -33,6 +33,7 @@ import org.apache.stratos.autoscaler.monitor.cluster.VMClusterMonitor;
import org.apache.stratos.autoscaler.monitor.events.ApplicationStatusEvent;
import org.apache.stratos.autoscaler.monitor.events.ScalingEvent;
import org.apache.stratos.autoscaler.monitor.events.MonitorStatusEvent;
+import org.apache.stratos.autoscaler.monitor.events.ScalingOverMaxEvent;
import org.apache.stratos.autoscaler.monitor.events.builder.MonitorStatusEventBuilder;
import org.apache.stratos.autoscaler.pojo.policy.PolicyManager;
import org.apache.stratos.autoscaler.pojo.policy.deployment.DeploymentPolicy;
@@ -220,6 +221,11 @@ public class ApplicationMonitor extends ParentComponentMonitor {
}
@Override
+ public void onChildScalingOverMaxEvent(ScalingOverMaxEvent scalingOverMaxEvent) {
+
+ }
+
+ @Override
public void onParentScalingEvent(ScalingEvent scalingEvent) {
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/a33869fd/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 a73fce3..7c02da2 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
@@ -35,6 +35,7 @@ import org.apache.stratos.autoscaler.monitor.cluster.VMClusterMonitor;
import org.apache.stratos.autoscaler.monitor.events.GroupStatusEvent;
import org.apache.stratos.autoscaler.monitor.events.ScalingEvent;
import org.apache.stratos.autoscaler.monitor.events.MonitorStatusEvent;
+import org.apache.stratos.autoscaler.monitor.events.ScalingOverMaxEvent;
import org.apache.stratos.autoscaler.monitor.events.builder.MonitorStatusEventBuilder;
import org.apache.stratos.autoscaler.pojo.policy.PolicyManager;
import org.apache.stratos.autoscaler.pojo.policy.deployment.ChildPolicy;
@@ -290,6 +291,11 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
}
@Override
+ public void onChildScalingOverMaxEvent(ScalingOverMaxEvent scalingOverMaxEvent) {
+
+ }
+
+ @Override
public void onParentScalingEvent(ScalingEvent scalingEvent) {
//Notify all children about scaling
http://git-wip-us.apache.org/repos/asf/stratos/blob/a33869fd/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/builder/MonitorStatusEventBuilder.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/builder/MonitorStatusEventBuilder.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/builder/MonitorStatusEventBuilder.java
index 9db0162..913f71e 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/builder/MonitorStatusEventBuilder.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/builder/MonitorStatusEventBuilder.java
@@ -62,6 +62,16 @@ public class MonitorStatusEventBuilder {
notifyParent(parent, scalingEvent);
}
+ public static void handleScalingOverMaxEvent(ParentComponentMonitor parent,
+ String networkPartitionId, String instanceId, float factor,
+ String appId, String serviceName) {
+
+ //Send notifications to parent of the cluster monitor
+ ScalingOverMaxEvent scalingOverMaxEvent = new ScalingOverMaxEvent(appId, networkPartitionId, instanceId, factor,
+ serviceName) ;
+ notifyParent(parent, scalingOverMaxEvent);
+ }
+
private static void notifyParent(ParentComponentMonitor parent, MonitorStatusEvent statusEvent) {
parent.onChildStatusEvent(statusEvent);
}
@@ -100,6 +110,10 @@ public class MonitorStatusEventBuilder {
parent.onChildScalingEvent(scalingEvent);
}
+ private static void notifyParent(ParentComponentMonitor parent, ScalingOverMaxEvent scalingOverMaxEvent) {
+ parent.onChildScalingOverMaxEvent(scalingOverMaxEvent);
+ }
+
public static void notifyChildren (ParentComponentMonitor componentMonitor, ScalingEvent scalingEvent) {
for (Monitor activeChildMonitor : componentMonitor.getAliasToActiveMonitorsMap().values()) {
activeChildMonitor.onParentScalingEvent(scalingEvent);
http://git-wip-us.apache.org/repos/asf/stratos/blob/a33869fd/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 415bf11..02ab5f3 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
@@ -310,9 +310,26 @@ public class RuleTasksDelegator {
public void delegateScalingDependencyNotification(String clusterId, String networkPartitionId, String instanceId,
int requiredInstanceCount, int minimumInstanceCount) {
- if(log.isDebugEnabled()) {
- log.debug("Scaling dependent notification..");
- }
+ if(log.isDebugEnabled()) {
+ log.debug("Scaling dependent notification..");
+ }
+ //Notify parent for checking scaling dependencies
+ AbstractClusterMonitor clusterMonitor = AutoscalerContext.getInstance().getClusterMonitor(clusterId);
+ float factor = requiredInstanceCount / minimumInstanceCount;
+ if (clusterMonitor instanceof VMClusterMonitor) {
+
+ VMClusterMonitor vmClusterMonitor = (VMClusterMonitor) clusterMonitor;
+ vmClusterMonitor.sendClusterScalingEvent(networkPartitionId, instanceId, factor);
+ }
+
+ }
+
+ public void delegateScalingOverMaxNotification(String clusterId, String networkPartitionId, String instanceId,
+ int requiredInstanceCount, int minimumInstanceCount) {
+
+ if(log.isDebugEnabled()) {
+ log.debug("Scaling dependent notification..");
+ }
//Notify parent for checking scaling dependencies
AbstractClusterMonitor clusterMonitor = AutoscalerContext.getInstance().getClusterMonitor(clusterId);
float factor = requiredInstanceCount / minimumInstanceCount;