/* * Title: CloudSim Toolkit * Description: CloudSim (Cloud Simulation) Toolkit for Modeling and Simulation of Clouds * Licence: GPL - http://www.gnu.org/copyleft/gpl.html * * Copyright (c) 2009-2012, The University of Melbourne, Australia */ package org.cloudbus.cloudsim.provisioners; import org.cloudbus.cloudsim.Vm; /** * BwProvisioner is an abstract class that represents the provisioning policy used by a host * to allocate bandwidth (bw) to virtual machines inside it. * Each host has to have its own instance of a BwProvisioner. * When extending this class, care must be taken to guarantee that * the field availableBw will always contain the amount of free bandwidth available for future * allocations. * * @author Rodrigo N. Calheiros * @author Anton Beloglazov * @since CloudSim Toolkit 1.0 */ public abstract class BwProvisioner { /** The total bandwidth capacity from the host that the provisioner can allocate to VMs. */ private long bw; /** The available bandwidth. */ private long availableBw; /** * Creates the new BwProvisioner. * * @param bw The total bandwidth capacity from the host that the provisioner can allocate to VMs. * * @pre bw >= 0 * @post $none */ public BwProvisioner(long bw) { setBw(bw); setAvailableBw(bw); } /** * Allocates BW for a given VM. * * @param vm the virtual machine for which the bw are being allocated * @param bw the bw to be allocated to the VM * * @return $true if the bw could be allocated; $false otherwise * * @pre $none * @post $none */ public abstract boolean allocateBwForVm(Vm vm, long bw); /** * Gets the allocated BW for VM. * * @param vm the VM * * @return the allocated BW for vm */ public abstract long getAllocatedBwForVm(Vm vm); /** * Releases BW used by a VM. * * @param vm the vm * * @pre $none * @post none */ public abstract void deallocateBwForVm(Vm vm); /** * Releases BW used by all VMs. * * @pre $none * @post none */ public void deallocateBwForAllVms() { setAvailableBw(getBw()); } /** * Checks if it is possible to change the current allocated BW for the VM * to a new amount, depending on the available BW. * * @param vm the vm to check if there is enough available BW on the host to * change the VM allocated BW * @param bw the new total amount of BW for the VM. * * @return true, if is suitable for vm */ public abstract boolean isSuitableForVm(Vm vm, long bw); /** * Gets the bw capacity. * * @return the bw capacity */ public long getBw() { return bw; } /** * Sets the bw capacity. * * @param bw the new bw capacity */ protected void setBw(long bw) { this.bw = bw; } /** * Gets the available BW in the host. * * @return available bw * * @pre $none * @post $none */ public long getAvailableBw() { return availableBw; } /** * Gets the amount of used BW in the host. * * @return used bw * * @pre $none * @post $none */ public long getUsedBw() { return bw - availableBw; } /** * Sets the available bw. * * @param availableBw the new available bw */ protected void setAvailableBw(long availableBw) { this.availableBw = availableBw; } }