adding lb reference property to Cluster monitor and setting its value globally in drools session
Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/e50d5316 Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/e50d5316 Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/e50d5316 Branch: refs/heads/master Commit: e50d5316c592a5fdcc55ce619db6b6ba003e61b7 Parents: 0003b1d Author: Nirmal Fernando <[email protected]> Authored: Sat Dec 14 19:35:17 2013 +0530 Committer: Nirmal Fernando <[email protected]> Committed: Sat Dec 14 19:35:17 2013 +0530 ---------------------------------------------------------------------- .../stratos/autoscaler/ClusterMonitor.java | 20 +++++++++++++- .../stratos/autoscaler/LbClusterMonitor.java | 5 ++++ .../stratos/autoscaler/PartitionContext.java | 1 + .../autoscaler/rule/RuleTasksDelegator.java | 28 +++++++++++--------- .../stratos/autoscaler/util/AutoscalerUtil.java | 27 ++++++++++--------- 5 files changed, 55 insertions(+), 26 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/e50d5316/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterMonitor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterMonitor.java index 1ae757f..8a3d5bc 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterMonitor.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterMonitor.java @@ -60,6 +60,8 @@ public class ClusterMonitor implements Runnable{ private FactHandle scaleCheckFactHandle; private AutoscalerRuleEvaluator autoscalerRuleEvaluator; + + private String lbReferenceType; public ClusterMonitor(String clusterId, String serviceId, DeploymentPolicy deploymentPolicy, AutoscalePolicy autoscalePolicy) { @@ -152,7 +154,8 @@ public class ClusterMonitor implements Runnable{ for(PartitionContext partitionContext: networkPartitionContext.getPartitionCtxts().values()){ minCheckKnowledgeSession.setGlobal("clusterId", clusterId); - + minCheckKnowledgeSession.setGlobal("lbRef", lbReferenceType); + if (log.isDebugEnabled()) { log.debug(String.format("Running minimum check for partition %s ", partitionContext.getPartitionId())); } @@ -219,6 +222,13 @@ public class ClusterMonitor implements Runnable{ return autoscalePolicy; } + @Override + public String toString() { + return "ClusterMonitor [clusterId=" + clusterId + ", serviceId=" + serviceId + + ", deploymentPolicy=" + deploymentPolicy + ", autoscalePolicy=" + autoscalePolicy + + ", lbReferenceType=" + lbReferenceType + "]"; + } + public void setAutoscalePolicy(AutoscalePolicy autoscalePolicy) { this.autoscalePolicy = autoscalePolicy; } @@ -230,4 +240,12 @@ public class ClusterMonitor implements Runnable{ public boolean memberExist(String memberId){ return this.memberPartitionMap.containsKey(memberId); } + + public String getLbReferenceType() { + return lbReferenceType; + } + + public void setLbReferenceType(String lbReferenceType) { + this.lbReferenceType = lbReferenceType; + } } http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/e50d5316/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/LbClusterMonitor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/LbClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/LbClusterMonitor.java index 131dfe6..8a4f3e5 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/LbClusterMonitor.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/LbClusterMonitor.java @@ -218,4 +218,9 @@ public class LbClusterMonitor implements Runnable{ public boolean memberExist(String memberId){ return this.memberPartitionMap.containsKey(memberId); } + + @Override + public String toString() { + return "LbClusterMonitor [clusterId=" + clusterId + ", serviceId=" + serviceId + "]"; + } } http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/e50d5316/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/PartitionContext.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/PartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/PartitionContext.java index 2843e16..a4c1b68 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/PartitionContext.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/PartitionContext.java @@ -72,6 +72,7 @@ public class PartitionContext implements Serializable{ public PartitionContext(Partition partition) { this.setPartition(partition); + this.minimumMemberCount = partition.getPartitionMin(); this.partitionId = partition.getId(); this.pendingMembers = new ArrayList<MemberContext>(); this.activeMembers = new ArrayList<MemberContext>(); http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/e50d5316/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 906e002..4e9f1c9 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 @@ -44,7 +44,7 @@ public class RuleTasksDelegator { return autoscaleAlgorithm; } - public void delegateSpawn(PartitionContext partitionContext, String clusterId) { + public void delegateSpawn(PartitionContext partitionContext, String clusterId, String lbRefType) { try { String nwPartitionId = partitionContext.getNetworkPartitionId(); @@ -52,7 +52,8 @@ public class RuleTasksDelegator { PartitionManager.getInstance() .getNetworkPartition(nwPartitionId); - String lbClusterId = getLbClusterId(partitionContext, ctxt); + + String lbClusterId = getLbClusterId(lbRefType, partitionContext, ctxt); MemberContext memberContext = CloudControllerClient.getInstance() @@ -72,18 +73,21 @@ public class RuleTasksDelegator { - public static String getLbClusterId(PartitionContext partitionContext, NetworkPartitionContext ctxt) { - Properties props = partitionContext.getProperties(); - String value = - (String) props.get(org.apache.stratos.messaging.util.Constants.LOAD_BALANCER_REF); + public static String getLbClusterId(String lbRefType, PartitionContext partitionCtxt, + NetworkPartitionContext nwPartitionCtxt) { + String lbClusterId = null; - if (value.equals(org.apache.stratos.messaging.util.Constants.DEFAULT_LOAD_BALANCER)) { - lbClusterId = ctxt.getDefaultLbClusterId(); - } else if (value.equals(org.apache.stratos.messaging.util.Constants.SERVICE_AWARE_LOAD_BALANCER)) { - String serviceName = partitionContext.getServiceName(); - lbClusterId = ctxt.getLBClusterIdOfService(serviceName); - } + if (lbRefType != null) { + if (lbRefType.equals(org.apache.stratos.messaging.util.Constants.DEFAULT_LOAD_BALANCER)) { + lbClusterId = nwPartitionCtxt.getDefaultLbClusterId(); + } else if (lbRefType.equals(org.apache.stratos.messaging.util.Constants.SERVICE_AWARE_LOAD_BALANCER)) { + String serviceName = partitionCtxt.getServiceName(); + lbClusterId = nwPartitionCtxt.getLBClusterIdOfService(serviceName); + } else { + log.warn("Invalid LB reference type defined: [value] "+lbRefType); + } + } return lbClusterId; } http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/e50d5316/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java index a171d4c..4bfa271 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java @@ -110,6 +110,7 @@ public class AutoscalerUtil { new ClusterMonitor(cluster.getClusterId(), cluster.getServiceName(), deploymentPolicy, policy); + for (PartitionGroup partitionGroup: deploymentPolicy.getPartitionGroups()){ NetworkPartitionContext networkPartitionContext = new NetworkPartitionContext(partitionGroup.getId()); @@ -145,20 +146,20 @@ public class AutoscalerUtil { clusterMonitor.addNetworkPartitionCtxt(networkPartitionContext); } -// if (policy != null) { -// -// // get values from policy -// LoadThresholds loadThresholds = policy.getLoadThresholds(); -// float averageLimit = loadThresholds.getRequestsInFlight().getAverage(); -// float gradientLimit = loadThresholds.getRequestsInFlight().getGradient(); -// float secondDerivativeLimit = loadThresholds.getRequestsInFlight().getSecondDerivative(); -// -// clusterMonitor.setRequestsInFlightGradientThreshold(gradientLimit); -// clusterMonitor.setRequestsInFlightSecondDerivativeThreshold(secondDerivativeLimit); -// clusterMonitor.setAverageRequestsInFlightThreshold(averageLimit); -// -// } + + + // find lb reference type + java.util.Properties props = cluster.getProperties(); + + if(props.containsKey(Constants.LOAD_BALANCER_REF)) { + String value = props.getProperty(Constants.LOAD_BALANCER_REF); + clusterMonitor.setLbReferenceType(value); + if(log.isDebugEnabled()) { + log.debug("Set the lb reference type: "+value); + } + } + log.info("Cluster monitor created: "+clusterMonitor.toString()); return clusterMonitor; }
