package org.zstack.storage.primary; import org.zstack.header.storage.primary.PrimaryStorageOverProvisioningManager; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * Created by frank on 10/19/2015. */ public class PrimaryStorageOverProvisioningManagerImpl implements PrimaryStorageOverProvisioningManager { private double globalRatio = 1; private ConcurrentHashMap<String, Double> primaryStorageRatio = new ConcurrentHashMap<>(); @Override public void setGlobalRatio(double ratio) { globalRatio = ratio; } @Override public double getGlobalRatio() { return globalRatio; } @Override public void setRatio(String psUuid, double ratio) { primaryStorageRatio.put(psUuid, ratio); } @Override public void deleteRatio(String psUuid) { primaryStorageRatio.remove(psUuid); } @Override public double getRatio(String psUuid) { Double ratio = primaryStorageRatio.get(psUuid); return ratio == null ? globalRatio : ratio; } @Override public Map<String, Double> getAllRatio() { return primaryStorageRatio; } @Override public long calculateByRatio(String psUuid, long capacity) { double ratio = getRatio(psUuid); return Math.round(capacity / ratio); } @Override public long calculatePrimaryStorageAvailableCapacityByRatio(String psUuid, long capacity) { double ratio = getRatio(psUuid); return Math.round(capacity * ratio); } }