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/18 10:51:30 UTC
stratos git commit: refining networkpatitioncontext and support
dependent scaling in applicaiton monitor
Repository: stratos
Updated Branches:
refs/heads/master d858feb17 -> 1c6642b46
refining networkpatitioncontext and support dependent scaling in applicaiton monitor
Conflicts:
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/1c6642b4
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/1c6642b4
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/1c6642b4
Branch: refs/heads/master
Commit: 1c6642b465a99d38fdb9526d7fa705ceaee780fa
Parents: d858feb
Author: reka <rt...@gmail.com>
Authored: Thu Dec 18 15:04:15 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Thu Dec 18 15:21:05 2014 +0530
----------------------------------------------------------------------
.../applications/topic/ApplicationBuilder.java | 13 +-
.../autoscaler/context/InstanceContext.java | 62 ++++++
.../context/cluster/VMClusterContext.java | 6 +-
.../context/group/GroupInstanceContext.java | 55 +----
...ApplicationLevelNetworkPartitionContext.java | 37 +---
.../ClusterLevelNetworkPartitionContext.java | 38 +---
.../GroupLevelNetworkPartitionContext.java | 42 +---
.../network/NetworkPartitionContext.java | 44 ++++
.../AutoscalerTopologyEventReceiver.java | 2 +-
.../monitor/cluster/VMClusterMonitor.java | 23 +-
.../monitor/component/ApplicationMonitor.java | 143 ++++++-------
.../monitor/component/GroupMonitor.java | 211 ++-----------------
.../component/ParentComponentMonitor.java | 154 ++++++++++++--
.../autoscaler/rule/RuleTasksDelegator.java | 8 +-
.../cluster/ClusterStatusActiveProcessor.java | 4 +-
.../cluster/ClusterStatusInactiveProcessor.java | 5 +-
.../ClusterStatusTerminatedProcessor.java | 7 +-
17 files changed, 394 insertions(+), 460 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/1c6642b4/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 e842a6e..ffaa00c 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
@@ -25,7 +25,6 @@ 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.context.partition.network.GroupLevelNetworkPartitionContext;
-import org.apache.stratos.autoscaler.event.publisher.ClusterStatusEventPublisher;
import org.apache.stratos.autoscaler.exception.policy.InvalidPolicyException;
import org.apache.stratos.autoscaler.monitor.Monitor;
import org.apache.stratos.autoscaler.monitor.component.ApplicationMonitor;
@@ -33,15 +32,10 @@ import org.apache.stratos.autoscaler.monitor.component.GroupMonitor;
import org.apache.stratos.autoscaler.pojo.policy.PolicyManager;
import org.apache.stratos.messaging.domain.applications.*;
import org.apache.stratos.messaging.domain.instance.ApplicationInstance;
-import org.apache.stratos.messaging.domain.instance.ClusterInstance;
import org.apache.stratos.messaging.domain.instance.GroupInstance;
-import org.apache.stratos.messaging.domain.topology.Cluster;
-import org.apache.stratos.messaging.domain.topology.Service;
-import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
import org.wso2.carbon.base.MultitenantConstants;
import org.wso2.carbon.context.PrivilegedCarbonContext;
-import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
@@ -251,7 +245,7 @@ public class ApplicationBuilder {
getAppMonitor(appId);
applicationMonitor.getNetworkPartitionContext(applicationInstance.
getNetworkPartitionId()).
- removeClusterApplicationContext(instanceId);
+ removeInstanceContext(instanceId);
applicationMonitor.removeInstance(instanceId);
application.removeInstance(instanceId);
//removing the monitor
@@ -335,8 +329,9 @@ public class ApplicationBuilder {
}
}
GroupLevelNetworkPartitionContext networkPartitionContext =
- monitor.getNetworkPartitionContext(groupInstance.getNetworkPartitionId());
- networkPartitionContext.removeClusterGroupContext(instanceId);
+ (GroupLevelNetworkPartitionContext) monitor.
+ getNetworkPartitionContext(groupInstance.getNetworkPartitionId());
+ networkPartitionContext.removeInstanceContext(instanceId);
if (groupInstance.getPartitionId() != null) {
networkPartitionContext.getPartitionCtxt(groupInstance.getPartitionId()).
removeActiveInstance(groupInstance);
http://git-wip-us.apache.org/repos/asf/stratos/blob/1c6642b4/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/InstanceContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/InstanceContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/InstanceContext.java
index 8d4ef27..a5cf689 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/InstanceContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/InstanceContext.java
@@ -18,6 +18,12 @@
*/
package org.apache.stratos.autoscaler.context;
+import org.apache.stratos.autoscaler.monitor.events.ScalingEvent;
+import org.apache.stratos.autoscaler.monitor.events.ScalingOverMaxEvent;
+
+import java.util.HashMap;
+import java.util.Map;
+
/**
* This will hold the instances related info.
*/
@@ -26,8 +32,16 @@ public abstract class InstanceContext {
protected String parentInstanceId;
+ //key=id of the child, value=ScalingEvent
+ private Map<String, ScalingEvent> idToScalingEvent;
+ //key=id of the child, value=MaxOutScalingEvent
+ private Map<String, ScalingOverMaxEvent> idToScalingOverMaxEvent;
+
+
public InstanceContext(String id) {
this.id = id;
+ setIdToScalingEvent(new HashMap<String, ScalingEvent>());
+ setIdToScalingOverMaxEvent(new HashMap<String, ScalingOverMaxEvent>());
}
public String getId() {
@@ -45,4 +59,52 @@ public abstract class InstanceContext {
public void setParentInstanceId(String parentInstanceId) {
this.parentInstanceId = parentInstanceId;
}
+
+ public Map<String, ScalingEvent> getIdToScalingEvent() {
+ return idToScalingEvent;
+ }
+
+ public void setIdToScalingEvent(Map<String, ScalingEvent> idToScalingEvent) {
+ this.idToScalingEvent = idToScalingEvent;
+ }
+
+ public Map<String, ScalingOverMaxEvent> getIdToScalingOverMaxEvent() {
+ return idToScalingOverMaxEvent;
+ }
+
+ public void setIdToScalingOverMaxEvent(Map<String, ScalingOverMaxEvent> idToScalingOverMaxEvent) {
+ this.idToScalingOverMaxEvent = idToScalingOverMaxEvent;
+ }
+
+ public void removeScalingEvent(String id) {
+ this.idToScalingEvent.remove(id);
+ }
+
+ public void addScalingEvent(ScalingEvent scalingEvent) {
+ this.idToScalingEvent.put(scalingEvent.getId(), scalingEvent);
+ }
+
+ public ScalingEvent getScalingEvent(String id) {
+ return this.idToScalingEvent.get(id);
+ }
+
+ public ScalingOverMaxEvent getScalingMaxEvent(String id) {
+ return this.idToScalingOverMaxEvent.get(id);
+ }
+
+ public void removeScalingOverMaxEvent(String id) {
+ this.idToScalingOverMaxEvent.remove(id);
+ }
+
+ public void addScalingOverMaxEvent(ScalingOverMaxEvent scalingOverMaxEvent) {
+ this.idToScalingOverMaxEvent.put(scalingOverMaxEvent.getId(), scalingOverMaxEvent);
+ }
+
+ public boolean containsScalingEvent(String id) {
+ return this.idToScalingEvent.containsKey(id);
+ }
+
+ public boolean containsScalingOverMaxEvent(String id) {
+ return this.idToScalingOverMaxEvent.containsKey(id);
+ }
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/1c6642b4/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 3f0feb4..ba90d8f 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
@@ -236,8 +236,8 @@ public class VMClusterContext extends AbstractClusterContext {
throw new PolicyValidationException(msg);
}
- ClusterInstanceContext clusterInstanceContext = clusterLevelNetworkPartitionContext.
- getClusterInstanceContext(clusterInstance.getInstanceId());
+ ClusterInstanceContext clusterInstanceContext = (ClusterInstanceContext) clusterLevelNetworkPartitionContext.
+ getInstanceContext(clusterInstance.getInstanceId());
int maxInstances = 1;
if (clusterInstanceContext == null) {
int minInstances = 1;
@@ -294,7 +294,7 @@ public class VMClusterContext extends AbstractClusterContext {
clusterLevelPartitionContext.getPartitionId()));
}
- clusterLevelNetworkPartitionContext.addClusterInstanceContext(clusterInstanceContext);
+ clusterLevelNetworkPartitionContext.addInstanceContext(clusterInstanceContext);
if (log.isInfoEnabled()) {
log.info(String.format("Cluster Instance context has been added: " +
http://git-wip-us.apache.org/repos/asf/stratos/blob/1c6642b4/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/group/GroupInstanceContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/group/GroupInstanceContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/group/GroupInstanceContext.java
index 1f4ae6f..775b5f1 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/group/GroupInstanceContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/group/GroupInstanceContext.java
@@ -35,16 +35,11 @@ public class GroupInstanceContext extends InstanceContext {
//partitions of this network partition
private final List<GroupLevelPartitionContext> partitionCtxts;
- //key=id of the child, value=ScalingEvent
- private Map<String, ScalingEvent> idToScalingEvent;
- //key=id of the child, value=MaxOutScalingEvent
- private Map<String, ScalingOverMaxEvent> idToScalingOverMaxEvent;
public GroupInstanceContext(String id) {
super(id);
partitionCtxts = new ArrayList<GroupLevelPartitionContext>();
- setIdToScalingEvent(new HashMap<String, ScalingEvent>());
- setIdToScalingOverMaxEvent(new HashMap<String, ScalingOverMaxEvent>());
+
}
public List<GroupLevelPartitionContext> getPartitionCtxts() {
@@ -86,52 +81,4 @@ public class GroupInstanceContext extends InstanceContext {
}
return 0;
}
-
- public Map<String, ScalingEvent> getIdToScalingEvent() {
- return idToScalingEvent;
- }
-
- public void setIdToScalingEvent(Map<String, ScalingEvent> idToScalingEvent) {
- this.idToScalingEvent = idToScalingEvent;
- }
-
- public Map<String, ScalingOverMaxEvent> getIdToScalingOverMaxEvent() {
- return idToScalingOverMaxEvent;
- }
-
- public void setIdToScalingOverMaxEvent(Map<String, ScalingOverMaxEvent> idToScalingOverMaxEvent) {
- this.idToScalingOverMaxEvent = idToScalingOverMaxEvent;
- }
-
- public void removeScalingEvent(String id) {
- this.idToScalingEvent.remove(id);
- }
-
- public void addScalingEvent(ScalingEvent scalingEvent) {
- this.idToScalingEvent.put(scalingEvent.getId(), scalingEvent);
- }
-
- public ScalingEvent getScalingEvent(String id) {
- return this.idToScalingEvent.get(id);
- }
-
- public ScalingOverMaxEvent getScalingMaxEvent(String id) {
- return this.idToScalingOverMaxEvent.get(id);
- }
-
- public void removeScalingOverMaxEvent(String id) {
- this.idToScalingOverMaxEvent.remove(id);
- }
-
- public void addScalingOverMaxEvent(ScalingOverMaxEvent scalingOverMaxEvent) {
- this.idToScalingOverMaxEvent.put(scalingOverMaxEvent.getId(), scalingOverMaxEvent);
- }
-
- public boolean containsScalingEvent(String id) {
- return this.idToScalingEvent.containsKey(id);
- }
-
- public boolean containsScalingOverMaxEvent(String id) {
- return this.idToScalingOverMaxEvent.containsKey(id);
- }
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/1c6642b4/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ApplicationLevelNetworkPartitionContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ApplicationLevelNetworkPartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ApplicationLevelNetworkPartitionContext.java
index b894fce..3e3edf5 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ApplicationLevelNetworkPartitionContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ApplicationLevelNetworkPartitionContext.java
@@ -21,7 +21,6 @@ package org.apache.stratos.autoscaler.context.partition.network;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.stratos.autoscaler.context.application.ApplicationInstanceContext;
-import org.apache.stratos.messaging.domain.instance.ApplicationInstance;
import java.io.Serializable;
import java.util.HashMap;
@@ -33,36 +32,17 @@ import java.util.Map;
*/
public class ApplicationLevelNetworkPartitionContext extends NetworkPartitionContext implements Serializable {
private static final Log log = LogFactory.getLog(ApplicationLevelNetworkPartitionContext.class);
- private final String id;
private boolean createdOnBurst;
- //group instances kept inside a partition
- private Map<String, ApplicationInstanceContext> instanceIdToInstanceContextMap;
-
public ApplicationLevelNetworkPartitionContext(String id) {
- this.id = id;
- this.instanceIdToInstanceContextMap = new HashMap<String, ApplicationInstanceContext>();
- }
-
- public Map<String, ApplicationInstanceContext> getInstanceIdToInstanceContextMap() {
- return instanceIdToInstanceContextMap;
- }
-
- public void setInstanceIdToInstanceContextMap(Map<String, ApplicationInstanceContext> instanceIdToInstanceContextMap) {
- this.instanceIdToInstanceContextMap = instanceIdToInstanceContextMap;
+ super(id);
}
- public void addInstanceContext(ApplicationInstanceContext context) {
- this.instanceIdToInstanceContextMap.put(context.getId(), context);
-
- }
-
-
public int hashCode() {
final int prime = 31;
int result = 1;
- result = prime * result + ((this.id == null) ? 0 : this.id.hashCode());
+ result = prime * result + ((super.getId() == null) ? 0 : super.getId().hashCode());
return result;
}
@@ -79,11 +59,11 @@ public class ApplicationLevelNetworkPartitionContext extends NetworkPartitionCon
return false;
}
final ApplicationLevelNetworkPartitionContext other = (ApplicationLevelNetworkPartitionContext) obj;
- if (this.id == null) {
- if (other.id != null) {
+ if (super.getId() == null) {
+ if (super.getId() != null) {
return false;
}
- } else if (!this.id.equals(other.id)) {
+ } else if (!super.getId().equals(super.getId())) {
return false;
}
return true;
@@ -91,11 +71,11 @@ public class ApplicationLevelNetworkPartitionContext extends NetworkPartitionCon
@Override
public String toString() {
- return "ApplicationNetworkPartitionContext [id=" + id + "]";
+ return "ApplicationNetworkPartitionContext [id=" + super.getId() + "]";
}
public String getId() {
- return id;
+ return super.getId();
}
public boolean isCreatedOnBurst() {
@@ -106,7 +86,4 @@ public class ApplicationLevelNetworkPartitionContext extends NetworkPartitionCon
this.createdOnBurst = createdOnBurst;
}
- public void removeClusterApplicationContext(String instanceId) {
- this.instanceIdToInstanceContextMap.remove(instanceId);
- }
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/1c6642b4/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ClusterLevelNetworkPartitionContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ClusterLevelNetworkPartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ClusterLevelNetworkPartitionContext.java
index c6af5f7..21234b0 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ClusterLevelNetworkPartitionContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ClusterLevelNetworkPartitionContext.java
@@ -35,25 +35,19 @@ public class ClusterLevelNetworkPartitionContext extends NetworkPartitionContext
private static final Log log = LogFactory.getLog(ClusterLevelNetworkPartitionContext.class);
private static final long serialVersionUID = 572769304374110159L;
- private final String id;
private String partitionAlgorithm;
private int min;
- private Map<String, ClusterInstanceContext> instanceIdToClusterInstanceContextMap;
-
-
public ClusterLevelNetworkPartitionContext(String id, String partitionAlgorithm, int min) {
- this.id = id;
+ super(id);
this.partitionAlgorithm = partitionAlgorithm;
this.min = min;
- setInstanceIdToClusterInstanceContextMap(new ConcurrentHashMap<String, ClusterInstanceContext>());
}
public ClusterLevelNetworkPartitionContext(String id) {
- this.id = id;
- setInstanceIdToClusterInstanceContextMap(new HashMap<String, ClusterInstanceContext>());
+ super(id);
}
@@ -90,33 +84,7 @@ public class ClusterLevelNetworkPartitionContext extends NetworkPartitionContext
public String getId() {
- return id;
- }
-
- public ClusterInstanceContext getClusterInstanceContext(String instanceId) {
- return this.getClusterInstanceContextMap().get(instanceId);
- }
-
- public void addClusterInstanceContext(ClusterInstanceContext clusterInstanceContext) {
- this.getClusterInstanceContextMap().put(clusterInstanceContext.getId(),
- clusterInstanceContext);
- }
-
- public Map<String, ClusterInstanceContext> getClusterInstanceContextMap() {
- return instanceIdToClusterInstanceContextMap;
- }
-
- public void setInstanceIdToClusterInstanceContextMap(
- Map<String, ClusterInstanceContext> instanceIdToClusterInstanceContextMap) {
- this.instanceIdToClusterInstanceContextMap = instanceIdToClusterInstanceContextMap;
- }
-
- public boolean containsClusterInstanceContext(String instanceId) {
- return this.instanceIdToClusterInstanceContextMap.containsKey(instanceId);
- }
-
- public void removeClusterInstanceContext(String instanceId) {
- this.instanceIdToClusterInstanceContextMap.remove(instanceId);
+ return super.getId();
}
public int getMin() {
http://git-wip-us.apache.org/repos/asf/stratos/blob/1c6642b4/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/GroupLevelNetworkPartitionContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/GroupLevelNetworkPartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/GroupLevelNetworkPartitionContext.java
index 52af38d..4749e23 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/GroupLevelNetworkPartitionContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/GroupLevelNetworkPartitionContext.java
@@ -20,7 +20,6 @@ package org.apache.stratos.autoscaler.context.partition.network;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.autoscaler.context.InstanceContext;
import org.apache.stratos.autoscaler.context.group.GroupInstanceContext;
import org.apache.stratos.autoscaler.context.partition.GroupLevelPartitionContext;
@@ -35,7 +34,6 @@ import java.util.Map;
*/
public class GroupLevelNetworkPartitionContext extends NetworkPartitionContext implements Serializable {
private static final Log log = LogFactory.getLog(GroupLevelNetworkPartitionContext.class);
- private final String id;
private int scaleDownRequestsCount = 0;
private float averageRequestsServedPerInstance;
@@ -51,44 +49,26 @@ public class GroupLevelNetworkPartitionContext extends NetworkPartitionContext i
//details required for partition selection algorithms
private int currentPartitionIndex;
- //group instances kept inside a partition
- private Map<String, GroupInstanceContext> instanceIdToInstanceContextMap;
+
public GroupLevelNetworkPartitionContext(String id, String partitionAlgo) {
- this.id = id;
+ super(id);
this.partitionAlgorithm = partitionAlgo;
partitionContexts = new ArrayList<GroupLevelPartitionContext>();
requiredInstanceCountBasedOnStats = minInstanceCount;
requiredInstanceCountBasedOnDependencies = minInstanceCount;
- instanceIdToInstanceContextMap = new HashMap<String, GroupInstanceContext>();
}
public GroupLevelNetworkPartitionContext(String id) {
- this.id = id;
+ super(id);
partitionContexts = new ArrayList<GroupLevelPartitionContext>();
requiredInstanceCountBasedOnStats = minInstanceCount;
requiredInstanceCountBasedOnDependencies = minInstanceCount;
- instanceIdToInstanceContextMap = new HashMap<String, GroupInstanceContext>();
- }
-
- public Map<String, GroupInstanceContext> getInstanceIdToInstanceContextMap() {
- return instanceIdToInstanceContextMap;
- }
-
- public void setInstanceIdToInstanceContextMap(Map<String, GroupInstanceContext> instanceIdToInstanceContextMap) {
- this.instanceIdToInstanceContextMap = instanceIdToInstanceContextMap;
}
- public void addInstanceContext(GroupInstanceContext context) {
- this.instanceIdToInstanceContextMap.put(context.getId(), context);
- }
-
- public GroupInstanceContext getInstanceContext(String instanceId) {
- return this.instanceIdToInstanceContextMap.get(instanceId);
- }
public int getMinInstanceCount() {
return minInstanceCount;
@@ -110,7 +90,7 @@ public class GroupLevelNetworkPartitionContext extends NetworkPartitionContext i
final int prime = 31;
int result = 1;
- result = prime * result + ((this.id == null) ? 0 : this.id.hashCode());
+ result = prime * result + ((super.getId() == null) ? 0 : super.getId().hashCode());
return result;
}
@@ -127,11 +107,11 @@ public class GroupLevelNetworkPartitionContext extends NetworkPartitionContext i
return false;
}
final GroupLevelNetworkPartitionContext other = (GroupLevelNetworkPartitionContext) obj;
- if (this.id == null) {
- if (other.id != null) {
+ if (super.getId() == null) {
+ if (super.getId() != null) {
return false;
}
- } else if (!this.id.equals(other.id)) {
+ } else if (!super.getId().equals(super.getId())) {
return false;
}
return true;
@@ -139,7 +119,7 @@ public class GroupLevelNetworkPartitionContext extends NetworkPartitionContext i
@Override
public String toString() {
- return "NetworkPartitionContext [id=" + id + "partitionAlgorithm=" + partitionAlgorithm + ", minInstanceCount=" +
+ return "NetworkPartitionContext [id=" + super.getId() + "partitionAlgorithm=" + partitionAlgorithm + ", minInstanceCount=" +
minInstanceCount + ", maxInstanceCount=" + maxInstanceCount + "]";
}
@@ -152,7 +132,7 @@ public class GroupLevelNetworkPartitionContext extends NetworkPartitionContext i
}
public String getId() {
- return id;
+ return super.getId();
}
@@ -236,9 +216,7 @@ public class GroupLevelNetworkPartitionContext extends NetworkPartitionContext i
return null;
}
- public void removeClusterGroupContext(String instanceId) {
- this.instanceIdToInstanceContextMap.remove(instanceId);
- }
+
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/1c6642b4/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/NetworkPartitionContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/NetworkPartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/NetworkPartitionContext.java
index 45d0376..0183220 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/NetworkPartitionContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/NetworkPartitionContext.java
@@ -20,10 +20,54 @@ package org.apache.stratos.autoscaler.context.partition.network;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.autoscaler.context.InstanceContext;
+import org.apache.stratos.autoscaler.context.group.GroupInstanceContext;
+
+import java.util.HashMap;
+import java.util.Map;
/**
* This will keep track of network partition level information.
*/
public abstract class NetworkPartitionContext {
private static final Log log = LogFactory.getLog(GroupLevelNetworkPartitionContext.class);
+ //id of the network partition context
+ private final String id;
+ //group instances kept inside a partition
+ private Map<String, InstanceContext> instanceIdToInstanceContextMap;
+
+ protected NetworkPartitionContext(String id) {
+ this.id = id;
+ instanceIdToInstanceContextMap = new HashMap<String, InstanceContext>();
+
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public Map<String, InstanceContext> getInstanceIdToInstanceContextMap() {
+ return instanceIdToInstanceContextMap;
+ }
+
+ public void setInstanceIdToInstanceContextMap(Map<String, InstanceContext> instanceIdToInstanceContextMap) {
+ this.instanceIdToInstanceContextMap = instanceIdToInstanceContextMap;
+ }
+
+ public void addInstanceContext(InstanceContext context) {
+ this.instanceIdToInstanceContextMap.put(context.getId(), context);
+
+ }
+
+ public InstanceContext getInstanceContext(String instanceId) {
+ return this.instanceIdToInstanceContextMap.get(instanceId);
+ }
+
+ public void removeInstanceContext(String instanceId) {
+ this.instanceIdToInstanceContextMap.remove(instanceId);
+ }
+
+ public boolean containsInstanceContext(String instanceId) {
+ return this.instanceIdToInstanceContextMap.containsKey(instanceId);
+ }
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/1c6642b4/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 ad992ba..2a6f945 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
@@ -306,7 +306,7 @@ public class AutoscalerTopologyEventReceiver {
ClusterInstance instance = (ClusterInstance) monitor.getInstance(instanceId);
((VMClusterContext)monitor.getClusterContext()).
getNetworkPartitionCtxt(instance.getNetworkPartitionId()).
- removeClusterInstanceContext(instanceId);
+ removeInstanceContext(instanceId);
monitor.removeInstance(instanceId);
if (!monitor.hasInstance() && appMonitor.isTerminating()) {
//Destroying and Removing the Cluster monitor
http://git-wip-us.apache.org/repos/asf/stratos/blob/1c6642b4/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 8bdbf0a..1ef3a58 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,7 @@ 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.InstanceContext;
import org.apache.stratos.autoscaler.context.cluster.ClusterContextFactory;
import org.apache.stratos.autoscaler.context.cluster.ClusterInstanceContext;
import org.apache.stratos.autoscaler.context.cluster.VMClusterContext;
@@ -190,10 +191,11 @@ public class VMClusterMonitor extends AbstractClusterMonitor {
for (ClusterLevelNetworkPartitionContext networkPartitionContext : getNetworkPartitionCtxts()) {
- final Collection<ClusterInstanceContext> clusterInstanceContexts = networkPartitionContext.
- getClusterInstanceContextMap().values();
+ final Collection<InstanceContext> clusterInstanceContexts = networkPartitionContext.
+ getInstanceIdToInstanceContextMap().values();
- for (final ClusterInstanceContext instanceContext : clusterInstanceContexts) {
+ for (final InstanceContext pInstanceContext : clusterInstanceContexts) {
+ final ClusterInstanceContext instanceContext = (ClusterInstanceContext) pInstanceContext;
ClusterInstance instance = (ClusterInstance) this.instanceIdToInstanceMap.
get(instanceContext.getId());
@@ -211,7 +213,8 @@ public class VMClusterMonitor extends AbstractClusterMonitor {
// store primary members in the cluster instance context
List<String> primaryMemberListInClusterInstance = new ArrayList<String>();
- for (ClusterLevelPartitionContext partitionContext : instanceContext.getPartitionCtxts()) {
+ for (ClusterLevelPartitionContext partitionContext :
+ instanceContext.getPartitionCtxts()) {
// get active primary members in this cluster instance context
for (MemberContext memberContext : partitionContext.getActiveMembers()) {
@@ -1037,8 +1040,9 @@ public class VMClusterMonitor extends AbstractClusterMonitor {
Thread memberTerminator = new Thread(new Runnable() {
public void run() {
- ClusterInstanceContext instanceContext = getAllNetworkPartitionCtxts().get(networkPartitionId)
- .getClusterInstanceContext(instanceId);
+ ClusterInstanceContext instanceContext =
+ (ClusterInstanceContext) getAllNetworkPartitionCtxts().get(networkPartitionId)
+ .getInstanceContext(instanceId);
boolean allMovedToObsolete = true;
for (ClusterLevelPartitionContext partitionContext : instanceContext.getPartitionCtxts()) {
if (log.isInfoEnabled()) {
@@ -1104,7 +1108,9 @@ public class VMClusterMonitor extends AbstractClusterMonitor {
((VMClusterContext) this.clusterContext).getNetworkPartitionCtxts();
ClusterLevelNetworkPartitionContext networkPartitionContext =
clusterLevelNetworkPartitionContextMap.get(networkPartitionId);
- return networkPartitionContext.getClusterInstanceContextMap().get(instanceId);
+ ClusterInstanceContext instanceContext = (ClusterInstanceContext) networkPartitionContext.
+ getInstanceContext(instanceId);
+ return instanceContext;
}
public Collection<ClusterLevelNetworkPartitionContext> getNetworkPartitionCtxts() {
@@ -1201,7 +1207,8 @@ public class VMClusterMonitor extends AbstractClusterMonitor {
//FIXME to iterate properly
for (ClusterLevelNetworkPartitionContext networkPartitionContext :
((VMClusterContext) this.clusterContext).getNetworkPartitionCtxts().values()) {
- ClusterInstanceContext clusterInstanceContext = networkPartitionContext.getClusterInstanceContext(instanceId);
+ ClusterInstanceContext clusterInstanceContext =
+ (ClusterInstanceContext) networkPartitionContext.getInstanceContext(instanceId);
if (clusterInstanceContext != null) {
for (ClusterLevelPartitionContext partitionContext : clusterInstanceContext.getPartitionCtxts()) {
List<String> members = new ArrayList<String>();
http://git-wip-us.apache.org/repos/asf/stratos/blob/1c6642b4/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 69eb68e..07c13fd 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
@@ -22,18 +22,18 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.stratos.autoscaler.applications.ApplicationHolder;
import org.apache.stratos.autoscaler.applications.topic.ApplicationBuilder;
+import org.apache.stratos.autoscaler.context.InstanceContext;
import org.apache.stratos.autoscaler.context.application.ApplicationInstanceContext;
import org.apache.stratos.autoscaler.context.partition.network.ApplicationLevelNetworkPartitionContext;
+import org.apache.stratos.autoscaler.context.partition.network.NetworkPartitionContext;
import org.apache.stratos.autoscaler.exception.application.DependencyBuilderException;
import org.apache.stratos.autoscaler.exception.application.MonitorNotFoundException;
import org.apache.stratos.autoscaler.exception.application.TopologyInConsistentException;
import org.apache.stratos.autoscaler.exception.policy.PolicyValidationException;
import org.apache.stratos.autoscaler.monitor.Monitor;
-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.ScalingEvent;
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;
@@ -42,15 +42,11 @@ import org.apache.stratos.autoscaler.util.ServiceReferenceHolder;
import org.apache.stratos.messaging.domain.applications.Application;
import org.apache.stratos.messaging.domain.applications.ApplicationStatus;
import org.apache.stratos.messaging.domain.applications.GroupStatus;
-import org.apache.stratos.messaging.domain.applications.ScalingDependentList;
import org.apache.stratos.messaging.domain.instance.ApplicationInstance;
import org.apache.stratos.messaging.domain.topology.ClusterStatus;
import org.apache.stratos.messaging.domain.topology.lifecycle.LifeCycleState;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
/**
* ApplicationMonitor is to control the child monitors
@@ -58,8 +54,6 @@ import java.util.Map;
public class ApplicationMonitor extends ParentComponentMonitor {
private static final Log log = LogFactory.getLog(ApplicationMonitor.class);
- //network partition contexts
- private Map<String, ApplicationLevelNetworkPartitionContext> networkPartitionCtxts;
//Flag to set whether application is terminating
private boolean isTerminating;
@@ -69,9 +63,69 @@ public class ApplicationMonitor extends ParentComponentMonitor {
super(application);
//setting the appId for the application
this.appId = application.getUniqueIdentifier();
- networkPartitionCtxts = new HashMap<String, ApplicationLevelNetworkPartitionContext>();
}
+ @Override
+ public void run() {
+ try {
+ if (log.isDebugEnabled()) {
+ log.debug("Application monitor is running : " + this.toString());
+ }
+ monitor();
+ } catch (Exception e) {
+ log.error("Application monitor failed : " + this.toString(), e);
+ }
+ }
+
+ public synchronized void monitor() {
+ final Collection<NetworkPartitionContext> networkPartitionContexts =
+ this.networkPartitionCtxts.values();
+
+ Runnable monitoringRunnable = new Runnable() {
+ @Override
+ public void run() {
+ if (log.isDebugEnabled()) {
+ log.debug("Application monitor is running====== : " + this.toString());
+ }
+ for (NetworkPartitionContext networkPartitionContext : networkPartitionContexts) {
+
+ for (InstanceContext instanceContext : networkPartitionContext.
+ getInstanceIdToInstanceContextMap().values()) {
+ ApplicationInstance instance = (ApplicationInstance) instanceIdToInstanceMap.
+ get(instanceContext.getId());
+ //stopping the monitoring when the group is inactive/Terminating/Terminated
+ if (instance.getStatus().getCode() <= GroupStatus.Active.getCode()) {
+ //Gives priority to scaling max out rather than dependency scaling
+ if (!instanceContext.getIdToScalingOverMaxEvent().isEmpty()) {
+ //handling the application bursting
+ try {
+ if (log.isInfoEnabled()) {
+ log.info("Handling application busting, " +
+ "since resources are exhausted in " +
+ "this application instance ");
+ }
+ createInstanceOnBurstingForApplication();
+ } catch (TopologyInConsistentException e) {
+ log.error("Error while bursting the application", e);
+ } catch (PolicyValidationException e) {
+ log.error("Error while bursting the application", e);
+ } catch (MonitorNotFoundException e) {
+ log.error("Error while bursting the application", e);
+ }
+
+ } else {
+ handleDependentScaling(instanceContext, networkPartitionContext);
+
+ }
+ }
+ }
+ }
+ }
+ };
+ monitoringRunnable.run();
+ }
+
+
/**
* Find the group monitor by traversing recursively in the hierarchical monitors.
*
@@ -97,7 +151,7 @@ public class ApplicationMonitor extends ParentComponentMonitor {
}
for (Monitor monitor : monitors.values()) {
- if(monitor instanceof ParentComponentMonitor) {
+ if (monitor instanceof ParentComponentMonitor) {
Monitor monitor1 = findGroupMonitor(id, ((ParentComponentMonitor) monitor).
getAliasToActiveMonitorsMap());
if (monitor1 != null) {
@@ -176,55 +230,6 @@ public class ApplicationMonitor extends ParentComponentMonitor {
// nothing to do
}
- @Override
- public void onChildScalingEvent(ScalingEvent scalingEvent) {
-
-
- if (log.isDebugEnabled()) {
- log.debug("Child scaling event received to [group]: " + this.getId()
- + ", [network partition]: " + scalingEvent.getNetworkPartitionId()
- + ", [event] " + scalingEvent.getId() + ", [group instance] " + scalingEvent.getInstanceId());
- }
-
- //find the child context of this group,
- //Notifying children, if this group has scaling dependencies
- /*if(scalingDependencies != null && !scalingDependencies.isEmpty()) {
- // has dependencies. Notify children
- if (aliasToActiveMonitorsMap != null && !aliasToActiveMonitorsMap.values().isEmpty()) {
-
- for (ScalingDependentList scalingDependentList : scalingDependencies) {
-
- for(String scalingDependentListComponent : scalingDependentList.getScalingDependentListComponents()){
-
- if(scalingDependentListComponent.equals("cartridge."
- + scalingEvent.getId().substring(0, scalingEvent.getId().indexOf('.')))
- || scalingDependentListComponent.equals("group."
- + scalingEvent.getId().substring(0, scalingEvent.getId().indexOf('.')))){
-
- for(String scalingDependentListComponentInSelectedList : scalingDependentList.getScalingDependentListComponents()){
-
- Monitor monitor = aliasToActiveMonitorsMap.get(
- scalingDependentListComponentInSelectedList.substring(
- scalingDependentListComponentInSelectedList.indexOf('.') + 1) +
- "." + scalingEvent.getServiceName() +
- ".domain");
- if(monitor instanceof GroupMonitor || monitor instanceof VMClusterMonitor){
- monitor.onParentScalingEvent(scalingEvent);
- }
- }
- break;
- }
- }
- }
- }
- }*/
- }
-
- @Override
- public void onChildScalingOverMaxEvent(ScalingOverMaxEvent scalingOverMaxEvent) {
- //TODO to check for the capability of cloud bursting
-
- }
@Override
public void onParentScalingEvent(ScalingEvent scalingEvent) {
@@ -383,22 +388,6 @@ public class ApplicationMonitor extends ParentComponentMonitor {
return instance;
}
- public Map<String, ApplicationLevelNetworkPartitionContext> getApplicationLevelNetworkPartitionCtxts() {
- return networkPartitionCtxts;
- }
-
- public void setApplicationLevelNetworkPartitionCtxts(Map<String, ApplicationLevelNetworkPartitionContext> networkPartitionCtxts) {
- this.networkPartitionCtxts = networkPartitionCtxts;
- }
-
- public void addApplicationLevelNetworkPartitionContext(ApplicationLevelNetworkPartitionContext applicationLevelNetworkPartitionContext) {
- this.networkPartitionCtxts.put(applicationLevelNetworkPartitionContext.getId(), applicationLevelNetworkPartitionContext);
- }
-
- public ApplicationLevelNetworkPartitionContext getNetworkPartitionContext(String networkPartitionId) {
- return this.networkPartitionCtxts.get(networkPartitionId);
- }
-
public boolean isTerminating() {
return isTerminating;
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/1c6642b4/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 7f96486..a6c99ce 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
@@ -23,10 +23,12 @@ import org.apache.commons.logging.LogFactory;
import org.apache.stratos.autoscaler.algorithm.AutoscaleAlgorithm;
import org.apache.stratos.autoscaler.applications.ApplicationHolder;
import org.apache.stratos.autoscaler.applications.topic.ApplicationBuilder;
+import org.apache.stratos.autoscaler.context.InstanceContext;
import org.apache.stratos.autoscaler.context.group.GroupInstanceContext;
import org.apache.stratos.autoscaler.context.partition.GroupLevelPartitionContext;
import org.apache.stratos.autoscaler.context.partition.PartitionContext;
import org.apache.stratos.autoscaler.context.partition.network.GroupLevelNetworkPartitionContext;
+import org.apache.stratos.autoscaler.context.partition.network.NetworkPartitionContext;
import org.apache.stratos.autoscaler.exception.application.DependencyBuilderException;
import org.apache.stratos.autoscaler.exception.application.MonitorNotFoundException;
import org.apache.stratos.autoscaler.exception.application.TopologyInConsistentException;
@@ -57,20 +59,13 @@ import java.util.concurrent.TimeUnit;
* This is GroupMonitor to monitor the group which consists of
* groups and clusters
*/
-public class GroupMonitor extends ParentComponentMonitor implements Runnable {
+public class GroupMonitor extends ParentComponentMonitor {
private static final Log log = LogFactory.getLog(GroupMonitor.class);
- private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
//has scaling dependents
protected boolean hasScalingDependents;
//Indicates whether groupScaling enabled or not
private boolean groupScalingEnabled;
- //Network partition contexts
- private Map<String, GroupLevelNetworkPartitionContext> networkPartitionCtxts;
- //Indicates whether the monitor is destroyed or not
- private boolean isDestroyed;
- //Monitoring interval of the monitor
- private int monitoringIntervalMilliseconds = 60000; //TODO get this from config file
/**
* Constructor of GroupMonitor
@@ -85,7 +80,6 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
super(group);
this.groupScalingEnabled = group.isGroupScalingEnabled();
this.appId = appId;
- networkPartitionCtxts = new HashMap<String, GroupLevelNetworkPartitionContext>();
this.hasScalingDependents = hasScalingDependents;
}
@@ -101,16 +95,8 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
}
}
- public void startScheduler() {
- scheduler.scheduleAtFixedRate(this, 0, monitoringIntervalMilliseconds, TimeUnit.MILLISECONDS);
- }
-
- protected void stopScheduler() {
- scheduler.shutdownNow();
- }
-
- public void monitor() {
- final Collection<GroupLevelNetworkPartitionContext> networkPartitionContexts =
+ public synchronized void monitor() {
+ final Collection<NetworkPartitionContext> networkPartitionContexts =
this.networkPartitionCtxts.values();
Runnable monitoringRunnable = new Runnable() {
@@ -119,9 +105,9 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
if (log.isDebugEnabled()) {
log.debug("Group monitor is running====== : " + this.toString());
}
- for (GroupLevelNetworkPartitionContext networkPartitionContext : networkPartitionContexts) {
+ for (NetworkPartitionContext networkPartitionContext : networkPartitionContexts) {
- for (GroupInstanceContext instanceContext : networkPartitionContext.
+ for (InstanceContext instanceContext : networkPartitionContext.
getInstanceIdToInstanceContextMap().values()) {
GroupInstance instance = (GroupInstance) instanceIdToInstanceMap.
get(instanceContext.getId());
@@ -154,55 +140,7 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
appId);
}
} else {
- /**
- * Dependency scaling handling
- * Finding out the highest scaling events within the scaling dependencies
- */
- List<ScalingEvent> highestScalingEventOfDependencies = new ArrayList<ScalingEvent>();
- for (ScalingDependentList scalingDependentList : scalingDependencies) {
- ScalingEvent highestFactorEvent = null;
- for (String scalingDependentListComponent : scalingDependentList.
- getScalingDependentListComponents()) {
- ScalingEvent scalingEvent = instanceContext.
- getScalingEvent(scalingDependentListComponent);
- if (highestFactorEvent == null) {
- highestFactorEvent = scalingEvent;
- } else {
- if (scalingEvent.getFactor() > highestFactorEvent.getFactor()) {
- highestFactorEvent = scalingEvent;
- }
- }
- }
- highestScalingEventOfDependencies.add(highestFactorEvent);
- }
-
- for (ScalingEvent highestScalingEventOfChild : highestScalingEventOfDependencies) {
- //find the child context of this group,
- //Notifying children, if this group has scaling dependencies
- if (scalingDependencies != null && !scalingDependencies.isEmpty()) {
- for (ScalingDependentList scalingDependentList : scalingDependencies) {
- if (scalingDependentList.getScalingDependentListComponents().
- contains(highestScalingEventOfChild.getId())) {
- for (String scalingDependentListComponent : scalingDependentList
- .getScalingDependentListComponents()) {
- Monitor monitor = aliasToActiveMonitorsMap.get(
- scalingDependentListComponent);
- if (monitor instanceof GroupMonitor ||
- monitor instanceof VMClusterMonitor) {
- ScalingEvent scalingEvent = new ScalingEvent(monitor.getId(),
- networkPartitionContext.getId(),
- instanceContext.getId(),
- highestScalingEventOfChild.getFactor());
- monitor.onParentScalingEvent(scalingEvent);
- }
- }
- }
- break;
- }
- }
- }
- //Resetting the events
- instanceContext.setIdToScalingEvent(new HashMap<String, ScalingEvent>());
+ handleDependentScaling(instanceContext, networkPartitionContext);
}
}
@@ -373,94 +311,8 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
}
@Override
- public void onChildScalingEvent(ScalingEvent scalingEvent) {
- if (hasScalingDependents) {
- //notify parent
- parent.onChildScalingEvent(scalingEvent);
- }
-
- if (log.isDebugEnabled()) {
- log.debug("Child scaling event received to [group]: " + this.getId()
- + ", [network partition]: " + scalingEvent.getNetworkPartitionId()
- + ", [event] " + scalingEvent.getId() + ", [group instance] " + scalingEvent.getInstanceId());
- }
-
- //find the child context of this group,
- //Notifying children, if this group has scaling dependencies
- //TODO will be handled by the periodic task
- /*if (scalingDependencies != null && !scalingDependencies.isEmpty()) {
- // has dependencies. Notify children
- if (aliasToActiveMonitorsMap != null && !aliasToActiveMonitorsMap.values().isEmpty()) {
-
- for (ScalingDependentList scalingDependentList : scalingDependencies) {
-
- for (String scalingDependentListComponent : scalingDependentList
- .getScalingDependentListComponents()) {
-
- if (scalingDependentListComponent.equals(scalingEvent.getId())) {
-
- for (String scalingDependentListComponentInSelectedList :
- scalingDependentList.getScalingDependentListComponents()) {
-
- Monitor monitor = aliasToActiveMonitorsMap.get(
- scalingDependentListComponentInSelectedList);
- if (monitor instanceof GroupMonitor ||
- monitor instanceof VMClusterMonitor) {
- monitor.onParentScalingEvent(scalingEvent);
- }
- }
- break;
- }
- }
- }
- }
- }
-*/
- String networkPartitionId = scalingEvent.getNetworkPartitionId();
- String instanceId = scalingEvent.getInstanceId();
- String id = scalingEvent.getId();
- GroupLevelNetworkPartitionContext networkPartitionContext =
- this.networkPartitionCtxts.get(networkPartitionId);
- if (networkPartitionContext != null) {
- GroupInstanceContext instanceContext = networkPartitionContext.getInstanceContext(instanceId);
- if (instanceContext != null) {
- if (instanceContext.containsScalingEvent(id)) {
- instanceContext.removeScalingEvent(id);
- instanceContext.addScalingEvent(scalingEvent);
- } else {
- instanceContext.addScalingEvent(scalingEvent);
- }
- }
- }
- }
-
- @Override
- public void onChildScalingOverMaxEvent(ScalingOverMaxEvent scalingOverMaxEvent) {
- //Checking whether this monitor has room to create new instances else
- // notify the parent with max out
- //TODO by drool or periodic monitor or here
-
- //adding the scaling over max event to group instance Context
- String networkPartitionId = scalingOverMaxEvent.getNetworkPartitionId();
- String instanceId = scalingOverMaxEvent.getInstanceId();
- String id = scalingOverMaxEvent.getId();
- GroupLevelNetworkPartitionContext networkPartitionContext =
- this.networkPartitionCtxts.get(networkPartitionId);
- if (networkPartitionContext != null) {
- GroupInstanceContext instanceContext = networkPartitionContext.getInstanceContext(instanceId);
- if (instanceContext != null) {
- if (instanceContext.containsScalingEvent(id)) {
- instanceContext.removeScalingOverMaxEvent(id);
- instanceContext.addScalingOverMaxEvent(scalingOverMaxEvent);
- } else {
- instanceContext.addScalingOverMaxEvent(scalingOverMaxEvent);
- }
- }
- }
- }
-
- @Override
public void onParentScalingEvent(ScalingEvent scalingEvent) {
+ //TODO group scaling, if there are enough spaces else notify the parent with max out
//Notifying children, if this group has scaling dependencies
if (scalingDependencies != null && !scalingDependencies.isEmpty()) {
for (ScalingDependentList scalingDependentList : scalingDependencies) {
@@ -489,10 +341,6 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
return groupScalingEnabled;
}
- public void setGroupScalingEnabled(boolean groupScalingEnabled) {
- this.groupScalingEnabled = groupScalingEnabled;
- }
-
/**
* Gets the parent instance context.
*
@@ -531,7 +379,7 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
String networkPartitionId = parentInstanceContext.getNetworkPartitionId();
if (this.networkPartitionCtxts.containsKey(parentInstanceContext)) {
- groupLevelNetworkPartitionContext = this.networkPartitionCtxts.
+ groupLevelNetworkPartitionContext = (GroupLevelNetworkPartitionContext) this.networkPartitionCtxts.
get(networkPartitionId);
} else {
if (policy != null) {
@@ -849,25 +697,11 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
parentInstanceId, networkPartitionId, partitionId);
}
- public Map<String, GroupLevelNetworkPartitionContext> getNetworkPartitionCtxts() {
- return networkPartitionCtxts;
- }
-
- public void setNetworkPartitionCtxts(Map<String, GroupLevelNetworkPartitionContext> networkPartitionCtxts) {
- this.networkPartitionCtxts = networkPartitionCtxts;
- }
-
- public GroupLevelNetworkPartitionContext getNetworkPartitionContext(String networkPartitionId) {
- return this.networkPartitionCtxts.get(networkPartitionId);
- }
-
public void addNetworkPartitionContext(GroupLevelNetworkPartitionContext clusterLevelNetworkPartitionContext) {
this.networkPartitionCtxts.put(clusterLevelNetworkPartitionContext.getId(), clusterLevelNetworkPartitionContext);
}
- public void setDestroyed(boolean isDestroyed) {
- this.isDestroyed = isDestroyed;
- }
+
public boolean verifyGroupStatus(String childId, String instanceId, GroupStatus requiredStatus) {
Monitor monitor = this.getMonitor(childId);
@@ -891,20 +725,17 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
if (childGroupInstance.getStatus() == requiredStatus) {
noOfInstancesOfRequiredStatus++;
}
- }
- if (!groupInstances.isEmpty()) {
- int minInstances = this.networkPartitionCtxts.get(networkPartitionId).
- getMinInstanceCount();
- //if terminated all the instances in this instances map should be in terminated state
- if (noOfInstancesOfRequiredStatus == this.inactiveInstancesMap.size() &&
- requiredStatus == GroupStatus.Terminated) {
- return true;
- } else if (noOfInstancesOfRequiredStatus >= minInstances) {
- return true;
- } else {
- //of only one is inActive implies that the whole group is Inactive
- if (requiredStatus == GroupStatus.Inactive && noOfInstancesOfRequiredStatus >= 1) {
+ if (!groupInstances.isEmpty()) {
+ GroupLevelNetworkPartitionContext networkPartitionContext =
+ (GroupLevelNetworkPartitionContext) this.networkPartitionCtxts.
+ get(networkPartitionId);
+ int minInstances = networkPartitionContext.getMinInstanceCount();
+ //if terminated all the instances in this instances map should be in terminated state
+ if (noOfInstancesOfRequiredStatus == this.inactiveInstancesMap.size() &&
+ requiredStatus == GroupStatus.Terminated) {
+ return true;
+ } else if (noOfInstancesOfRequiredStatus >= minInstances) {
return true;
}
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/1c6642b4/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 37524d3..253aaf4 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
@@ -29,6 +29,9 @@ import org.apache.stratos.autoscaler.applications.dependency.DependencyBuilder;
import org.apache.stratos.autoscaler.applications.dependency.DependencyTree;
import org.apache.stratos.autoscaler.applications.dependency.context.ApplicationChildContext;
import org.apache.stratos.autoscaler.applications.topic.ApplicationBuilder;
+import org.apache.stratos.autoscaler.context.InstanceContext;
+import org.apache.stratos.autoscaler.context.partition.network.ApplicationLevelNetworkPartitionContext;
+import org.apache.stratos.autoscaler.context.partition.network.NetworkPartitionContext;
import org.apache.stratos.autoscaler.event.publisher.ClusterStatusEventPublisher;
import org.apache.stratos.autoscaler.exception.application.DependencyBuilderException;
import org.apache.stratos.autoscaler.exception.application.MonitorNotFoundException;
@@ -38,6 +41,9 @@ 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.ScalingEvent;
+import org.apache.stratos.autoscaler.monitor.events.ScalingOverMaxEvent;
import org.apache.stratos.autoscaler.util.ServiceReferenceHolder;
import org.apache.stratos.common.threading.StratosThreadPool;
import org.apache.stratos.messaging.domain.applications.GroupStatus;
@@ -47,22 +53,19 @@ import org.apache.stratos.messaging.domain.instance.ClusterInstance;
import org.apache.stratos.messaging.domain.topology.ClusterStatus;
import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ExecutorService;
+import java.util.*;
+import java.util.concurrent.*;
/**
* Monitor is to monitor it's child monitors and
* control them according to the dependencies respectively.
*/
-public abstract class ParentComponentMonitor extends Monitor {
+public abstract class ParentComponentMonitor extends Monitor implements Runnable {
private static final Log log = LogFactory.getLog(ParentComponentMonitor.class);
private static final String IDENTIFIER = "Auto-Scaler";
private static final int THREAD_POOL_SIZE = 10;
-
+ //Scheduler executor service to execute this monitor in a thread
+ private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
//The monitors dependency tree with all the start-able/kill-able dependencies
protected DependencyTree startupDependencyTree;
//The monitors dependency tree with all the scaling dependencies
@@ -75,8 +78,12 @@ public abstract class ParentComponentMonitor extends Monitor {
protected Map<String, List<String>> inactiveInstancesMap;
//terminating map, key=alias, value instanceIds
protected Map<String, List<String>> terminatingInstancesMap;
+ //network partition contexts
+ protected Map<String, NetworkPartitionContext> networkPartitionCtxts;
//Executor service to maintain the thread pool
private ExecutorService executorService;
+ //Monitoring interval of the monitor
+ private int monitoringIntervalMilliseconds = 60000; //TODO get this from config file
public ParentComponentMonitor(ParentComponent component) throws DependencyBuilderException {
aliasToActiveMonitorsMap = new ConcurrentHashMap<String, Monitor>();
@@ -93,6 +100,21 @@ public abstract class ParentComponentMonitor extends Monitor {
}
//Create the executor service with identifier and thread pool size
executorService = StratosThreadPool.getExecutorService(IDENTIFIER, THREAD_POOL_SIZE);
+ networkPartitionCtxts = new HashMap<String, NetworkPartitionContext>();
+
+ }
+
+ /**
+ * This will monitor the network partition context with child notifications
+ */
+ public abstract void monitor();
+
+ public void startScheduler() {
+ scheduler.scheduleAtFixedRate(this, 0, monitoringIntervalMilliseconds, TimeUnit.MILLISECONDS);
+ }
+
+ protected void stopScheduler() {
+ scheduler.shutdownNow();
}
/**
@@ -232,11 +254,64 @@ public abstract class ParentComponentMonitor extends Monitor {
}
- /*protected String generateInstanceId(ParentComponent component) {
- String instanceId = component.getUniqueIdentifier() + "_" +
- (component.getInstanceContextCount() + 1);
- return instanceId;
- }*/
+ @Override
+ public void onChildScalingEvent(ScalingEvent scalingEvent) {
+ if (log.isDebugEnabled()) {
+ log.debug("Child scaling event received to [group]: " + this.getId()
+ + ", [network partition]: " + scalingEvent.getNetworkPartitionId()
+ + ", [event] " + scalingEvent.getId() + ", [group instance] " + scalingEvent.getInstanceId());
+ }
+
+ String networkPartitionId = scalingEvent.getNetworkPartitionId();
+ String instanceId = scalingEvent.getInstanceId();
+ String id = scalingEvent.getId();
+ NetworkPartitionContext networkPartitionContext =
+ this.networkPartitionCtxts.get(networkPartitionId);
+ if (networkPartitionContext != null) {
+ InstanceContext instanceContext = networkPartitionContext.
+ getInstanceContext(instanceId);
+ if (instanceContext != null) {
+ if (instanceContext.containsScalingEvent(id)) {
+ instanceContext.removeScalingEvent(id);
+ instanceContext.addScalingEvent(scalingEvent);
+ } else {
+ instanceContext.addScalingEvent(scalingEvent);
+ }
+ }
+ }
+
+
+ }
+
+ @Override
+ public void onChildScalingOverMaxEvent(ScalingOverMaxEvent scalingOverMaxEvent) {
+ //adding the scaling over max event to group instance Context
+ String networkPartitionId = scalingOverMaxEvent.getNetworkPartitionId();
+ String instanceId = scalingOverMaxEvent.getInstanceId();
+ String id = scalingOverMaxEvent.getId();
+ NetworkPartitionContext networkPartitionContext =
+ this.networkPartitionCtxts.get(networkPartitionId);
+ if (networkPartitionContext != null) {
+ InstanceContext instanceContext = networkPartitionContext.
+ getInstanceContext(instanceId);
+ if (instanceContext != null) {
+ if (instanceContext.containsScalingEvent(id)) {
+ instanceContext.removeScalingOverMaxEvent(id);
+ instanceContext.addScalingOverMaxEvent(scalingOverMaxEvent);
+ } else {
+ instanceContext.addScalingOverMaxEvent(scalingOverMaxEvent);
+ }
+ }
+ }
+ //calling monitor to go for group scaling or notify the parent
+ this.monitor();
+
+ }
+
+ public NetworkPartitionContext getNetworkPartitionContext(String networkPartitionId) {
+ return this.networkPartitionCtxts.get(networkPartitionId);
+ }
+
/**
* This will start the child monitors based on the active of siblings according to start up order
@@ -482,6 +557,59 @@ public abstract class ParentComponentMonitor extends Monitor {
return parentsActive;
}
+ protected void handleDependentScaling(InstanceContext instanceContext,
+ NetworkPartitionContext networkPartitionContext) {
+ /**
+ * Dependency scaling handling
+ * Finding out the highest scaling events within the scaling dependencies
+ */
+ List<ScalingEvent> highestScalingEventOfDependencies = new ArrayList<ScalingEvent>();
+ for (ScalingDependentList scalingDependentList : scalingDependencies) {
+ ScalingEvent highestFactorEvent = null;
+ for (String scalingDependentListComponent : scalingDependentList.
+ getScalingDependentListComponents()) {
+ ScalingEvent scalingEvent = instanceContext.
+ getScalingEvent(scalingDependentListComponent);
+ if (highestFactorEvent == null) {
+ highestFactorEvent = scalingEvent;
+ } else {
+ if (scalingEvent.getFactor() > highestFactorEvent.getFactor()) {
+ highestFactorEvent = scalingEvent;
+ }
+ }
+ }
+ highestScalingEventOfDependencies.add(highestFactorEvent);
+ }
+
+ for (ScalingEvent highestScalingEventOfChild : highestScalingEventOfDependencies) {
+ //find the child context of this group,
+ //Notifying children, if this group has scaling dependencies
+ if (scalingDependencies != null && !scalingDependencies.isEmpty()) {
+ for (ScalingDependentList scalingDependentList : scalingDependencies) {
+ if (scalingDependentList.getScalingDependentListComponents().
+ contains(highestScalingEventOfChild.getId())) {
+ for (String scalingDependentListComponent : scalingDependentList
+ .getScalingDependentListComponents()) {
+ Monitor monitor = aliasToActiveMonitorsMap.get(
+ scalingDependentListComponent);
+ if (monitor instanceof GroupMonitor ||
+ monitor instanceof VMClusterMonitor) {
+ ScalingEvent scalingEvent = new ScalingEvent(monitor.getId(),
+ networkPartitionContext.getId(),
+ instanceContext.getId(),
+ highestScalingEventOfChild.getFactor());
+ monitor.onParentScalingEvent(scalingEvent);
+ }
+ }
+ }
+ break;
+ }
+ }
+ }
+ //Resetting the events
+ instanceContext.setIdToScalingEvent(new HashMap<String, ScalingEvent>());
+ }
+
// move to inactive monitors list to use in the Terminated event
protected synchronized void markInstanceAsInactive(String childId, String instanceId) {
if (this.inactiveInstancesMap.containsKey(childId)) {
http://git-wip-us.apache.org/repos/asf/stratos/blob/1c6642b4/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 4a8ec87..5ad3b76 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
@@ -193,7 +193,9 @@ public class RuleTasksDelegator {
VMClusterMonitor vmClusterMonitor = (VMClusterMonitor) AutoscalerContext.getInstance().getClusterMonitor(clusterId);
VMClusterContext clusterContext = (VMClusterContext) vmClusterMonitor.getClusterContext();
ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext = clusterContext.getNetworkPartitionCtxt(nwPartitionId);
- ClusterInstanceContext clusterInstanceContext = clusterLevelNetworkPartitionContext.getClusterInstanceContext(instanceId);
+ ClusterInstanceContext clusterInstanceContext =
+ (ClusterInstanceContext) clusterLevelNetworkPartitionContext.
+ getInstanceContext(instanceId);
minimumCountOfNetworkPartition = clusterInstanceContext.getMinInstanceCount();
@@ -246,7 +248,9 @@ public class RuleTasksDelegator {
VMClusterMonitor vmClusterMonitor = (VMClusterMonitor) AutoscalerContext.getInstance().getClusterMonitor(clusterId);
VMClusterContext clusterContext = (VMClusterContext) vmClusterMonitor.getClusterContext();
ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext = clusterContext.getNetworkPartitionCtxt(nwPartitionId);
- ClusterInstanceContext clusterInstanceContext = clusterLevelNetworkPartitionContext.getClusterInstanceContext(instanceId);
+ ClusterInstanceContext clusterInstanceContext =
+ (ClusterInstanceContext) clusterLevelNetworkPartitionContext.
+ getInstanceContext(instanceId);
minimumCountOfNetworkPartition = clusterInstanceContext.getMinInstanceCount();
if (vmClusterMonitor.getCluster().isKubernetesCluster()) {
http://git-wip-us.apache.org/repos/asf/stratos/blob/1c6642b4/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusActiveProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusActiveProcessor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusActiveProcessor.java
index 7c2063d..4888828 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusActiveProcessor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusActiveProcessor.java
@@ -66,7 +66,9 @@ public class ClusterStatusActiveProcessor extends ClusterStatusProcessor {
boolean clusterActive = false;
for (ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext : monitor.getNetworkPartitionCtxts()) {
//minimum check per partition
- ClusterInstanceContext instanceContext = clusterLevelNetworkPartitionContext.getClusterInstanceContext(instanceId);
+ ClusterInstanceContext instanceContext =
+ (ClusterInstanceContext) clusterLevelNetworkPartitionContext.
+ getInstanceContext(instanceId);
if (instanceContext != null) {
if (instanceContext.getActiveMembers() >= instanceContext.getMinInstanceCount()) {
clusterActive = true;
http://git-wip-us.apache.org/repos/asf/stratos/blob/1c6642b4/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusInactiveProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusInactiveProcessor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusInactiveProcessor.java
index 852beb3..039aae6 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusInactiveProcessor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusInactiveProcessor.java
@@ -86,8 +86,9 @@ public class ClusterStatusInactiveProcessor extends ClusterStatusProcessor {
boolean clusterInactive = false;
for (ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext :
monitor.getAllNetworkPartitionCtxts().values()) {
- ClusterInstanceContext instanceContext = clusterLevelNetworkPartitionContext.
- getClusterInstanceContext(instanceId);
+ ClusterInstanceContext instanceContext =
+ (ClusterInstanceContext) clusterLevelNetworkPartitionContext.
+ getInstanceContext(instanceId);
if(instanceContext != null) {
if(instanceContext.getActiveMembers() < instanceContext.getMinInstanceCount()) {
clusterInactive = true;
http://git-wip-us.apache.org/repos/asf/stratos/blob/1c6642b4/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusTerminatedProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusTerminatedProcessor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusTerminatedProcessor.java
index 1d0b82e..015d5b8 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusTerminatedProcessor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusTerminatedProcessor.java
@@ -121,9 +121,10 @@ public class ClusterStatusTerminatedProcessor extends ClusterStatusProcessor {
for (ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext :
monitor.getAllNetworkPartitionCtxts().values()) {
//minimum check per partition
- if (clusterLevelNetworkPartitionContext.containsClusterInstanceContext(instanceId)) {
- ClusterInstanceContext clusterInstanceContext = clusterLevelNetworkPartitionContext.
- getClusterInstanceContext(instanceId);
+ if (clusterLevelNetworkPartitionContext.containsInstanceContext(instanceId)) {
+ ClusterInstanceContext clusterInstanceContext =
+ (ClusterInstanceContext) clusterLevelNetworkPartitionContext.
+ getInstanceContext(instanceId);
if(clusterInstanceContext != null) {
for (ClusterLevelPartitionContext partitionContext :
clusterInstanceContext.getPartitionCtxts()) {