Updated Branches: refs/heads/master c03a42a6e -> 096398a5d
Fixing instance count at algrithms and some other places Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/02bc1fd0 Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/02bc1fd0 Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/02bc1fd0 Branch: refs/heads/master Commit: 02bc1fd0c042b4c182cbf8b823c84804c2ce5fbd Parents: 4cd05fe Author: Lahiru Sandaruwan <[email protected]> Authored: Wed Dec 25 15:49:08 2013 +0530 Committer: Lahiru Sandaruwan <[email protected]> Committed: Wed Dec 25 15:49:08 2013 +0530 ---------------------------------------------------------------------- .../autoscaler/NetworkPartitionContext.java | 78 ++++++++++---------- .../stratos/autoscaler/PartitionContext.java | 14 ++-- .../autoscaler/algorithm/OneAfterAnother.java | 14 ++-- .../autoscaler/algorithm/RoundRobin.java | 25 +++---- .../topology/AutoscalerTopologyReceiver.java | 10 ++- .../stratos/autoscaler/util/AutoscalerUtil.java | 10 ++- .../distribution/src/main/conf/mincheck.drl | 2 +- 7 files changed, 81 insertions(+), 72 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/02bc1fd0/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/NetworkPartitionContext.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/NetworkPartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/NetworkPartitionContext.java index 61b2351..defb7db 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/NetworkPartitionContext.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/NetworkPartitionContext.java @@ -59,7 +59,7 @@ public class NetworkPartitionContext implements Serializable{ //details required for partition selection algorithms private int currentPartitionIndex; - private Map<String, Integer> partitionToMemberCountMap; +// private Map<String, Integer> partitionToMemberCountMap; //partitions of this network partition private Map<String, PartitionContext> partitionCtxts; @@ -70,7 +70,7 @@ public class NetworkPartitionContext implements Serializable{ this.id = id; this.setServiceToLBClusterId(new HashMap<String, String>()); this.setClusterIdToLBClusterIdMap(new HashMap<String, String>()); - partitionToMemberCountMap = new HashMap<String, Integer>(); +// partitionToMemberCountMap = new HashMap<String, Integer>(); partitionCtxts = new HashMap<String, PartitionContext>(); } @@ -288,35 +288,39 @@ public class NetworkPartitionContext implements Serializable{ this.id = id; } - public void increaseMemberCountInPartitionBy(String partitionId, int count){ - if(!partitionCountExists(partitionId)){ - addPartitionCount(partitionId, 1); - } else{ - partitionToMemberCountMap.put(partitionId, getMemberCount(partitionId) + count); - } - } - - public void decreaseMemberCountInPartitionBy(String partitionId, int count){ - - partitionToMemberCountMap.put(partitionId, getMemberCount(partitionId) - count); - } - - public void addPartitionCount(String partitionId, int count){ - partitionToMemberCountMap.put(partitionId, count); - } - - public void removePartitionCount(String partitionId){ - - partitionToMemberCountMap.remove(partitionId); - } - - public boolean partitionCountExists(String partitionId){ - return partitionToMemberCountMap.containsKey(partitionId); - } - - public int getMemberCount(String partitionId){ - if(partitionToMemberCountMap.containsKey(partitionId)) { - return partitionToMemberCountMap.get(partitionId); +// public void increaseMemberCountOfPartition(String partitionId, int count){ +// if(!partitionCountExists(partitionId)){ +// addPartitionCount(partitionId, 1); +// } else{ +// partitionToMemberCountMap.put(partitionId, getMemberCountOfPartition(partitionId) + count); +// } +// } + +// public void decreaseMemberCountOfPartition(String partitionId, int count){ +// +// partitionToMemberCountMap.put(partitionId, getMemberCountOfPartition(partitionId) - count); +// } +// +// public void addPartitionCount(String partitionId, int count){ +// partitionToMemberCountMap.put(partitionId, count); +// } +// +// public void removePartitionCount(String partitionId){ +// +// partitionToMemberCountMap.remove(partitionId); +// } + +// public boolean partitionCountExists(String partitionId){ +// return partitionToMemberCountMap.containsKey(partitionId); +// } + + public int getMemberCountOfPartition(String partitionId){ +// if(partitionToMemberCountMap.containsKey(partitionId)) { +// return partitionToMemberCountMap.get(partitionId); +// } +// return 0; + if(partitionCtxts.containsKey(partitionId)){ + return getPartitionCtxt(partitionId).getTotalMemberCount(); } return 0; } @@ -351,13 +355,13 @@ public class NetworkPartitionContext implements Serializable{ public void setPartitions(Partition[] partitions) { this.partitions = partitions; - for (Partition partition: partitions){ - partitionToMemberCountMap.put(partition.getId(), 0); - } +// for (Partition partition: partitions){ +// partitionToMemberCountMap.put(partition.getId(), 0); +// } } - public void setPartitionToMemberCountMap(Map<String, Integer> partitionToMemberCountMap) { - this.partitionToMemberCountMap = partitionToMemberCountMap; - } +// public void setPartitionToMemberCountMap(Map<String, Integer> partitionToMemberCountMap) { +// this.partitionToMemberCountMap = partitionToMemberCountMap; +// } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/02bc1fd0/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 4d298a0..a9fa739 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 @@ -48,7 +48,7 @@ public class PartitionContext implements Serializable{ private String serviceName; private String networkPartitionId; private Partition partition; - private int currentMemberCount = 0; + private int currentActiveMemberCount = 0; private int minimumMemberCount = 0; // properties @@ -109,18 +109,18 @@ public class PartitionContext implements Serializable{ public void setPartitionId(String partitionId) { this.partitionId = partitionId; } - public int getCurrentMemberCount() { + public int getTotalMemberCount() { // live count + pending count - return currentMemberCount + pendingMembers.size(); + return currentActiveMemberCount + pendingMembers.size(); } - public void incrementCurrentMemberCount(int count) { + public void incrementCurrentActiveMemberCount(int count) { - this.currentMemberCount += count; + this.currentActiveMemberCount += count; } - public void decrementCurrentMemberCount(int count) { - this.currentMemberCount -= count; + public void decrementCurrentActiveMemberCount(int count) { + this.currentActiveMemberCount -= count; } public int getMinimumMemberCount() { http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/02bc1fd0/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/OneAfterAnother.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/OneAfterAnother.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/OneAfterAnother.java index b933d17..a187900 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/OneAfterAnother.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/OneAfterAnother.java @@ -57,13 +57,13 @@ public class OneAfterAnother implements AutoscaleAlgorithm { Partition currentPartition = (Partition) partitions.get(currentPartitionIndex); String currentPartitionId = currentPartition.getId(); - if (networkPartitionContext.partitionCountExists(currentPartitionId)) { - networkPartitionContext.addPartitionCount(currentPartitionId, 0); - } +// if (networkPartitionContext.partitionCountExists(currentPartitionId)) { +// networkPartitionContext.addPartitionCount(currentPartitionId, 0); +// } - if (networkPartitionContext.getMemberCount(currentPartitionId) < currentPartition.getPartitionMax()) { + if (networkPartitionContext.getMemberCountOfPartition(currentPartitionId) < currentPartition.getPartitionMax()) { // current partition is free - networkPartitionContext.increaseMemberCountInPartitionBy(currentPartitionId, 1); +// networkPartitionContext.increaseMemberCountOfPartition(currentPartitionId, 1); if (log.isDebugEnabled()) log.debug("Free space found in partition " + currentPartition.getId()); @@ -100,9 +100,9 @@ public class OneAfterAnother implements AutoscaleAlgorithm { String currentPartitionId = currentPartition.getId(); // has more than minimum instances. - if (networkPartitionContext.getMemberCount(currentPartitionId) > currentPartition.getPartitionMin()) { + if (networkPartitionContext.getMemberCountOfPartition(currentPartitionId) > currentPartition.getPartitionMin()) { // current partition is free - networkPartitionContext.decreaseMemberCountInPartitionBy(currentPartitionId, 1); +// networkPartitionContext.decreaseMemberCountOfPartition(currentPartitionId, 1); if (log.isDebugEnabled()) log.debug("A free space found for scale down in partition" + currentPartition.getId()); http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/02bc1fd0/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/RoundRobin.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/RoundRobin.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/RoundRobin.java index 55a3178..74d9eda 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/RoundRobin.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/RoundRobin.java @@ -21,7 +21,6 @@ package org.apache.stratos.autoscaler.algorithm; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.stratos.autoscaler.AutoscalerContext; import org.apache.stratos.autoscaler.NetworkPartitionContext; import org.apache.stratos.cloud.controller.deployment.partition.Partition; @@ -54,14 +53,14 @@ public class RoundRobin implements AutoscaleAlgorithm{ networkPartitionContext.setCurrentPartitionIndex(nextPartitionIndex); // current partition has no partitionid-instanceid info in cluster context - if(!networkPartitionContext.partitionCountExists(currentPartitionId)) - AutoscalerContext.getInstance().getMonitor(clusterId) - .getNetworkPartitionCtxt(networkPartitionContext.getId()) - .addPartitionCount(currentPartitionId, 0); +// if(!networkPartitionContext.partitionCountExists(currentPartitionId)) +// AutoscalerContext.getInstance().getMonitor(clusterId) +// .getNetworkPartitionCtxt(networkPartitionContext.getId()) +// .addPartitionCount(currentPartitionId, 0); - if(networkPartitionContext.getMemberCount(currentPartitionId) < currentPartition.getPartitionMax()){ + if(networkPartitionContext.getMemberCountOfPartition(currentPartitionId) < currentPartition.getPartitionMax()){ // current partition is free - networkPartitionContext.increaseMemberCountInPartitionBy(currentPartitionId, 1); +// networkPartitionContext.increaseMemberCountOfPartition(currentPartitionId, 1); if(log.isDebugEnabled()) log.debug("Free space found in partition " + currentPartition.getId()); return currentPartition; @@ -106,14 +105,14 @@ public class RoundRobin implements AutoscaleAlgorithm{ Partition currentPartition = (Partition) partitions.get(currentPartitionIndex); String currentPartitionId = currentPartition.getId(); - if (!networkPartitionContext.partitionCountExists(currentPartitionId)) - AutoscalerContext.getInstance().getMonitor(clusterId) - .getNetworkPartitionCtxt(networkPartitionContext.getId()) - .addPartitionCount(currentPartitionId, 0); +// if (!networkPartitionContext.partitionCountExists(currentPartitionId)) +// AutoscalerContext.getInstance().getMonitor(clusterId) +// .getNetworkPartitionCtxt(networkPartitionContext.getId()) +// .addPartitionCount(currentPartitionId, 0); // has more than minimum instances. - if (networkPartitionContext.getMemberCount(currentPartitionId) > currentPartition.getPartitionMin()) { + if (networkPartitionContext.getMemberCountOfPartition(currentPartitionId) > currentPartition.getPartitionMin()) { // current partition is free - networkPartitionContext.decreaseMemberCountInPartitionBy(currentPartitionId, 1); +// networkPartitionContext.decreaseMemberCountOfPartition(currentPartitionId, 1); if (log.isDebugEnabled()) { log.debug("Returning partition for scaling down " + currentPartition.getId()); http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/02bc1fd0/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyReceiver.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyReceiver.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyReceiver.java index dab18cb..74d9770 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyReceiver.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyReceiver.java @@ -182,6 +182,7 @@ public class AutoscalerTopologyReceiver implements Runnable { MemberTerminatedEvent e = (MemberTerminatedEvent) event; String networkPartitionId = e.getNetworkPartitionId(); String clusterId = e.getClusterId(); + String partitionId = e.getPartitionId(); AbstractMonitor monitor; if(AutoscalerContext.getInstance().moniterExist(clusterId)){ @@ -195,12 +196,13 @@ public class AutoscalerTopologyReceiver implements Runnable { NetworkPartitionContext networkPartitionContext = monitor.getNetworkPartitionCtxt(networkPartitionId); - networkPartitionContext.getPartitionCtxt(e.getPartitionId()) - .removeMemberStatsContext(e.getMemberId()); + PartitionContext partitionContext = networkPartitionContext.getPartitionCtxt(partitionId); + partitionContext.removeMemberStatsContext(e.getMemberId()); + partitionContext.decrementCurrentActiveMemberCount(1); + if(log.isInfoEnabled()){ log.info(String.format("Member stat context has been removed: [member] %s", e.getMemberId())); } - networkPartitionContext.decreaseMemberCountInPartitionBy(e.getPartitionId(), 1); } finally { TopologyManager.releaseReadLock(); @@ -236,7 +238,7 @@ public class AutoscalerTopologyReceiver implements Runnable { if(log.isInfoEnabled()){ log.info(String.format("Member stat context has been added: [member] %s", memberId)); } - partitionContext.incrementCurrentMemberCount(1); + partitionContext.incrementCurrentActiveMemberCount(1); partitionContext.removePendingMember(memberId); } http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/02bc1fd0/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 71eeb63..b1d74c5 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 @@ -132,11 +132,13 @@ public class AutoscalerUtil { if(MemberStatus.Activated.equals(member.getStatus())){ partitionContext.addActiveMember(memberContext); - networkPartitionContext.increaseMemberCountInPartitionBy(partition.getId(), 1); +// networkPartitionContext.increaseMemberCountOfPartition(partition.getId(), 1); + partitionContext.incrementCurrentActiveMemberCount(1); + } else if(MemberStatus.Created.equals(member.getStatus()) || MemberStatus.Starting.equals(member.getStatus())){ partitionContext.addPendingMember(memberContext); - networkPartitionContext.increaseMemberCountInPartitionBy(partition.getId(), 1); +// networkPartitionContext.increaseMemberCountOfPartition(partition.getId(), 1); } else if(MemberStatus.Suspended.equals(member.getStatus())){ partitionContext.addFaultyMember(memberId); } @@ -234,15 +236,17 @@ public class AutoscalerUtil { if (MemberStatus.Activated.equals(member.getStatus())) { partitionContext.addActiveMember(memberContext); +// networkPartitionContext.increaseMemberCountOfPartition(partition.getId(), 1); + partitionContext.incrementCurrentActiveMemberCount(1); } else if (MemberStatus.Created.equals(member.getStatus()) || MemberStatus.Starting.equals(member.getStatus())) { partitionContext.addPendingMember(memberContext); +// networkPartitionContext.increaseMemberCountOfPartition(partition.getId(), 1); } else if (MemberStatus.Suspended.equals(member.getStatus())) { partitionContext.addFaultyMember(memberId); } partitionContext.addMemberStatsContext(new MemberStatsContext(memberId)); - partitionContext.incrementCurrentMemberCount(1); if(log.isInfoEnabled()){ log.info(String.format("Member stat context has been added: [member] %s", memberId)); } http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/02bc1fd0/products/autoscaler/modules/distribution/src/main/conf/mincheck.drl ---------------------------------------------------------------------- diff --git a/products/autoscaler/modules/distribution/src/main/conf/mincheck.drl b/products/autoscaler/modules/distribution/src/main/conf/mincheck.drl index 93dcda1..bef3370 100755 --- a/products/autoscaler/modules/distribution/src/main/conf/mincheck.drl +++ b/products/autoscaler/modules/distribution/src/main/conf/mincheck.drl @@ -54,7 +54,7 @@ rule "Minimum Rule" dialect "mvel" when $ctxt : PartitionContext () - eval($ctxt.getCurrentMemberCount() < $ctxt.getMinimumMemberCount()) + eval($ctxt.getTotalMemberCount() < $ctxt.getMinimumMemberCount()) then $delegator.delegateSpawn($ctxt, clusterId, lbRef);
