/*
* 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.container.resourceAllocators;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.cloudbus.cloudsim.container.core.Container;
import org.cloudbus.cloudsim.container.core.ContainerVm;
/**
* ContainerAllocationPolicy is an abstract class that represents the provisioning policy of vms to
* ContainerContainerGoogle in a Datacentre.
*
* @author Sareh Fotuhi Piraghaj
* @since CloudSim Toolkit 3.0
*/
public abstract class ContainerAllocationPolicy {
/**
* The Vm list.
*/
private List<? extends ContainerVm> containerVmList;
/**
* Allocates a new VmAllocationPolicy object.
*
* @pre $none
* @post $none
*/
public ContainerAllocationPolicy() {
setContainerVmList(new ArrayList<ContainerVm>());
}
/**
* Allocates a host for a given VM. The host to be allocated is the one that was already
* reserved.
*
* @param container virtual machine which the host is reserved to
* @return $true if the host could be allocated; $false otherwise
* @pre $none
* @post $none
*/
public abstract boolean allocateVmForContainer(Container container,List<ContainerVm> containerVmList);
/**
* Allocates a specified host for a given VM.
*
* @param vm virtual machine which the host is reserved to
* @return $true if the host could be allocated; $false otherwise
* @pre $none
* @post $none
*/
public abstract boolean allocateVmForContainer(Container container, ContainerVm vm);
/**
* Optimize allocation of the VMs according to current utilization.
*
// * @param vmList the vm list
// * @param utilizationBound the utilization bound
// * @param time the time
* @return the array list< hash map< string, object>>
*/
public abstract List<Map<String, Object>> optimizeAllocation(List<? extends Container> containerList);
/**
* Releases the host used by a VM.
*
* @param container the container
* @pre $none
* @post $none
*/
public abstract void deallocateVmForContainer(Container container);
/**
* Get the host that is executing the given VM belonging to the given user.
*
* @param container the container
* @return the Host with the given vmID and userID; $null if not found
* @pre $none
* @post $none
*/
public abstract ContainerVm getContainerVm(Container container);
/**
* Get the host that is executing the given VM belonging to the given user.
*
* @param containerId the vm id
* @param userId the user id
* @return the Host with the given vmID and userID; $null if not found
* @pre $none
* @post $none
*/
public abstract ContainerVm getContainerVm(int containerId, int userId);
/**
* Sets the host list.
*
* @param containerVmList the new host list
*/
protected void setContainerVmList(List<? extends ContainerVm> containerVmList) {
this.containerVmList = containerVmList;
}
/**
* Gets the host list.
*
* @return the host list
*/
@SuppressWarnings("unchecked")
public <T extends ContainerVm> List<T> getContainerVmList() {
return (List<T>) this.containerVmList;
}
}