/** * */ package org.cloudbus.cloudsim.container.containerProvisioners; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.cloudbus.cloudsim.container.core.Container; /** * @author Sareh Fotuhi Piraghaj */ public class CotainerPeProvisionerSimple extends ContainerPeProvisioner { /** * The pe table. */ private Map<String, List<Double>> peTable; /** * @param mips */ /** * Creates the PeProvisionerSimple object. * * @param availableMips the available mips * @pre $none * @post $none */ public CotainerPeProvisionerSimple(double availableMips) { super(availableMips); setPeTable(new HashMap<String, ArrayList<Double>>()); } /* (non-Javadoc) * @see ContainerVmPeProvisioner#allocateMipsForContainer */ @Override public boolean allocateMipsForContainer(Container container, double mips) { // TODO Auto-generated method stub return allocateMipsForContainer(container.getUid(), mips); } /* (non-Javadoc) * @see ContainerVmPeProvisioner#allocateMipsForContainer(java.lang.String, double) */ @Override public boolean allocateMipsForContainer(String containerUid, double mips) { if (getAvailableMips() < mips) { return false; } List<Double> allocatedMips; if (getPeTable().containsKey(containerUid)) { allocatedMips = getPeTable().get(containerUid); } else { allocatedMips = new ArrayList<>(); } allocatedMips.add(mips); setAvailableMips(getAvailableMips() - mips); getPeTable().put(containerUid, allocatedMips); return true; } /* (non-Javadoc) * @see ContainerVmPeProvisioner#allocateMipsForContainer(Container, java.util.List) */ @Override public boolean allocateMipsForContainer(Container container, List<Double> mips) { int totalMipsToAllocate = 0; for (double _mips : mips) { totalMipsToAllocate += _mips; } if (getAvailableMips() + getTotalAllocatedMipsForContainer(container) < totalMipsToAllocate) { return false; } setAvailableMips(getAvailableMips() + getTotalAllocatedMipsForContainer(container) - totalMipsToAllocate); getPeTable().put(container.getUid(), mips); return true; } /* * (non-Javadoc) * @see containerProvisioners.PeProvisioner#deallocateMipsForAllContainers() */ @Override public void deallocateMipsForAllContainers() { super.deallocateMipsForAllContainers(); getPeTable().clear(); } /* (non-Javadoc) * @see ContainerPeProvisioner#getAllocatedMipsForContainer */ @Override public List<Double> getAllocatedMipsForContainer(Container container) { if (getPeTable().containsKey(container.getUid())) { return getPeTable().get(container.getUid()); } return null; } /* (non-Javadoc) * @see ContainerVmPeProvisioner#getTotalAllocatedMipsForContainer */ @Override public double getTotalAllocatedMipsForContainer(Container container) { if (getPeTable().containsKey(container.getUid())) { double totalAllocatedMips = 0.0; for (double mips : getPeTable().get(container.getUid())) { totalAllocatedMips += mips; } return totalAllocatedMips; } return 0; } /* (non-Javadoc) * @see ContainerVmPeProvisioner#getAllocatedMipsForContainerByVirtualPeId(Container, int) */ @Override public double getAllocatedMipsForContainerByVirtualPeId(Container container, int peId) { if (getPeTable().containsKey(container.getUid())) { try { return getPeTable().get(container.getUid()).get(peId); } catch (Exception e) { } } return 0; } /* (non-Javadoc) * @see ContainerVmPeProvisioner#deallocateMipsForContainer(Container) */ @Override public void deallocateMipsForContainer(Container container) { if (getPeTable().containsKey(container.getUid())) { for (double mips : getPeTable().get(container.getUid())) { setAvailableMips(getAvailableMips() + mips); } getPeTable().remove(container.getUid()); } } /** * Gets the pe table. * * @return the peTable */ protected Map<String, List<Double>> getPeTable() { return peTable; } /** * Sets the pe table. * * @param peTable the peTable to set */ @SuppressWarnings("unchecked") protected void setPeTable(Map<String, ? extends List<Double>> peTable) { this.peTable = (Map<String, List<Double>>) peTable; } }