package org.cloudbus.cloudsim.container.resourceAllocators;
import org.cloudbus.cloudsim.container.containerPlacementPolicies.ContainerPlacementPolicy;
import org.cloudbus.cloudsim.container.core.Container;
import org.cloudbus.cloudsim.container.core.ContainerVm;
import java.util.*;
/**
* Created by sareh on 16/12/15.
*/
public class ContainerAllocationPolicyRS extends PowerContainerAllocationPolicySimple{
/** The vm table. */
private ContainerPlacementPolicy containerPlacementPolicy;
public ContainerAllocationPolicyRS(ContainerPlacementPolicy containerPlacementPolicy1) {
super();
setContainerPlacementPolicy(containerPlacementPolicy1);
}
@Override
public ContainerVm findVmForContainer(Container container) {
Set<ContainerVm> excludedVmList = new HashSet<>();
int tries = 0;
boolean found = false;
do{
ContainerVm containerVm = getContainerPlacementPolicy().getContainerVm(getContainerVmList(), container,excludedVmList);
if(containerVm == null){
return null;
}
if (containerVm.isSuitableForContainer(container)) {
found = true;
return containerVm;
}
else {
excludedVmList.add(containerVm);
tries ++;
}
} while (!found & tries < getContainerVmList().size());
return null;
}
public ContainerPlacementPolicy getContainerPlacementPolicy() {
return this.containerPlacementPolicy;
}
public void setContainerPlacementPolicy(ContainerPlacementPolicy containerPlacementPolicy) {
this.containerPlacementPolicy = containerPlacementPolicy;
}
}