package org.zstack.compute.allocator;
import org.zstack.header.allocator.HostCapacityOverProvisioningManager;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* Created by frank on 10/19/2015.
*/
public class HostCapacityOverProvisioningManagerImpl implements HostCapacityOverProvisioningManager {
private double globalMemoryRatio = 1;
private ConcurrentHashMap<String, Double> hostMemoryRatio = new ConcurrentHashMap<String, Double>();
@Override
public void setMemoryGlobalRatio(double ratio) {
globalMemoryRatio = ratio;
}
@Override
public double getMemoryGlobalRatio() {
return globalMemoryRatio;
}
@Override
public void setMemoryRatio(String hostUuid, double ratio) {
hostMemoryRatio.put(hostUuid, ratio);
}
@Override
public void deleteMemoryRatio(String hostUuid) {
hostMemoryRatio.remove(hostUuid);
}
@Override
public double getMemoryRatio(String hostUuid) {
Double ratio = hostMemoryRatio.get(hostUuid);
ratio = ratio == null ? globalMemoryRatio : ratio;
return ratio;
}
@Override
public Map<String, Double> getAllMemoryRatio() {
return hostMemoryRatio;
}
@Override
public long calculateMemoryByRatio(String hostUuid, long capacity) {
double ratio = getMemoryRatio(hostUuid);
return Math.round(capacity / ratio);
}
@Override
public long calculateHostAvailableMemoryByRatio(String hostUuid, long capacity) {
double ratio = getMemoryRatio(hostUuid);
return Math.round(capacity * ratio);
}
}