Updated Branches: refs/heads/master ca3fdf71b -> ca211105f
Adding NetworkPartitionLbHolder class - STRATOS-289 Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/ca211105 Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/ca211105 Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/ca211105 Branch: refs/heads/master Commit: ca211105f0acec6b4c25e88485ceb4854d286700 Parents: ca3fdf7 Author: Lahiru Sandaruwan <[email protected]> Authored: Fri Jan 17 09:42:10 2014 +0530 Committer: Lahiru Sandaruwan <[email protected]> Committed: Fri Jan 17 09:42:10 2014 +0530 ---------------------------------------------------------------------- .../autoscaler/NetworkPartitionLbHolder.java | 496 +++++++++++++++++++ 1 file changed, 496 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/ca211105/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/NetworkPartitionLbHolder.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/NetworkPartitionLbHolder.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/NetworkPartitionLbHolder.java new file mode 100644 index 0000000..665a64b --- /dev/null +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/NetworkPartitionLbHolder.java @@ -0,0 +1,496 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.stratos.autoscaler; + +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; + +/** + * Holds LB data of a network partition. + * + */ +public class NetworkPartitionLbHolder implements Serializable{ + + private static final long serialVersionUID = -7181166769691018046L; + private final String networkPartitionId; + + private String defaultLbClusterId; + + private Map<String, String> serviceNameToLBClusterIdMap; + + private Map<String, String> clusterIdToLBClusterIdMap; + +// private final String partitionAlgorithm; +// +// //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; +// +// //FIXME this should be populated via PartitionGroups a.k.a. NetworkPartitions +// private int minInstanceCount = 1, maxInstanceCount = 1; +// +// private final Partition[] partitions; + + //Following information will keep events details +// private RequestsInFlight requestsInFlight; +// private MemoryConsumption memoryConsumption; +// private LoadAverage loadAverage; + + //details required for partition selection algorithms +// private int currentPartitionIndex; +//// private Map<String, Integer> partitionToMemberCountMap; +// +// //partitions of this network partition +// private final Map<String, PartitionContext> partitionCtxts; + + public NetworkPartitionLbHolder(String networkPartitionId) { + + super(); + this.networkPartitionId = networkPartitionId; +// this.partitionAlgorithm = partitionAlgo; +// this.partitions = partitions; + this.setServiceToLBClusterId(new HashMap<String, String>()); + this.setClusterIdToLBClusterIdMap(new HashMap<String, String>()); +// partitionToMemberCountMap = new HashMap<String, Integer>(); +// partitionCtxts = new HashMap<String, PartitionContext>(); +// requestsInFlight = new RequestsInFlight(); +// loadAverage = new LoadAverage(); +// memoryConsumption = new MemoryConsumption(); + + } + + public String getDefaultLbClusterId() { + + return this.defaultLbClusterId; + + } + + public void setDefaultLbClusterId(final String defaultLbClusterId) { + + this.defaultLbClusterId = defaultLbClusterId; + + } + + public String getLBClusterIdOfService(final String serviceName) { + + return this.serviceNameToLBClusterIdMap.get(serviceName); + + } + + public Map<String, String> getServiceToLBClusterId() { + + return this.serviceNameToLBClusterIdMap; + + } + + public void setServiceToLBClusterId(final Map<String, String> serviceToLBClusterId) { + + this.serviceNameToLBClusterIdMap = serviceToLBClusterId; + + } + + public void addServiceLB(final String serviceName, final String lbClusterId) { + this.serviceNameToLBClusterIdMap.put(serviceName, lbClusterId); + } + + public String getLBClusterIdOfCluster(final String clusterId) { + + return this.clusterIdToLBClusterIdMap.get(clusterId); + + } + + public Map<String, String> getClusterIdToLBClusterIdMap() { + + return this.clusterIdToLBClusterIdMap; + + } + + public void setClusterIdToLBClusterIdMap(final Map<String, String> clusterIdToLBClusterIdMap) { + + this.clusterIdToLBClusterIdMap = clusterIdToLBClusterIdMap; + + } + + + public boolean isLBExist(final String clusterId) { + + return clusterId != null && + (clusterId.equals(this.defaultLbClusterId) || + this.serviceNameToLBClusterIdMap.containsValue(clusterId) || this.clusterIdToLBClusterIdMap.containsValue(clusterId)); + + } + + public boolean isDefaultLBExist() { + + return defaultLbClusterId != null; + + } + + public boolean isServiceLBExist(String serviceName) { + + return this.serviceNameToLBClusterIdMap.containsKey(serviceName) && + this.serviceNameToLBClusterIdMap.get(serviceName) != null; + + } + + public boolean isClusterLBExist(String clusterId) { + + return this.clusterIdToLBClusterIdMap.containsKey(clusterId) && + this.clusterIdToLBClusterIdMap.get(clusterId) != null; + + } + +// public int getMinInstanceCount() { +// return minInstanceCount; +// } +// +// public void setMinInstanceCount(int minInstanceCount) { +// this.minInstanceCount = minInstanceCount; +// } +// +// public int getMaxInstanceCount() { +// return maxInstanceCount; +// } +// +// public void setMaxInstanceCount(int maxInstanceCount) { +// this.maxInstanceCount = maxInstanceCount; +// } + + public int hashCode() { + + final int prime = 31; + int result = 1; + result = prime * result + ((this.networkPartitionId == null) ? 0 : this.networkPartitionId.hashCode()); + return result; + + } + + public boolean equals(final Object obj) { + + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (!(obj instanceof NetworkPartitionLbHolder)) { + return false; + } + final NetworkPartitionLbHolder other = (NetworkPartitionLbHolder) obj; + if (this.networkPartitionId == null) { + if (other.networkPartitionId != null) { + return false; + } + } + else if (!this.networkPartitionId.equals(other.networkPartitionId)) { + return false; + } + return true; + } + + + + @Override + public String toString() { + return "NetworkPartitionContext [networkPartitionId=" + networkPartitionId + ", defaultLbClusterId=" + + defaultLbClusterId; + } + +// public int getCurrentPartitionIndex() { +// return currentPartitionIndex; +// } +// +// public void setCurrentPartitionIndex(int currentPartitionIndex) { +// this.currentPartitionIndex = currentPartitionIndex; +// } +// +// 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 [network partition] %s" +// , this.networkPartitionId)); +// } +// } +// } +// +// 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 [network partition] %s" +// , this.networkPartitionId)); +// } +// } +// } +// +// 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 [network partition] %s" +// , this.networkPartitionId)); +// } +// } +// } +// +// 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 [network partition] %s" +// , this.networkPartitionId)); +// } +// } +// } +// +// 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 [network partition] %s" +// , this.networkPartitionId)); +// } +// } +// } +// +// 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 [network partition] %s" +// , this.networkPartitionId)); +// } +// } +// } +// +// 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 [network partition] %s" +// , this.networkPartitionId)); +// } +// } +// } +// +// 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 [network partition] %s" +// , this.networkPartitionId)); +// } +// } +// } +// +// 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 [network partition] %s" +// , this.networkPartitionId)); +// } +// } +// } +// +// public boolean isLoadAverageReset() { +// return loadAverageReset; +// } +// +// public void setLoadAverageReset(boolean loadAverageReset) { +// this.loadAverageReset = loadAverageReset; +// this.averageLoadAverageReset = loadAverageReset; +// this.gradientLoadAverageReset = loadAverageReset; +// this.secondDerivativeLoadAverageRest = loadAverageReset; +// } + + + + public String getNetworkPartitionId() { + return networkPartitionId; + } + +// 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; +// } +// +// public Map<String, PartitionContext> getPartitionCtxts() { +// return partitionCtxts; +// } +// +// public PartitionContext getPartitionCtxt(String partitionId) { +// return partitionCtxts.get(partitionId); +// } +// +// public void addPartitionContext(PartitionContext partitionContext) { +// partitionCtxts.put(partitionContext.getPartitionId(), partitionContext); +// } +// +// public String getPartitionAlgorithm() { +// return partitionAlgorithm; +// } +// +// public Partition[] getPartitions() { +// return partitions; +// } +// +// public int getNonTerminatedMemberCountOfPartition(String partitionId) { +// if(partitionCtxts.containsKey(partitionId)){ +// return getPartitionCtxt(partitionId).getNonTerminatedMemberCount(); +// } +// return 0; +// } +// +// public int getActiveMemberCount(String currentPartitionId) { +// if(partitionCtxts.containsKey(currentPartitionId)){ +// return getPartitionCtxt(currentPartitionId).getActiveMemberCount(); +// } +// return 0; +// } + +// public void setPartitions(Partition[] partitions) { +// this.partitions = partitions; +// for (Partition partition: partitions){ +// partitionToMemberCountMap.put(partition.getNetworkPartitionId(), 0); +// } +// } + +// public void setPartitionToMemberCountMap(Map<String, Integer> partitionToMemberCountMap) { +// this.partitionToMemberCountMap = partitionToMemberCountMap; +// } + +} \ No newline at end of file
