Interface VmAllocationPolicy
-
- All Known Subinterfaces:
VmAllocationPolicyMigration
,VmAllocationPolicyMigrationDynamicUpperThreshold
- All Known Implementing Classes:
VmAllocationPolicyAbstract
,VmAllocationPolicyBestFit
,VmAllocationPolicyFirstFit
,VmAllocationPolicyMigrationAbstract
,VmAllocationPolicyMigrationBestFitStaticThreshold
,VmAllocationPolicyMigrationDynamicUpperThresholdFirstFit
,VmAllocationPolicyMigrationInterQuartileRange
,VmAllocationPolicyMigrationLocalRegression
,VmAllocationPolicyMigrationLocalRegressionRobust
,VmAllocationPolicyMigrationMedianAbsoluteDeviation
,VmAllocationPolicyMigrationStaticThreshold
,VmAllocationPolicyMigrationWorstFitStaticThreshold
,VmAllocationPolicySimple
public interface VmAllocationPolicy
An interface to be implemented by each class that represents a policy used by aDatacenter
to choose aHost
to place or migrate a givenVm
.The VmAllocationPolicy uses Java 8 Functional Programming to enable changing, at runtime, the policy used to select a Host for a given VM.
- Since:
- CloudSim Plus 1.0
- Author:
- Rodrigo N. Calheiros, Anton Beloglazov, Manoel Campos da Silva Filho
- See Also:
setFindHostForVmFunction(BiFunction)
-
-
Field Summary
Fields Modifier and Type Field Description static VmAllocationPolicy
NULL
A property that implements the Null Object Design Pattern forVmAllocationPolicy
objects.
-
Method Summary
Modifier and Type Method Description boolean
allocateHostForVm(Vm vm)
Allocates a host for a given VM.boolean
allocateHostForVm(Vm vm, Host host)
Allocates a specified host for a given VM.void
deallocateHostForVm(Vm vm)
Releases the host used by a VM.java.util.Optional<Host>
findHostForVm(Vm vm)
Finds a host that has enough resources to place a given VM.Datacenter
getDatacenter()
Gets theDatacenter
associated to the Allocation Policy.<T extends Host>
java.util.List<T>getHostList()
Gets the list of Hosts available in aDatacenter
, that will be used by the Allocation Policy to place VMs.java.util.Map<Vm,Host>
getOptimizedAllocationMap(java.util.List<? extends Vm> vmList)
Gets a map of optimized allocation for VMs according to current utilization and Hosts under and overloaded conditions.boolean
scaleVmVertically(VerticalVmScaling scaling)
Try to scale some Vm's resource vertically up or down, respectively if: the Vm is overloaded and the Host where the Vm is placed has enough capacity the Vm is underloaded The resource to be scaled is defined by the givenVerticalVmScaling
object.void
setDatacenter(Datacenter datacenter)
Sets the Datacenter associated to the Allocation Policyvoid
setFindHostForVmFunction(java.util.function.BiFunction<VmAllocationPolicy,Vm,java.util.Optional<Host>> findHostForVmFunction)
Sets aBiFunction
that selects a Host for a given Vm.
-
-
-
Field Detail
-
NULL
static final VmAllocationPolicy NULL
A property that implements the Null Object Design Pattern forVmAllocationPolicy
objects.
-
-
Method Detail
-
getDatacenter
Datacenter getDatacenter()
Gets theDatacenter
associated to the Allocation Policy.- Returns:
-
setDatacenter
void setDatacenter(Datacenter datacenter)
Sets the Datacenter associated to the Allocation Policy- Parameters:
datacenter
- the Datacenter to set
-
allocateHostForVm
boolean allocateHostForVm(Vm vm)
Allocates a host for a given VM.- Parameters:
vm
- the VM to allocate a host to- Returns:
- $true if the host could be allocated; $false otherwise
-
allocateHostForVm
boolean allocateHostForVm(Vm vm, Host host)
Allocates a specified host for a given VM.- Parameters:
vm
- the VM to allocate a host tohost
- the host to allocate to the given VM- Returns:
- $true if the host could be allocated; $false otherwise
-
scaleVmVertically
boolean scaleVmVertically(VerticalVmScaling scaling)
Try to scale some Vm's resource vertically up or down, respectively if:- the Vm is overloaded and the Host where the Vm is placed has enough capacity
- the Vm is underloaded
VerticalVmScaling
object.- Parameters:
scaling
- theVerticalVmScaling
object with information of which resource is being requested to be scaled- Returns:
- true if the requested resource was scaled, false otherwise
-
deallocateHostForVm
void deallocateHostForVm(Vm vm)
Releases the host used by a VM.- Parameters:
vm
- the vm to get its host released
-
findHostForVm
java.util.Optional<Host> findHostForVm(Vm vm)
Finds a host that has enough resources to place a given VM. Classes must implement this method to define how to select a Host for a given VM. They just have to provide a default implementation. However, this implementation can be dynamically changed by callingsetFindHostForVmFunction(BiFunction)
.- Parameters:
vm
- the vm to find a host for it- Returns:
- an
Optional
containing a suitable Host to place the VM or an emptyOptional
if no suitable Host was found
-
getHostList
<T extends Host> java.util.List<T> getHostList()
Gets the list of Hosts available in aDatacenter
, that will be used by the Allocation Policy to place VMs.- Type Parameters:
T
- The generic type- Returns:
- the host list
-
getOptimizedAllocationMap
java.util.Map<Vm,Host> getOptimizedAllocationMap(java.util.List<? extends Vm> vmList)
Gets a map of optimized allocation for VMs according to current utilization and Hosts under and overloaded conditions. The conditions that will make a new VM placement map to be proposed and returned is defined by each implementing class.- Parameters:
vmList
- the list of VMs to be reallocated- Returns:
- the new vm placement map, where each key is a VM and each value is the host where such a Vm has to be placed
-
setFindHostForVmFunction
void setFindHostForVmFunction(java.util.function.BiFunction<VmAllocationPolicy,Vm,java.util.Optional<Host>> findHostForVmFunction)
Sets aBiFunction
that selects a Host for a given Vm. This Function receives the current VmAllocationPolicy and theVm
requesting to be place. It then returns anOptional<Host>
that may contain a suitable Host for that Vm or not.If not Function is set, the default VM selection method provided by implementing classes will be used.
- Parameters:
findHostForVmFunction
- theBiFunction
to set
-
-