Updating cluster context classes

Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/e603f749
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/e603f749
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/e603f749

Branch: refs/heads/master
Commit: e603f749bbe65ba69e8fa3ed14d398cb0289e63a
Parents: 0756306
Author: Lahiru Sandaruwan <[email protected]>
Authored: Sun Nov 9 12:44:03 2014 +0530
Committer: Lahiru Sandaruwan <[email protected]>
Committed: Sun Nov 9 12:44:03 2014 +0530

----------------------------------------------------------------------
 .../autoscaler/AbstractClusterContext.java      | 642 +-----------------
 .../autoscaler/KubernetesClusterContext.java    |  31 +-
 .../stratos/autoscaler/VMClusterContext.java    | 667 ++-----------------
 .../autoscaler/VMServiceClusterContext.java     |  61 +-
 4 files changed, 93 insertions(+), 1308 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/e603f749/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/AbstractClusterContext.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/AbstractClusterContext.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/AbstractClusterContext.java
index e5e5aee..abd3f1e 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/AbstractClusterContext.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/AbstractClusterContext.java
@@ -18,18 +18,10 @@
  */
 package org.apache.stratos.autoscaler;
 
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Properties;
-import java.util.concurrent.ConcurrentHashMap;
-
 import org.apache.commons.configuration.XMLConfiguration;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy;
 import org.apache.stratos.autoscaler.policy.model.LoadAverage;
 import org.apache.stratos.autoscaler.policy.model.MemoryConsumption;
 import org.apache.stratos.autoscaler.policy.model.RequestsInFlight;
@@ -37,638 +29,28 @@ import org.apache.stratos.autoscaler.util.ConfUtil;
 import org.apache.stratos.cloud.controller.stub.pojo.MemberContext;
 import org.apache.stratos.common.constants.StratosConstants;
 
+import java.io.Serializable;
+import java.util.*;
+import java.util.Map.Entry;
+import java.util.concurrent.ConcurrentHashMap;
+
 /*
- * It holds the runtime data of a kubernetes service cluster
+ * It holds the runtime data of a service cluster
  */
 public class AbstractClusterContext implements Serializable {
 
-    private static final long serialVersionUID = 808741789615481596L;
     private static final Log log = 
LogFactory.getLog(AbstractClusterContext.class);
 
-    private String kubernetesClusterId;
-    private String serviceName;
-
-    private int minReplicas;
-    private int maxReplicas = 10;
-    private int currentReplicas = 0;
-    private float requiredReplicas = 0;
-
-    // it will tell whether the startContainers() method succeed or not for 
the 1st time
-    // we should call startContainers() only once
-    private boolean isServiceClusterCreated = false;
-
-    // properties
-    private Properties properties;
-
-    // 15 mints as the default
-    private long pendingMemberExpiryTime;
-    // pending members
-    private List<MemberContext> pendingMembers;
-
-    // active members
-    private List<MemberContext> activeMembers;
-
-    // 1 day as default
-    private long obsoltedMemberExpiryTime = 1*24*60*60*1000;
-
-    // members to be terminated
-    private Map<String, MemberContext> obsoletedMembers;
-
-    // termination pending members, member is added to this when Autoscaler 
send grace fully shut down event
-    private List<MemberContext> terminationPendingMembers;
-
-    //Keep statistics come from CEP
-    private Map<String, MemberStatsContext> memberStatsContexts;
-
-    //Following information will keep events details
-    private RequestsInFlight requestsInFlight;
-    private MemoryConsumption memoryConsumption;
-    private LoadAverage loadAverage;
 
     // cluster id
-    private String clusterId;
-
-    //boolean values to keep whether the requests in flight parameters are 
reset or not
-    private boolean rifReset = false, averageRifReset = false,
-            gradientRifReset = false, secondDerivativeRifRest = false;
-    //boolean values to keep whether the memory consumption parameters are 
reset or not
-    private boolean memoryConsumptionReset = false, 
averageMemoryConsumptionReset = false,
-            gradientMemoryConsumptionReset = false, 
secondDerivativeMemoryConsumptionRest = false;
-    //boolean values to keep whether the load average parameters are reset or 
not
-    private boolean loadAverageReset = false, averageLoadAverageReset = false,
-            gradientLoadAverageReset = false, secondDerivativeLoadAverageRest 
= false;
+    protected String clusterId;
+    private String serviceId;
 
-    public AbstractClusterContext(String kubernetesClusterId, String 
clusterId) {
-        this.kubernetesClusterId = kubernetesClusterId;
+    public AbstractClusterContext(String clusterId, String serviceId){
         this.clusterId = clusterId;
-        this.pendingMembers = new ArrayList<MemberContext>();
-        this.activeMembers = new ArrayList<MemberContext>();
-        this.terminationPendingMembers = new ArrayList<MemberContext>();
-        this.obsoletedMembers = new ConcurrentHashMap<String, MemberContext>();
-        this.memberStatsContexts = new ConcurrentHashMap<String, 
MemberStatsContext>();
-        this.requestsInFlight = new RequestsInFlight();
-        this.loadAverage = new LoadAverage();
-        this.memoryConsumption = new MemoryConsumption();
-
-        // check if a different value has been set for expiryTime
-        XMLConfiguration conf = ConfUtil.getInstance(null).getConfiguration();
-        pendingMemberExpiryTime = 
conf.getLong(StratosConstants.PENDING_CONTAINER_MEMBER_EXPIRY_TIMEOUT, 300000);
-        obsoltedMemberExpiryTime = 
conf.getLong(StratosConstants.OBSOLETED_CONTAINER_MEMBER_EXPIRY_TIMEOUT, 
3600000);
-        if (log.isDebugEnabled()) {
-               log.debug("Member expiry time is set to: " + 
pendingMemberExpiryTime);
-               log.debug("Member obsoleted expiry time is set to: " + 
obsoltedMemberExpiryTime);
-        }
-
-        Thread th = new Thread(new PendingMemberWatcher(this));
-        th.start();
-        Thread th2 = new Thread(new ObsoletedMemberWatcher(this));
-        th2.start();
-    }
-
-    public String getKubernetesClusterID() {
-        return kubernetesClusterId;
-    }
-
-    public void setKubernetesClusterID(String kubernetesClusterId) {
-        this.kubernetesClusterId = kubernetesClusterId;
-    }
-
-    public List<MemberContext> getPendingMembers() {
-        return pendingMembers;
-    }
-
-    public void setPendingMembers(List<MemberContext> pendingMembers) {
-        this.pendingMembers = pendingMembers;
-    }
-
-    public int getActiveMemberCount() {
-        return activeMembers.size();
-    }
-
-    public void setActiveMembers(List<MemberContext> activeMembers) {
-        this.activeMembers = activeMembers;
-    }
-
-    public int getMinReplicas() {
-        return minReplicas;
-    }
-
-    public void setMinReplicas(int minReplicas) {
-        this.minReplicas = minReplicas;
-    }
-
-    public int getMaxReplicas() {
-        return maxReplicas;
-    }
-
-    public void setMaxReplicas(int maxReplicas) {
-        this.maxReplicas = maxReplicas;
-    }
-
-    public int getCurrentReplicas() {
-        return currentReplicas;
-    }
-
-    public void setCurrentReplicas(int currentReplicas) {
-        this.currentReplicas = currentReplicas;
-    }
-
-    public void addPendingMember(MemberContext ctxt) {
-        this.pendingMembers.add(ctxt);
-    }
-
-    public boolean removePendingMember(String id) {
-        if (id == null) {
-            return false;
-        }
-        for (Iterator<MemberContext> iterator = pendingMembers.iterator(); 
iterator.hasNext(); ) {
-            MemberContext pendingMember = (MemberContext) iterator.next();
-            if (id.equals(pendingMember.getMemberId())) {
-                iterator.remove();
-                return true;
-            }
-
-        }
-
-        return false;
-    }
-
-    public void movePendingMemberToActiveMembers(String memberId) {
-        if (memberId == null) {
-            return;
-        }
-        Iterator<MemberContext> iterator = pendingMembers.listIterator();
-        while (iterator.hasNext()) {
-            MemberContext pendingMember = iterator.next();
-            if (pendingMember == null) {
-                iterator.remove();
-                continue;
-            }
-            if (memberId.equals(pendingMember.getMemberId())) {
-                // member is activated
-                // remove from pending list
-                iterator.remove();
-                // add to the activated list
-                this.activeMembers.add(pendingMember);
-                if (log.isDebugEnabled()) {
-                    log.debug(String.format(
-                            "Pending member is removed and added to the "
-                            + "activated member list. [Member Id] %s",
-                            memberId));
-                }
-                break;
-            }
-        }
-    }
-
-    public void addActiveMember(MemberContext ctxt) {
-        this.activeMembers.add(ctxt);
-    }
-
-    public void removeActiveMember(MemberContext ctxt) {
-        this.activeMembers.remove(ctxt);
-    }
-
-    public long getPendingMemberExpiryTime() {
-        return pendingMemberExpiryTime;
-    }
-
-    public void setPendingMemberExpiryTime(long pendingMemberExpiryTime) {
-        this.pendingMemberExpiryTime = pendingMemberExpiryTime;
-    }
-
-    public Map<String, MemberStatsContext> getMemberStatsContexts() {
-        return memberStatsContexts;
-    }
-
-    public MemberStatsContext getMemberStatsContext(String memberId) {
-        return memberStatsContexts.get(memberId);
-    }
-
-    public void addMemberStatsContext(MemberStatsContext ctxt) {
-        this.memberStatsContexts.put(ctxt.getMemberId(), ctxt);
-    }
-
-    public void removeMemberStatsContext(String memberId) {
-        this.memberStatsContexts.remove(memberId);
-    }
-
-    public Properties getProperties() {
-        return properties;
-    }
-
-    public void setProperties(Properties properties) {
-        this.properties = properties;
-    }
-
-    public String getServiceName() {
-        return serviceName;
-    }
-
-    public void setServiceName(String serviceName) {
-        this.serviceName = serviceName;
-    }
-
-    public List<MemberContext> getActiveMembers() {
-        return activeMembers;
-    }
-
-    public boolean removeActiveMemberById(String memberId) {
-        boolean removeActiveMember = false;
-        synchronized (activeMembers) {
-            Iterator<MemberContext> iterator = activeMembers.listIterator();
-            while (iterator.hasNext()) {
-                MemberContext memberContext = iterator.next();
-                if (memberId.equals(memberContext.getMemberId())) {
-                    iterator.remove();
-                    removeActiveMember = true;
-
-                    break;
-                }
-            }
-        }
-        return removeActiveMember;
-    }
-
-    public boolean activeMemberExist(String memberId) {
-
-        for (MemberContext memberContext : activeMembers) {
-            if (memberId.equals(memberContext.getMemberId())) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    public float getRequiredReplicas() {
-        return requiredReplicas;
-    }
-
-    public void setRequiredReplicas(float requiredReplicas) {
-        this.requiredReplicas = requiredReplicas;
-    }
-
-    private class PendingMemberWatcher implements Runnable {
-        private AbstractClusterContext ctxt;
-
-        public PendingMemberWatcher(AbstractClusterContext ctxt) {
-            this.ctxt = ctxt;
-        }
-
-        @Override
-        public void run() {
-
-            while (true) {
-                long expiryTime = ctxt.getPendingMemberExpiryTime();
-                List<MemberContext> pendingMembers = ctxt.getPendingMembers();
-
-                synchronized (pendingMembers) {
-                    Iterator<MemberContext> iterator = pendingMembers
-                            .listIterator();
-                    while (iterator.hasNext()) {
-                        MemberContext pendingMember = iterator.next();
-
-                        if (pendingMember == null) {
-                            continue;
-                        }
-                        long pendingTime = System.currentTimeMillis()
-                                           - pendingMember.getInitTime();
-                        if (pendingTime >= expiryTime) {
-                               iterator.remove();
-                               log.info("Pending state of member: " + 
pendingMember.getMemberId() +
-                                    " is expired. " + "Adding as an obsoleted 
member.");
-                               ctxt.addObsoleteMember(pendingMember);
-                        }
-                    }
-                }
-                try {
-                    // TODO find a constant
-                    Thread.sleep(15000);
-                } catch (InterruptedException ignore) {
-                }
-            }
-        }
-
-    }
-
-    private class ObsoletedMemberWatcher implements Runnable {
-        private AbstractClusterContext ctxt;
-
-        public ObsoletedMemberWatcher(AbstractClusterContext ctxt) {
-            this.ctxt = ctxt;
-        }
-
-        @Override
-        public void run() {
-            while (true) {
-
-                long obsoltedMemberExpiryTime = 
ctxt.getObsoltedMemberExpiryTime();
-                Map<String, MemberContext> obsoletedMembers = 
ctxt.getObsoletedMembers();
-                Iterator<Entry<String, MemberContext>> iterator = 
obsoletedMembers.entrySet().iterator();
-
-                while (iterator.hasNext()) {
-                    Entry<String, MemberContext> pairs = iterator.next();
-                    MemberContext obsoleteMember = (MemberContext) 
pairs.getValue();
-                    if (obsoleteMember == null) {
-                        continue;
-                    }
-                    long obsoleteTime = System.currentTimeMillis() - 
obsoleteMember.getInitTime();
-                    if (obsoleteTime >= obsoltedMemberExpiryTime) {
-                        iterator.remove();
-                        log.info("Obsolete state of member: " + 
obsoleteMember.getMemberId() +
-                                " is expired. " + "Removing from obsolete 
member list");
-                    }
-                }
-                try {
-                    // TODO find a constant
-                    Thread.sleep(15000);
-                } catch (InterruptedException ignore) {
-                }
-            }
-        }
-    }
-
-    public float getAverageRequestsInFlight() {
-        return requestsInFlight.getAverage();
-    }
-
-    public void setAverageRequestsInFlight(float averageRequestsInFlight) {
-        requestsInFlight.setAverage(averageRequestsInFlight);
-        averageRifReset = true;
-        if (secondDerivativeRifRest && gradientRifReset) {
-            rifReset = true;
-            if (log.isDebugEnabled()) {
-                log.debug(String.format("Requests in flights stats are reset, "
-                                        + "ready to do scale check [kub 
cluster] %s", this.kubernetesClusterId));
-            }
-        }
-    }
-
-    public float getRequestsInFlightSecondDerivative() {
-        return requestsInFlight.getSecondDerivative();
-    }
-
-    public void setRequestsInFlightSecondDerivative(
-            float requestsInFlightSecondDerivative) {
-        requestsInFlight.setSecondDerivative(requestsInFlightSecondDerivative);
-        secondDerivativeRifRest = true;
-        if (averageRifReset && gradientRifReset) {
-            rifReset = true;
-            if (log.isDebugEnabled()) {
-                log.debug(String.format("Requests in flights stats are reset, 
ready to do scale check "
-                                        + "[kub cluster] %s", 
this.kubernetesClusterId));
-            }
-        }
-    }
-
-    public float getRequestsInFlightGradient() {
-        return requestsInFlight.getGradient();
-    }
-
-    public void setRequestsInFlightGradient(float requestsInFlightGradient) {
-        requestsInFlight.setGradient(requestsInFlightGradient);
-        gradientRifReset = true;
-        if (secondDerivativeRifRest && averageRifReset) {
-            rifReset = true;
-            if (log.isDebugEnabled()) {
-                log.debug(String.format("Requests in flights stats are reset, 
ready to do scale check "
-                                        + "[kub cluster] %s", 
this.kubernetesClusterId));
-            }
-        }
-    }
-
-    public boolean isRifReset() {
-        return rifReset;
-    }
-
-    public void setRifReset(boolean rifReset) {
-        this.rifReset = rifReset;
-        this.averageRifReset = rifReset;
-        this.gradientRifReset = rifReset;
-        this.secondDerivativeRifRest = rifReset;
-    }
-
-    public float getAverageMemoryConsumption() {
-        return memoryConsumption.getAverage();
-    }
-
-    public void setAverageMemoryConsumption(float averageMemoryConsumption) {
-        memoryConsumption.setAverage(averageMemoryConsumption);
-        averageMemoryConsumptionReset = true;
-        if (secondDerivativeMemoryConsumptionRest
-            && gradientMemoryConsumptionReset) {
-            memoryConsumptionReset = true;
-            if (log.isDebugEnabled()) {
-                log.debug(String.format("Memory consumption stats are reset, 
ready to do scale check "
-                                        + "[kub cluster] %s", 
this.kubernetesClusterId));
-            }
-        }
-    }
-
-    public float getMemoryConsumptionSecondDerivative() {
-        return memoryConsumption.getSecondDerivative();
-    }
-
-    public void setMemoryConsumptionSecondDerivative(
-            float memoryConsumptionSecondDerivative) {
-        memoryConsumption
-                .setSecondDerivative(memoryConsumptionSecondDerivative);
-        secondDerivativeMemoryConsumptionRest = true;
-        if (averageMemoryConsumptionReset && gradientMemoryConsumptionReset) {
-            memoryConsumptionReset = true;
-            if (log.isDebugEnabled()) {
-                log.debug(String.format("Memory consumption stats are reset, 
ready to do scale check "
-                                        + "[kub cluster] %s", 
this.kubernetesClusterId));
-            }
-        }
-    }
-
-    public float getMemoryConsumptionGradient() {
-        return memoryConsumption.getGradient();
     }
 
-    public void setMemoryConsumptionGradient(float memoryConsumptionGradient) {
-        memoryConsumption.setGradient(memoryConsumptionGradient);
-        gradientMemoryConsumptionReset = true;
-        if (secondDerivativeMemoryConsumptionRest
-            && averageMemoryConsumptionReset) {
-            memoryConsumptionReset = true;
-            if (log.isDebugEnabled()) {
-                log.debug(String.format("Memory consumption stats are reset, 
ready to do scale check "
-                                        + "[kub cluster] %s", 
this.kubernetesClusterId));
-            }
-        }
+    public String getServiceId() {
+        return serviceId;
     }
-
-    public boolean isMemoryConsumptionReset() {
-        return memoryConsumptionReset;
-    }
-
-    public void setMemoryConsumptionReset(boolean memoryConsumptionReset) {
-        this.memoryConsumptionReset = memoryConsumptionReset;
-        this.averageMemoryConsumptionReset = memoryConsumptionReset;
-        this.gradientMemoryConsumptionReset = memoryConsumptionReset;
-        this.secondDerivativeMemoryConsumptionRest = memoryConsumptionReset;
-    }
-
-
-    public float getAverageLoadAverage() {
-        return loadAverage.getAverage();
-    }
-
-    public void setAverageLoadAverage(float averageLoadAverage) {
-        loadAverage.setAverage(averageLoadAverage);
-        averageLoadAverageReset = true;
-        if (secondDerivativeLoadAverageRest && gradientLoadAverageReset) {
-            loadAverageReset = true;
-            if (log.isDebugEnabled()) {
-                log.debug(String.format("Load average stats are reset, ready 
to do scale check "
-                                        + "[kub cluster] %s", 
this.kubernetesClusterId));
-            }
-        }
-    }
-
-    public float getLoadAverageSecondDerivative() {
-        return loadAverage.getSecondDerivative();
-    }
-
-    public void setLoadAverageSecondDerivative(float 
loadAverageSecondDerivative) {
-        loadAverage.setSecondDerivative(loadAverageSecondDerivative);
-        secondDerivativeLoadAverageRest = true;
-        if (averageLoadAverageReset && gradientLoadAverageReset) {
-            loadAverageReset = true;
-            if (log.isDebugEnabled()) {
-                log.debug(String.format("Load average stats are reset, ready 
to do scale check "
-                                        + "[kub cluster] %s", 
this.kubernetesClusterId));
-            }
-        }
-    }
-
-    public float getLoadAverageGradient() {
-        return loadAverage.getGradient();
-    }
-
-    public void setLoadAverageGradient(float loadAverageGradient) {
-        loadAverage.setGradient(loadAverageGradient);
-        gradientLoadAverageReset = true;
-        if (secondDerivativeLoadAverageRest && averageLoadAverageReset) {
-            loadAverageReset = true;
-            if (log.isDebugEnabled()) {
-                log.debug(String.format("Load average stats are reset, ready 
to do scale check "
-                                        + "[kub cluster] %s", 
this.kubernetesClusterId));
-            }
-        }
-    }
-
-    public boolean isLoadAverageReset() {
-        return loadAverageReset;
-    }
-
-    public void setLoadAverageReset(boolean loadAverageReset) {
-        this.loadAverageReset = loadAverageReset;
-        this.averageLoadAverageReset = loadAverageReset;
-        this.gradientLoadAverageReset = loadAverageReset;
-        this.secondDerivativeLoadAverageRest = loadAverageReset;
-    }
-    
-    public void moveActiveMemberToTerminationPendingMembers(String memberId) {
-        if (memberId == null) {
-            return;
-        }
-        Iterator<MemberContext> iterator = activeMembers.listIterator();
-        while ( iterator.hasNext()) {
-            MemberContext activeMember = iterator.next();
-            if(activeMember == null) {
-                iterator.remove();
-                continue;
-            }
-            if(memberId.equals(activeMember.getMemberId())){
-                // member is activated
-                // remove from pending list
-                iterator.remove();
-                // add to the activated list
-                this.terminationPendingMembers.add(activeMember);
-                if (log.isDebugEnabled()) {
-                    log.debug(String.format("Active member is removed and 
added to the " +
-                            "termination pending member list. [Member Id] %s", 
memberId));
-                }
-                break;
-            }
-        }
-    }
-    
-    public boolean removeTerminationPendingMember(String memberId) {
-        boolean terminationPendingMemberAvailable = false;
-        for (MemberContext memberContext: terminationPendingMembers){
-            if(memberContext.getMemberId().equals(memberId)){
-                terminationPendingMemberAvailable = true;
-                terminationPendingMembers.remove(memberContext);
-                break;
-            }
-        }
-        return terminationPendingMemberAvailable;
-    }
-    
-    public long getObsoltedMemberExpiryTime() {
-        return obsoltedMemberExpiryTime;
-    }
-    
-    public void setObsoltedMemberExpiryTime(long obsoltedMemberExpiryTime) {
-        this.obsoltedMemberExpiryTime = obsoltedMemberExpiryTime;
-    }
-    
-    public void addObsoleteMember(MemberContext ctxt) {
-        this.obsoletedMembers.put(ctxt.getMemberId(), ctxt);
-    }
-    
-    public boolean removeObsoleteMember(String memberId) {
-        if(this.obsoletedMembers.remove(memberId) == null) {
-            return false;
-        }
-        return true;
-    }
-    
-    public Map<String, MemberContext> getObsoletedMembers() {
-        return obsoletedMembers;
-    }
-        
-    public void setObsoletedMembers(Map<String, MemberContext> 
obsoletedMembers) {
-        this.obsoletedMembers = obsoletedMembers;
-    }
-
-    public MemberStatsContext getPartitionCtxt(String id) {
-        return this.memberStatsContexts.get(id);
-    }
-
-    public List<MemberContext> getTerminationPendingMembers() {
-        return terminationPendingMembers;
-    }
-
-    public void setTerminationPendingMembers(List<MemberContext> 
terminationPendingMembers) {
-        this.terminationPendingMembers = terminationPendingMembers;
-    }
-
-    public int getTotalMemberCount() {
-        return activeMembers.size() + pendingMembers.size() + 
terminationPendingMembers.size();
-    }
-
-    public int getNonTerminatedMemberCount() {
-        return activeMembers.size() + pendingMembers.size() + 
terminationPendingMembers.size();
-    }
-
-       public String getClusterId() {
-               return clusterId;
-       }
-
-       public void setClusterId(String clusterId) {
-               this.clusterId = clusterId;
-       }
-
-       public boolean isServiceClusterCreated() {
-               return isServiceClusterCreated;
-       }
-
-       public void setServiceClusterCreated(boolean isServiceClusterCreated) {
-               this.isServiceClusterCreated = isServiceClusterCreated;
-       }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/e603f749/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/KubernetesClusterContext.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/KubernetesClusterContext.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/KubernetesClusterContext.java
index 7c09811..8b9cc94 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/KubernetesClusterContext.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/KubernetesClusterContext.java
@@ -30,6 +30,7 @@ import java.util.concurrent.ConcurrentHashMap;
 import org.apache.commons.configuration.XMLConfiguration;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy;
 import org.apache.stratos.autoscaler.policy.model.LoadAverage;
 import org.apache.stratos.autoscaler.policy.model.MemoryConsumption;
 import org.apache.stratos.autoscaler.policy.model.RequestsInFlight;
@@ -40,7 +41,7 @@ import org.apache.stratos.common.constants.StratosConstants;
 /*
  * It holds the runtime data of a kubernetes service cluster
  */
-public class KubernetesClusterContext implements Serializable {
+public class KubernetesClusterContext extends AbstractClusterContext {
 
     private static final long serialVersionUID = 808741789615481596L;
     private static final Log log = 
LogFactory.getLog(KubernetesClusterContext.class);
@@ -49,9 +50,11 @@ public class KubernetesClusterContext implements 
Serializable {
     private String serviceName;
 
     private int minReplicas;
-    private int maxReplicas = 10;
-    private int currentReplicas = 0;
-    
+    private int maxReplicas;
+    private int currentReplicas;
+
+    private AutoscalePolicy autoscalePolicy;
+
     // it will tell whether the startContainers() method succeed or not for 
the 1st time
     // we should call startContainers() only once
     private boolean isServiceClusterCreated = false;
@@ -66,13 +69,13 @@ public class KubernetesClusterContext implements 
Serializable {
 
     // active members
     private List<MemberContext> activeMembers;
-    
+
     // 1 day as default
     private long obsoltedMemberExpiryTime = 1*24*60*60*1000;
 
     // members to be terminated
     private Map<String, MemberContext> obsoletedMembers;
-    
+
     // termination pending members, member is added to this when Autoscaler 
send grace fully shut down event
     private List<MemberContext> terminationPendingMembers;
 
@@ -84,9 +87,6 @@ public class KubernetesClusterContext implements Serializable 
{
     private MemoryConsumption memoryConsumption;
     private LoadAverage loadAverage;
 
-    // cluster id
-    private String clusterId;
-
     //boolean values to keep whether the requests in flight parameters are 
reset or not
     private boolean rifReset = false, averageRifReset = false,
             gradientRifReset = false, secondDerivativeRifRest = false;
@@ -97,9 +97,13 @@ public class KubernetesClusterContext implements 
Serializable {
     private boolean loadAverageReset = false, averageLoadAverageReset = false,
             gradientLoadAverageReset = false, secondDerivativeLoadAverageRest 
= false;
 
-    public KubernetesClusterContext(String kubernetesClusterId, String 
clusterId) {
+    public KubernetesClusterContext(String kubernetesClusterId, String 
clusterId, String serviceId, AutoscalePolicy autoscalePolicy,
+                                    int minCount, int maxCount) {
+
+        super(clusterId, serviceId);
         this.kubernetesClusterId = kubernetesClusterId;
-        this.clusterId = clusterId;
+        this.minReplicas = minCount;
+        this.maxReplicas = maxCount;
         this.pendingMembers = new ArrayList<MemberContext>();
         this.activeMembers = new ArrayList<MemberContext>();
         this.terminationPendingMembers = new ArrayList<MemberContext>();
@@ -108,6 +112,7 @@ public class KubernetesClusterContext implements 
Serializable {
         this.requestsInFlight = new RequestsInFlight();
         this.loadAverage = new LoadAverage();
         this.memoryConsumption = new MemoryConsumption();
+        this.autoscalePolicy = autoscalePolicy;
 
         // check if a different value has been set for expiryTime
         XMLConfiguration conf = ConfUtil.getInstance(null).getConfiguration();
@@ -299,6 +304,10 @@ public class KubernetesClusterContext implements 
Serializable {
         return false;
     }
 
+    public AutoscalePolicy getAutoscalePolicy() {
+        return autoscalePolicy;
+    }
+
     private class PendingMemberWatcher implements Runnable {
         private KubernetesClusterContext ctxt;
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/e603f749/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/VMClusterContext.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/VMClusterContext.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/VMClusterContext.java
index e6f79bc..b3f3246 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/VMClusterContext.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/VMClusterContext.java
@@ -18,657 +18,100 @@
  */
 package org.apache.stratos.autoscaler;
 
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Properties;
-import java.util.concurrent.ConcurrentHashMap;
-
 import org.apache.commons.configuration.XMLConfiguration;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.autoscaler.policy.model.LoadAverage;
-import org.apache.stratos.autoscaler.policy.model.MemoryConsumption;
-import org.apache.stratos.autoscaler.policy.model.RequestsInFlight;
+import org.apache.stratos.autoscaler.client.CloudControllerClient;
+import org.apache.stratos.autoscaler.exception.TerminationException;
+import org.apache.stratos.autoscaler.policy.model.*;
+import org.apache.stratos.autoscaler.status.checker.StatusChecker;
 import org.apache.stratos.autoscaler.util.ConfUtil;
 import org.apache.stratos.cloud.controller.stub.pojo.MemberContext;
 import org.apache.stratos.common.constants.StratosConstants;
+import org.apache.stratos.messaging.domain.topology.Cluster;
+import org.apache.stratos.messaging.domain.topology.Member;
+import org.apache.stratos.messaging.domain.topology.Service;
+import org.apache.stratos.messaging.event.health.stat.*;
+import org.apache.stratos.messaging.event.topology.*;
+import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
+
+import java.io.Serializable;
+import java.util.*;
+import java.util.Map.Entry;
+import java.util.concurrent.ConcurrentHashMap;
 
 /*
- * It holds the runtime data of a kubernetes service cluster
+ * It holds the runtime data of a VM cluster
  */
-public class VMClusterContext implements Serializable {
+public class VMClusterContext extends AbstractClusterContext {
 
-    private static final long serialVersionUID = 808741789615481596L;
     private static final Log log = LogFactory.getLog(VMClusterContext.class);
 
-    private String kubernetesClusterId;
-    private String serviceName;
-
-    private int minReplicas;
-    private int maxReplicas = 10;
-    private int currentReplicas = 0;
-    private float requiredReplicas = 0;
-
-    // it will tell whether the startContainers() method succeed or not for 
the 1st time
-    // we should call startContainers() only once
-    private boolean isServiceClusterCreated = false;
-
-    // properties
-    private Properties properties;
-
-    // 15 mints as the default
-    private long pendingMemberExpiryTime;
-    // pending members
-    private List<MemberContext> pendingMembers;
-
-    // active members
-    private List<MemberContext> activeMembers;
-
-    // 1 day as default
-    private long obsoltedMemberExpiryTime = 1*24*60*60*1000;
-
-    // members to be terminated
-    private Map<String, MemberContext> obsoletedMembers;
-
-    // termination pending members, member is added to this when Autoscaler 
send grace fully shut down event
-    private List<MemberContext> terminationPendingMembers;
-
-    //Keep statistics come from CEP
-    private Map<String, MemberStatsContext> memberStatsContexts;
-
-    //Following information will keep events details
-    private RequestsInFlight requestsInFlight;
-    private MemoryConsumption memoryConsumption;
-    private LoadAverage loadAverage;
-
-    // cluster id
-    private String clusterId;
-
-    //boolean values to keep whether the requests in flight parameters are 
reset or not
-    private boolean rifReset = false, averageRifReset = false,
-            gradientRifReset = false, secondDerivativeRifRest = false;
-    //boolean values to keep whether the memory consumption parameters are 
reset or not
-    private boolean memoryConsumptionReset = false, 
averageMemoryConsumptionReset = false,
-            gradientMemoryConsumptionReset = false, 
secondDerivativeMemoryConsumptionRest = false;
-    //boolean values to keep whether the load average parameters are reset or 
not
-    private boolean loadAverageReset = false, averageLoadAverageReset = false,
-            gradientLoadAverageReset = false, secondDerivativeLoadAverageRest 
= false;
-
-    public VMClusterContext(String kubernetesClusterId, String clusterId) {
-        this.kubernetesClusterId = kubernetesClusterId;
-        this.clusterId = clusterId;
-        this.pendingMembers = new ArrayList<MemberContext>();
-        this.activeMembers = new ArrayList<MemberContext>();
-        this.terminationPendingMembers = new ArrayList<MemberContext>();
-        this.obsoletedMembers = new ConcurrentHashMap<String, MemberContext>();
-        this.memberStatsContexts = new ConcurrentHashMap<String, 
MemberStatsContext>();
-        this.requestsInFlight = new RequestsInFlight();
-        this.loadAverage = new LoadAverage();
-        this.memoryConsumption = new MemoryConsumption();
-
-        // check if a different value has been set for expiryTime
-        XMLConfiguration conf = ConfUtil.getInstance(null).getConfiguration();
-        pendingMemberExpiryTime = 
conf.getLong(StratosConstants.PENDING_CONTAINER_MEMBER_EXPIRY_TIMEOUT, 300000);
-        obsoltedMemberExpiryTime = 
conf.getLong(StratosConstants.OBSOLETED_CONTAINER_MEMBER_EXPIRY_TIMEOUT, 
3600000);
-        if (log.isDebugEnabled()) {
-               log.debug("Member expiry time is set to: " + 
pendingMemberExpiryTime);
-               log.debug("Member obsoleted expiry time is set to: " + 
obsoltedMemberExpiryTime);
-        }
-
-        Thread th = new Thread(new PendingMemberWatcher(this));
-        th.start();
-        Thread th2 = new Thread(new ObsoletedMemberWatcher(this));
-        th2.start();
-    }
-
-    public String getKubernetesClusterID() {
-        return kubernetesClusterId;
-    }
-
-    public void setKubernetesClusterID(String kubernetesClusterId) {
-        this.kubernetesClusterId = kubernetesClusterId;
-    }
-
-    public List<MemberContext> getPendingMembers() {
-        return pendingMembers;
-    }
-
-    public void setPendingMembers(List<MemberContext> pendingMembers) {
-        this.pendingMembers = pendingMembers;
-    }
-
-    public int getActiveMemberCount() {
-        return activeMembers.size();
-    }
-
-    public void setActiveMembers(List<MemberContext> activeMembers) {
-        this.activeMembers = activeMembers;
-    }
-
-    public int getMinReplicas() {
-        return minReplicas;
-    }
-
-    public void setMinReplicas(int minReplicas) {
-        this.minReplicas = minReplicas;
-    }
-
-    public int getMaxReplicas() {
-        return maxReplicas;
-    }
-
-    public void setMaxReplicas(int maxReplicas) {
-        this.maxReplicas = maxReplicas;
-    }
-
-    public int getCurrentReplicas() {
-        return currentReplicas;
-    }
-
-    public void setCurrentReplicas(int currentReplicas) {
-        this.currentReplicas = currentReplicas;
-    }
-
-    public void addPendingMember(MemberContext ctxt) {
-        this.pendingMembers.add(ctxt);
-    }
-
-    public boolean removePendingMember(String id) {
-        if (id == null) {
-            return false;
-        }
-        for (Iterator<MemberContext> iterator = pendingMembers.iterator(); 
iterator.hasNext(); ) {
-            MemberContext pendingMember = (MemberContext) iterator.next();
-            if (id.equals(pendingMember.getMemberId())) {
-                iterator.remove();
-                return true;
-            }
-
-        }
-
-        return false;
-    }
-
-    public void movePendingMemberToActiveMembers(String memberId) {
-        if (memberId == null) {
-            return;
-        }
-        Iterator<MemberContext> iterator = pendingMembers.listIterator();
-        while (iterator.hasNext()) {
-            MemberContext pendingMember = iterator.next();
-            if (pendingMember == null) {
-                iterator.remove();
-                continue;
-            }
-            if (memberId.equals(pendingMember.getMemberId())) {
-                // member is activated
-                // remove from pending list
-                iterator.remove();
-                // add to the activated list
-                this.activeMembers.add(pendingMember);
-                if (log.isDebugEnabled()) {
-                    log.debug(String.format(
-                            "Pending member is removed and added to the "
-                            + "activated member list. [Member Id] %s",
-                            memberId));
-                }
-                break;
-            }
-        }
-    }
-
-    public void addActiveMember(MemberContext ctxt) {
-        this.activeMembers.add(ctxt);
-    }
-
-    public void removeActiveMember(MemberContext ctxt) {
-        this.activeMembers.remove(ctxt);
-    }
-
-    public long getPendingMemberExpiryTime() {
-        return pendingMemberExpiryTime;
-    }
-
-    public void setPendingMemberExpiryTime(long pendingMemberExpiryTime) {
-        this.pendingMemberExpiryTime = pendingMemberExpiryTime;
-    }
-
-    public Map<String, MemberStatsContext> getMemberStatsContexts() {
-        return memberStatsContexts;
-    }
-
-    public MemberStatsContext getMemberStatsContext(String memberId) {
-        return memberStatsContexts.get(memberId);
-    }
-
-    public void addMemberStatsContext(MemberStatsContext ctxt) {
-        this.memberStatsContexts.put(ctxt.getMemberId(), ctxt);
-    }
-
-    public void removeMemberStatsContext(String memberId) {
-        this.memberStatsContexts.remove(memberId);
-    }
-
-    public Properties getProperties() {
-        return properties;
-    }
-
-    public void setProperties(Properties properties) {
-        this.properties = properties;
-    }
-
-    public String getServiceName() {
-        return serviceName;
-    }
-
-    public void setServiceName(String serviceName) {
-        this.serviceName = serviceName;
-    }
-
-    public List<MemberContext> getActiveMembers() {
-        return activeMembers;
-    }
-
-    public boolean removeActiveMemberById(String memberId) {
-        boolean removeActiveMember = false;
-        synchronized (activeMembers) {
-            Iterator<MemberContext> iterator = activeMembers.listIterator();
-            while (iterator.hasNext()) {
-                MemberContext memberContext = iterator.next();
-                if (memberId.equals(memberContext.getMemberId())) {
-                    iterator.remove();
-                    removeActiveMember = true;
-
-                    break;
-                }
-            }
-        }
-        return removeActiveMember;
-    }
-
-    public boolean activeMemberExist(String memberId) {
-
-        for (MemberContext memberContext : activeMembers) {
-            if (memberId.equals(memberContext.getMemberId())) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    public float getRequiredReplicas() {
-        return requiredReplicas;
-    }
-
-    public void setRequiredReplicas(float requiredReplicas) {
-        this.requiredReplicas = requiredReplicas;
-    }
-
-    private class PendingMemberWatcher implements Runnable {
-        private VMClusterContext ctxt;
-
-        public PendingMemberWatcher(VMClusterContext ctxt) {
-            this.ctxt = ctxt;
-        }
-
-        @Override
-        public void run() {
-
-            while (true) {
-                long expiryTime = ctxt.getPendingMemberExpiryTime();
-                List<MemberContext> pendingMembers = ctxt.getPendingMembers();
-
-                synchronized (pendingMembers) {
-                    Iterator<MemberContext> iterator = pendingMembers
-                            .listIterator();
-                    while (iterator.hasNext()) {
-                        MemberContext pendingMember = iterator.next();
-
-                        if (pendingMember == null) {
-                            continue;
-                        }
-                        long pendingTime = System.currentTimeMillis()
-                                           - pendingMember.getInitTime();
-                        if (pendingTime >= expiryTime) {
-                               iterator.remove();
-                               log.info("Pending state of member: " + 
pendingMember.getMemberId() +
-                                    " is expired. " + "Adding as an obsoleted 
member.");
-                               ctxt.addObsoleteMember(pendingMember);
-                        }
-                    }
-                }
-                try {
-                    // TODO find a constant
-                    Thread.sleep(15000);
-                } catch (InterruptedException ignore) {
-                }
-            }
-        }
-
-    }
-
-    private class ObsoletedMemberWatcher implements Runnable {
-        private VMClusterContext ctxt;
-
-        public ObsoletedMemberWatcher(VMClusterContext ctxt) {
-            this.ctxt = ctxt;
-        }
-
-        @Override
-        public void run() {
-            while (true) {
-
-                long obsoltedMemberExpiryTime = 
ctxt.getObsoltedMemberExpiryTime();
-                Map<String, MemberContext> obsoletedMembers = 
ctxt.getObsoletedMembers();
-                Iterator<Entry<String, MemberContext>> iterator = 
obsoletedMembers.entrySet().iterator();
-
-                while (iterator.hasNext()) {
-                    Entry<String, MemberContext> pairs = iterator.next();
-                    MemberContext obsoleteMember = (MemberContext) 
pairs.getValue();
-                    if (obsoleteMember == null) {
-                        continue;
-                    }
-                    long obsoleteTime = System.currentTimeMillis() - 
obsoleteMember.getInitTime();
-                    if (obsoleteTime >= obsoltedMemberExpiryTime) {
-                        iterator.remove();
-                        log.info("Obsolete state of member: " + 
obsoleteMember.getMemberId() +
-                                " is expired. " + "Removing from obsolete 
member list");
-                    }
-                }
-                try {
-                    // TODO find a constant
-                    Thread.sleep(15000);
-                } catch (InterruptedException ignore) {
-                }
-            }
-        }
-    }
-
-    public float getAverageRequestsInFlight() {
-        return requestsInFlight.getAverage();
-    }
-
-    public void setAverageRequestsInFlight(float averageRequestsInFlight) {
-        requestsInFlight.setAverage(averageRequestsInFlight);
-        averageRifReset = true;
-        if (secondDerivativeRifRest && gradientRifReset) {
-            rifReset = true;
-            if (log.isDebugEnabled()) {
-                log.debug(String.format("Requests in flights stats are reset, "
-                                        + "ready to do scale check [kub 
cluster] %s", this.kubernetesClusterId));
-            }
-        }
-    }
-
-    public float getRequestsInFlightSecondDerivative() {
-        return requestsInFlight.getSecondDerivative();
-    }
-
-    public void setRequestsInFlightSecondDerivative(
-            float requestsInFlightSecondDerivative) {
-        requestsInFlight.setSecondDerivative(requestsInFlightSecondDerivative);
-        secondDerivativeRifRest = true;
-        if (averageRifReset && gradientRifReset) {
-            rifReset = true;
-            if (log.isDebugEnabled()) {
-                log.debug(String.format("Requests in flights stats are reset, 
ready to do scale check "
-                                        + "[kub cluster] %s", 
this.kubernetesClusterId));
-            }
-        }
-    }
-
-    public float getRequestsInFlightGradient() {
-        return requestsInFlight.getGradient();
-    }
+    // Map<NetworkpartitionId, Network Partition Context>
+    protected Map<String, NetworkPartitionContext> networkPartitionCtxts;
+    protected DeploymentPolicy deploymentPolicy;
+    protected AutoscalePolicy autoscalePolicy;
 
-    public void setRequestsInFlightGradient(float requestsInFlightGradient) {
-        requestsInFlight.setGradient(requestsInFlightGradient);
-        gradientRifReset = true;
-        if (secondDerivativeRifRest && averageRifReset) {
-            rifReset = true;
-            if (log.isDebugEnabled()) {
-                log.debug(String.format("Requests in flights stats are reset, 
ready to do scale check "
-                                        + "[kub cluster] %s", 
this.kubernetesClusterId));
-            }
-        }
-    }
-
-    public boolean isRifReset() {
-        return rifReset;
-    }
+    public VMClusterContext(String clusterId, String serviceId, 
AutoscalePolicy autoscalePolicy, DeploymentPolicy deploymentPolicy,
+                            Map<String, NetworkPartitionContext> 
networkPartitionCtxts) {
 
-    public void setRifReset(boolean rifReset) {
-        this.rifReset = rifReset;
-        this.averageRifReset = rifReset;
-        this.gradientRifReset = rifReset;
-        this.secondDerivativeRifRest = rifReset;
-    }
+        super(clusterId, serviceId);
+        this.deploymentPolicy = deploymentPolicy;
+        this.networkPartitionCtxts = networkPartitionCtxts;
+        this.autoscalePolicy = autoscalePolicy;
 
-    public float getAverageMemoryConsumption() {
-        return memoryConsumption.getAverage();
     }
 
-    public void setAverageMemoryConsumption(float averageMemoryConsumption) {
-        memoryConsumption.setAverage(averageMemoryConsumption);
-        averageMemoryConsumptionReset = true;
-        if (secondDerivativeMemoryConsumptionRest
-            && gradientMemoryConsumptionReset) {
-            memoryConsumptionReset = true;
-            if (log.isDebugEnabled()) {
-                log.debug(String.format("Memory consumption stats are reset, 
ready to do scale check "
-                                        + "[kub cluster] %s", 
this.kubernetesClusterId));
-            }
-        }
-    }
-
-    public float getMemoryConsumptionSecondDerivative() {
-        return memoryConsumption.getSecondDerivative();
-    }
-
-    public void setMemoryConsumptionSecondDerivative(
-            float memoryConsumptionSecondDerivative) {
-        memoryConsumption
-                .setSecondDerivative(memoryConsumptionSecondDerivative);
-        secondDerivativeMemoryConsumptionRest = true;
-        if (averageMemoryConsumptionReset && gradientMemoryConsumptionReset) {
-            memoryConsumptionReset = true;
-            if (log.isDebugEnabled()) {
-                log.debug(String.format("Memory consumption stats are reset, 
ready to do scale check "
-                                        + "[kub cluster] %s", 
this.kubernetesClusterId));
-            }
-        }
+    public Map<String, NetworkPartitionContext> getNetworkPartitionCtxts(){
+        return networkPartitionCtxts;
     }
 
-    public float getMemoryConsumptionGradient() {
-        return memoryConsumption.getGradient();
+    public DeploymentPolicy getDeploymentPolicy() {
+        return deploymentPolicy;
     }
 
-    public void setMemoryConsumptionGradient(float memoryConsumptionGradient) {
-        memoryConsumption.setGradient(memoryConsumptionGradient);
-        gradientMemoryConsumptionReset = true;
-        if (secondDerivativeMemoryConsumptionRest
-            && averageMemoryConsumptionReset) {
-            memoryConsumptionReset = true;
-            if (log.isDebugEnabled()) {
-                log.debug(String.format("Memory consumption stats are reset, 
ready to do scale check "
-                                        + "[kub cluster] %s", 
this.kubernetesClusterId));
-            }
-        }
+    public void setDeploymentPolicy(DeploymentPolicy deploymentPolicy) {
+        this.deploymentPolicy = deploymentPolicy;
     }
 
-    public boolean isMemoryConsumptionReset() {
-        return memoryConsumptionReset;
+    public AutoscalePolicy getAutoscalePolicy() {
+        return autoscalePolicy;
     }
 
-    public void setMemoryConsumptionReset(boolean memoryConsumptionReset) {
-        this.memoryConsumptionReset = memoryConsumptionReset;
-        this.averageMemoryConsumptionReset = memoryConsumptionReset;
-        this.gradientMemoryConsumptionReset = memoryConsumptionReset;
-        this.secondDerivativeMemoryConsumptionRest = memoryConsumptionReset;
+    public void setAutoscalePolicy(AutoscalePolicy autoscalePolicy) {
+        this.autoscalePolicy = autoscalePolicy;
     }
 
-
-    public float getAverageLoadAverage() {
-        return loadAverage.getAverage();
+    public NetworkPartitionContext getNetworkPartitionCtxt(String 
networkPartitionId) {
+        return networkPartitionCtxts.get(networkPartitionId);
     }
 
-    public void setAverageLoadAverage(float averageLoadAverage) {
-        loadAverage.setAverage(averageLoadAverage);
-        averageLoadAverageReset = true;
-        if (secondDerivativeLoadAverageRest && gradientLoadAverageReset) {
-            loadAverageReset = true;
-            if (log.isDebugEnabled()) {
-                log.debug(String.format("Load average stats are reset, ready 
to do scale check "
-                                        + "[kub cluster] %s", 
this.kubernetesClusterId));
-            }
-        }
+    public void setPartitionCtxt(Map<String, NetworkPartitionContext> 
partitionCtxt) {
+        this.networkPartitionCtxts = partitionCtxt;
     }
 
-    public float getLoadAverageSecondDerivative() {
-        return loadAverage.getSecondDerivative();
+    public boolean partitionCtxtAvailable(String partitionId) {
+        return networkPartitionCtxts.containsKey(partitionId);
     }
 
-    public void setLoadAverageSecondDerivative(float 
loadAverageSecondDerivative) {
-        loadAverage.setSecondDerivative(loadAverageSecondDerivative);
-        secondDerivativeLoadAverageRest = true;
-        if (averageLoadAverageReset && gradientLoadAverageReset) {
-            loadAverageReset = true;
-            if (log.isDebugEnabled()) {
-                log.debug(String.format("Load average stats are reset, ready 
to do scale check "
-                                        + "[kub cluster] %s", 
this.kubernetesClusterId));
-            }
-        }
+    public void addNetworkPartitionCtxt(NetworkPartitionContext ctxt) {
+        this.networkPartitionCtxts.put(ctxt.getId(), ctxt);
     }
 
-    public float getLoadAverageGradient() {
-        return loadAverage.getGradient();
+    public NetworkPartitionContext getPartitionCtxt(String id) {
+        return this.networkPartitionCtxts.get(id);
     }
 
-    public void setLoadAverageGradient(float loadAverageGradient) {
-        loadAverage.setGradient(loadAverageGradient);
-        gradientLoadAverageReset = true;
-        if (secondDerivativeLoadAverageRest && averageLoadAverageReset) {
-            loadAverageReset = true;
-            if (log.isDebugEnabled()) {
-                log.debug(String.format("Load average stats are reset, ready 
to do scale check "
-                                        + "[kub cluster] %s", 
this.kubernetesClusterId));
-            }
+    public NetworkPartitionContext getNetworkPartitionCtxt(Member member) {
+        log.info("***** getNetworkPartitionCtxt " + 
member.getNetworkPartitionId());
+        String networkPartitionId = member.getNetworkPartitionId();
+        if (networkPartitionCtxts.containsKey(networkPartitionId)) {
+            log.info("returnnig network partition context " + 
networkPartitionCtxts.get(networkPartitionId));
+            return networkPartitionCtxts.get(networkPartitionId);
         }
-    }
 
-    public boolean isLoadAverageReset() {
-        return loadAverageReset;
+        log.info("returning null getNetworkPartitionCtxt");
+        return null;
     }
 
-    public void setLoadAverageReset(boolean loadAverageReset) {
-        this.loadAverageReset = loadAverageReset;
-        this.averageLoadAverageReset = loadAverageReset;
-        this.gradientLoadAverageReset = loadAverageReset;
-        this.secondDerivativeLoadAverageRest = loadAverageReset;
-    }
-    
-    public void moveActiveMemberToTerminationPendingMembers(String memberId) {
-        if (memberId == null) {
-            return;
-        }
-        Iterator<MemberContext> iterator = activeMembers.listIterator();
-        while ( iterator.hasNext()) {
-            MemberContext activeMember = iterator.next();
-            if(activeMember == null) {
-                iterator.remove();
-                continue;
-            }
-            if(memberId.equals(activeMember.getMemberId())){
-                // member is activated
-                // remove from pending list
-                iterator.remove();
-                // add to the activated list
-                this.terminationPendingMembers.add(activeMember);
-                if (log.isDebugEnabled()) {
-                    log.debug(String.format("Active member is removed and 
added to the " +
-                            "termination pending member list. [Member Id] %s", 
memberId));
-                }
-                break;
-            }
-        }
-    }
-    
-    public boolean removeTerminationPendingMember(String memberId) {
-        boolean terminationPendingMemberAvailable = false;
-        for (MemberContext memberContext: terminationPendingMembers){
-            if(memberContext.getMemberId().equals(memberId)){
-                terminationPendingMemberAvailable = true;
-                terminationPendingMembers.remove(memberContext);
-                break;
-            }
-        }
-        return terminationPendingMemberAvailable;
-    }
-    
-    public long getObsoltedMemberExpiryTime() {
-        return obsoltedMemberExpiryTime;
-    }
-    
-    public void setObsoltedMemberExpiryTime(long obsoltedMemberExpiryTime) {
-        this.obsoltedMemberExpiryTime = obsoltedMemberExpiryTime;
-    }
-    
-    public void addObsoleteMember(MemberContext ctxt) {
-        this.obsoletedMembers.put(ctxt.getMemberId(), ctxt);
-    }
-    
-    public boolean removeObsoleteMember(String memberId) {
-        if(this.obsoletedMembers.remove(memberId) == null) {
-            return false;
-        }
-        return true;
-    }
-    
-    public Map<String, MemberContext> getObsoletedMembers() {
-        return obsoletedMembers;
-    }
-        
-    public void setObsoletedMembers(Map<String, MemberContext> 
obsoletedMembers) {
-        this.obsoletedMembers = obsoletedMembers;
-    }
-
-    public MemberStatsContext getPartitionCtxt(String id) {
-        return this.memberStatsContexts.get(id);
-    }
-
-    public List<MemberContext> getTerminationPendingMembers() {
-        return terminationPendingMembers;
-    }
-
-    public void setTerminationPendingMembers(List<MemberContext> 
terminationPendingMembers) {
-        this.terminationPendingMembers = terminationPendingMembers;
-    }
-
-    public int getTotalMemberCount() {
-        return activeMembers.size() + pendingMembers.size() + 
terminationPendingMembers.size();
-    }
-
-    public int getNonTerminatedMemberCount() {
-        return activeMembers.size() + pendingMembers.size() + 
terminationPendingMembers.size();
-    }
-
-       public String getClusterId() {
-               return clusterId;
-       }
-
-       public void setClusterId(String clusterId) {
-               this.clusterId = clusterId;
-       }
-
-       public boolean isServiceClusterCreated() {
-               return isServiceClusterCreated;
-       }
-
-       public void setServiceClusterCreated(boolean isServiceClusterCreated) {
-               this.isServiceClusterCreated = isServiceClusterCreated;
-       }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/e603f749/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/VMServiceClusterContext.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/VMServiceClusterContext.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/VMServiceClusterContext.java
index b217fb1..6b9fefd 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/VMServiceClusterContext.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/VMServiceClusterContext.java
@@ -20,45 +20,29 @@ package org.apache.stratos.autoscaler;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.autoscaler.policy.model.*;
+import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy;
+import org.apache.stratos.autoscaler.policy.model.DeploymentPolicy;
 import org.apache.stratos.messaging.domain.topology.Member;
 
-import java.util.*;
+import java.util.Map;
 
 /*
  * It holds the runtime data of a VM service cluster
  */
-public class VMServiceClusterContext extends AbstractClusterContext {
+public class VMServiceClusterContext extends VMClusterContext {
 
     private static final Log log = 
LogFactory.getLog(VMServiceClusterContext.class);
 
-    // Map<NetworkpartitionId, Network Partition Context>
-    protected Map<String, NetworkPartitionContext> networkPartitionCtxts;
-    protected DeploymentPolicy deploymentPolicy;
     protected AutoscalePolicy autoscalePolicy;
 
-    public VMServiceClusterContext(String clusterId, AutoscalePolicy 
autoscalePolicy, DeploymentPolicy deploymentPolicy,
+    public VMServiceClusterContext(String clusterId, String serviceId, 
AutoscalePolicy autoscalePolicy, DeploymentPolicy deploymentPolicy,
                                    Map<String, NetworkPartitionContext> 
networkPartitionCtxts) {
 
-        super(clusterId);
-        this.deploymentPolicy = deploymentPolicy;
-        this.networkPartitionCtxts = networkPartitionCtxts;
+        super(clusterId, serviceId, autoscalePolicy, deploymentPolicy, 
networkPartitionCtxts);
         this.autoscalePolicy = autoscalePolicy;
 
     }
 
-    public Map<String, NetworkPartitionContext> getNetworkPartitionCtxts(){
-        return networkPartitionCtxts;
-    }
-
-    public DeploymentPolicy getDeploymentPolicy() {
-        return deploymentPolicy;
-    }
-
-    public void setDeploymentPolicy(DeploymentPolicy deploymentPolicy) {
-        this.deploymentPolicy = deploymentPolicy;
-    }
-
     public AutoscalePolicy getAutoscalePolicy() {
         return autoscalePolicy;
     }
@@ -67,38 +51,5 @@ public class VMServiceClusterContext extends 
AbstractClusterContext {
         this.autoscalePolicy = autoscalePolicy;
     }
 
-    public NetworkPartitionContext getNetworkPartitionCtxt(String 
networkPartitionId) {
-        return networkPartitionCtxts.get(networkPartitionId);
-    }
-
-    public void setPartitionCtxt(Map<String, NetworkPartitionContext> 
partitionCtxt) {
-        this.networkPartitionCtxts = partitionCtxt;
-    }
-
-    public boolean partitionCtxtAvailable(String partitionId) {
-        return networkPartitionCtxts.containsKey(partitionId);
-    }
-
-    public void addNetworkPartitionCtxt(NetworkPartitionContext ctxt) {
-        this.networkPartitionCtxts.put(ctxt.getId(), ctxt);
-    }
-
-    public NetworkPartitionContext getPartitionCtxt(String id) {
-        return this.networkPartitionCtxts.get(id);
-    }
-
-
-
-    public NetworkPartitionContext getNetworkPartitionCtxt(Member member) {
-        log.info("***** getNetworkPartitionCtxt " + 
member.getNetworkPartitionId());
-        String networkPartitionId = member.getNetworkPartitionId();
-        if (networkPartitionCtxts.containsKey(networkPartitionId)) {
-            log.info("returnnig network partition context " + 
networkPartitionCtxts.get(networkPartitionId));
-            return networkPartitionCtxts.get(networkPartitionId);
-        }
-
-        log.info("returning null getNetworkPartitionCtxt");
-        return null;
-    }
 
 }

Reply via email to