You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by ni...@apache.org on 2013/12/03 17:25:07 UTC
[2/2] git commit: auto-scaler now reacts to MemberActivated,
Terminated, ClusterRemoved Events
auto-scaler now reacts to MemberActivated, Terminated, ClusterRemoved Events
Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/fcf1dc7f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/fcf1dc7f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/fcf1dc7f
Branch: refs/heads/master
Commit: fcf1dc7fa41f1ce6939ad645918076542f694f32
Parents: 3ba57aa
Author: Nirmal Fernando <ni...@apache.org>
Authored: Tue Dec 3 21:53:37 2013 +0530
Committer: Nirmal Fernando <ni...@apache.org>
Committed: Tue Dec 3 21:53:37 2013 +0530
----------------------------------------------------------------------
.../stratos/autoscaler/ClusterContext.java | 5 +--
.../stratos/autoscaler/ClusterMonitor.java | 9 ++++--
.../stratos/autoscaler/PartitionContext.java | 6 ++++
.../cloud/controller/CloudControllerClient.java | 18 +++++++++++
.../rule/AutoscalerRuleEvaluator.java | 16 +++++----
.../processors/AutoscalerTopologyReceiver.java | 34 ++++++++------------
.../stratos/autoscaler/util/AutoscalerUtil.java | 3 +-
.../src/test/resources/autoscaler.drl | 4 ++-
8 files changed, 61 insertions(+), 34 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/fcf1dc7f/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterContext.java
index 8f6da21..2e9acf4 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterContext.java
@@ -267,11 +267,12 @@ public class ClusterContext {
this.memberPartitionMap.put(memberId, partitionId);
}
- public void removeMemberPartition(String memberId){
- this.memberPartitionMap.remove(memberId);
+ public String removeMemberPartition(String memberId){
+ return this.memberPartitionMap.remove(memberId);
}
public String getPartitonOfMember(String memberId){
return this.memberPartitionMap.get(memberId);
}
+
}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/fcf1dc7f/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 ce12904..9e81c84 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
@@ -115,7 +115,9 @@ public class ClusterMonitor implements Runnable{
public void run() {
while (!isDestroyed()) {
- log.debug("Cluster monitor is running..");
+ if (log.isDebugEnabled()) {
+ log.debug("Cluster monitor is running..");
+ }
try {
minInstanceCountCheck();
} catch (Exception e) {
@@ -147,10 +149,13 @@ public class ClusterMonitor implements Runnable{
}
}
}
-
+
public void destroy() {
ksession.dispose();
setDestroyed(true);
+ if(log.isDebugEnabled()) {
+ log.debug("Cluster Monitor Drools session has been disposed.");
+ }
}
public boolean isDestroyed() {
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/fcf1dc7f/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 1740363..3ff6c01 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
@@ -89,9 +89,15 @@ public class PartitionContext {
// live count + pending count
return currentMemberCount + pendingMembers.size();
}
+
public void incrementCurrentMemberCount(int count) {
+
this.currentMemberCount += count;
}
+
+ public void decrementCurrentMemberCount(int count) {
+ this.currentMemberCount -= count;
+ }
public int getMinimumMemberCount() {
return minimumMemberCount;
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/fcf1dc7f/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
index 6eed713..1531c88 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
@@ -30,6 +30,7 @@ import org.apache.stratos.autoscaler.util.ConfUtil;
import org.apache.stratos.cloud.controller.deployment.partition.Partition;
import org.apache.stratos.cloud.controller.stub.CloudControllerServiceIllegalArgumentExceptionException;
import org.apache.stratos.cloud.controller.stub.CloudControllerServiceInvalidCartridgeTypeExceptionException;
+import org.apache.stratos.cloud.controller.stub.CloudControllerServiceInvalidClusterExceptionException;
import org.apache.stratos.cloud.controller.stub.CloudControllerServiceInvalidMemberExceptionException;
import org.apache.stratos.cloud.controller.stub.CloudControllerServiceInvalidPartitionExceptionException;
import org.apache.stratos.cloud.controller.stub.CloudControllerServiceStub;
@@ -140,6 +141,23 @@ public class CloudControllerClient {
}
}
+ public void terminateAllInstances(String clusterId) throws TerminationException {
+ try {
+ stub.terminateAllInstances(clusterId);
+
+ } catch (RemoteException e) {
+ String msg = "Error occurred in cloud controller side while terminating instance";
+ log.error(msg, e);
+ throw new TerminationException(msg, e);
+
+ } catch (CloudControllerServiceInvalidClusterExceptionException e) {
+ log.error(e.getMessage());
+ throw new TerminationException(e);
+ } catch (CloudControllerServiceIllegalArgumentExceptionException e) {
+ log.error(e.getMessage());
+ throw new TerminationException(e);
+ }
+ }
public void terminate(String memberId) throws TerminationException {
//call CC terminate method
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/fcf1dc7f/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/AutoscalerRuleEvaluator.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/AutoscalerRuleEvaluator.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/AutoscalerRuleEvaluator.java
index a81906e..7e267b4 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/AutoscalerRuleEvaluator.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/AutoscalerRuleEvaluator.java
@@ -122,18 +122,20 @@ public class AutoscalerRuleEvaluator {
public static void delegateTerminate(String memberId) {
try {
-// int currentMemberCount = AutoscalerContext.getInstance().getClusterContext(clusterId).getMemberCount();
-// log.info("Current member count is " + currentMemberCount );
-// if(currentMemberCount > partition.getPartitionMembersMin()) {
-// AutoscalerContext.getInstance().getClusterContext(clusterId).decreaseMemberCount();
- //FIXME
-// cloudControllerClient.terminate(partition, clusterId);
-// }
CloudControllerClient.getInstance().terminate(memberId);
} catch (Throwable e) {
log.error("Cannot terminate instance", e);
}
}
+
+ public static void delegateTerminateAll(String clusterId) {
+ try {
+
+ CloudControllerClient.getInstance().terminateAllInstances(clusterId);
+ } catch (Throwable e) {
+ log.error("Cannot terminate instance", e);
+ }
+ }
// public boolean delegateSpawn(Partition partition, String clusterId, int memberCountToBeIncreased) {
// CloudControllerClient cloudControllerClient = new CloudControllerClient();
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/fcf1dc7f/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/topology/processors/AutoscalerTopologyReceiver.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/topology/processors/AutoscalerTopologyReceiver.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/topology/processors/AutoscalerTopologyReceiver.java
index 6b64514..7a2601b 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/topology/processors/AutoscalerTopologyReceiver.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/topology/processors/AutoscalerTopologyReceiver.java
@@ -24,6 +24,7 @@ import org.apache.commons.logging.LogFactory;
import org.apache.stratos.autoscaler.AutoscalerContext;
import org.apache.stratos.autoscaler.ClusterContext;
import org.apache.stratos.autoscaler.ClusterMonitor;
+import org.apache.stratos.autoscaler.PartitionContext;
import org.apache.stratos.autoscaler.exception.PartitionValidationException;
import org.apache.stratos.autoscaler.exception.PolicyValidationException;
import org.apache.stratos.autoscaler.rule.AutoscalerRuleEvaluator;
@@ -158,9 +159,13 @@ public class AutoscalerTopologyReceiver implements Runnable {
try {
TopologyManager.acquireReadLock();
MemberTerminatedEvent e = (MemberTerminatedEvent) event;
- ClusterContext clusCtx = AutoscalerContext.getInstance()
- .getClusterContext(e.getClusterId());
- clusCtx.removeMemberPartition(e.getMemberId());
+ ClusterMonitor monitor = AutoscalerRuleEvaluator.getInstance().getMonitor(e.getClusterId());
+ ClusterContext clusCtx = monitor.getClusterCtxt();
+ String partitionId = clusCtx.removeMemberPartition(e.getMemberId());
+ if (partitionId != null) {
+ PartitionContext partCtxt = monitor.getPartitionCtxt(partitionId);
+ partCtxt.decrementCurrentMemberCount(1);
+ }
} finally {
TopologyManager.releaseReadLock();
}
@@ -171,29 +176,17 @@ public class AutoscalerTopologyReceiver implements Runnable {
processorChain.addEventListener(new MemberActivatedEventListener() {
@Override
protected void onEvent(Event event) {
-// try {
-// TopologyManager.acquireReadLock();
-//
-// // Add cluster to the context when its first member is activated
-// MemberActivatedEvent memberActivatedEvent = (MemberActivatedEvent)event;
-// Cluster cluster = findCluster(memberActivatedEvent.getClusterId());
-// if(cluster == null) {
-// if(log.isErrorEnabled()) {
-// log.error(String.format("Cluster not found in topology: [cluster] %s", memberActivatedEvent.getClusterId()));
-// }
-// }
-// addClusterToContext(cluster);
-// }
-// finally {
-// TopologyManager.releaseReadLock();
-// }
try {
TopologyManager.acquireReadLock();
MemberActivatedEvent e = (MemberActivatedEvent)event;
- ClusterContext clusCtx = AutoscalerContext.getInstance().getClusterContext(e.getClusterId());
+ ClusterMonitor monitor = AutoscalerRuleEvaluator.getInstance().getMonitor(e.getClusterId());
+ ClusterContext clusCtx = monitor.getClusterCtxt();
clusCtx.addMemberpartition(e.getMemberId(), e.getPartitionId());
+ PartitionContext partCtxt = monitor.getPartitionCtxt(e.getPartitionId());
+ partCtxt.incrementCurrentMemberCount(1);
+
}
finally{
TopologyManager.releaseReadLock();
@@ -280,6 +273,7 @@ public class AutoscalerTopologyReceiver implements Runnable {
private void removeClusterFromContext(String clusterId) {
ClusterMonitor monitor = AutoscalerRuleEvaluator.getInstance().removeMonitor(clusterId);
+// monitor.unsubscribe();
monitor.destroy();
if(log.isDebugEnabled()) {
log.debug(String.format("Cluster monitor has been removed: [cluster] %s ", clusterId));
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/fcf1dc7f/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 03b1ddd..98048a6 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
@@ -62,8 +62,7 @@ public class AutoscalerUtil {
* @throws PolicyValidationException
* @throws PartitionValidationException
*/
- public static ClusterContext
- getClusterContext(Cluster cluster) throws PolicyValidationException, PartitionValidationException {
+ public static ClusterContext getClusterContext(Cluster cluster) throws PolicyValidationException, PartitionValidationException {
// FIXME fix the following code to correctly update
// AutoscalerContext context = AutoscalerContext.getInstance();
if (null == cluster) {
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/fcf1dc7f/components/org.apache.stratos.autoscaler/src/test/resources/autoscaler.drl
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/test/resources/autoscaler.drl b/components/org.apache.stratos.autoscaler/src/test/resources/autoscaler.drl
index 7881efe..ba50959 100644
--- a/components/org.apache.stratos.autoscaler/src/test/resources/autoscaler.drl
+++ b/components/org.apache.stratos.autoscaler/src/test/resources/autoscaler.drl
@@ -49,6 +49,7 @@ global org.apache.stratos.autoscaler.rule.AutoscalerRuleEvaluator $evaluator;
global org.apache.stratos.messaging.domain.topology.Topology $topology;
global java.util.Map partitionCtxts;
global java.lang.String clusterId;
+global java.lang.boolean clusterRemoved;
import function org.apache.stratos.autoscaler.rule.AutoscalerRuleEvaluator.delegateSpawn;
import function org.apache.stratos.autoscaler.rule.AutoscalerRuleEvaluator.delegateTerminate;
@@ -76,4 +77,5 @@ dialect "mvel"
eval($ctxt.removeObsoleteMember(memberId))
then
delegateTerminate(memberId);
-end
\ No newline at end of file
+end
+