package org.cloudbus.cloudsim.container.containerVmProvisioners;
import org.cloudbus.cloudsim.container.core.ContainerVm;
import java.util.HashMap;
import java.util.Map;
/**
* Created by sareh on 10/07/15.
*/
public class ContainerVmRamProvisionerSimple extends ContainerVmRamProvisioner {
/**
* The RAM table.
*/
private Map<String, Float> containerVmRamTable;
/**
* @param availableRam the available ram
*/
public ContainerVmRamProvisionerSimple(int availableRam) {
super(availableRam);
setContainerVmRamTable(new HashMap<String, Float>());
}
@Override
public boolean allocateRamForContainerVm(ContainerVm containerVm, float ram) {
float maxRam = containerVm.getRam();
if (ram >= maxRam) {
ram = maxRam;
}
deallocateRamForContainerVm(containerVm);
if (getAvailableRam() >= ram) {
setAvailableRam(getAvailableRam() - ram);
getContainerVmRamTable().put(containerVm.getUid(), ram);
containerVm.setCurrentAllocatedRam(getAllocatedRamForContainerVm(containerVm));
return true;
}
containerVm.setCurrentAllocatedRam(getAllocatedRamForContainerVm(containerVm));
return false;
}
@Override
public float getAllocatedRamForContainerVm(ContainerVm containerVm) {
if (getContainerVmRamTable().containsKey(containerVm.getUid())) {
return getContainerVmRamTable().get(containerVm.getUid());
}
return 0;
}
@Override
public void deallocateRamForContainerVm(ContainerVm containerVm) {
if (getContainerVmRamTable().containsKey(containerVm.getUid())) {
float amountFreed = getContainerVmRamTable().remove(containerVm.getUid());
setAvailableRam(getAvailableRam() + amountFreed);
containerVm.setCurrentAllocatedRam(0);
}
}
@Override
public void deallocateRamForAllContainerVms() {
super.deallocateRamForAllContainerVms();
getContainerVmRamTable().clear();
}
@Override
public boolean isSuitableForContainerVm(ContainerVm containerVm, float ram) {
float allocatedRam = getAllocatedRamForContainerVm(containerVm);
boolean result = allocateRamForContainerVm(containerVm, ram);
deallocateRamForContainerVm(containerVm);
if (allocatedRam > 0) {
allocateRamForContainerVm(containerVm, allocatedRam);
}
return result;
}
/**
* @return the containerVmRamTable
*/
protected Map<String, Float> getContainerVmRamTable() {
return containerVmRamTable;
}
/**
* @param containerVmRamTable the containerVmRamTable to set
*/
protected void setContainerVmRamTable(Map<String, Float> containerVmRamTable) {
this.containerVmRamTable = containerVmRamTable;
}
}