package org.cloudbus.cloudsim.container.core; import org.cloudbus.cloudsim.container.lists.ContainerList; import org.cloudbus.cloudsim.container.lists.ContainerVmList; import org.apache.commons.math3.stat.descriptive.rank.Percentile; import org.cloudbus.cloudsim.Log; import org.cloudbus.cloudsim.UtilizationModelPlanetLabInMemory; import org.cloudbus.cloudsim.core.CloudSim; import org.cloudbus.cloudsim.core.CloudSimTags; import org.cloudbus.cloudsim.core.SimEntity; import org.cloudbus.cloudsim.core.SimEvent; import org.cloudbus.cloudsim.lists.CloudletList; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.HashMap; /** * Created by sareh on 15/07/15. */ public class ContainerDatacenterBroker extends SimEntity { /** * The vm list. */ protected List<? extends ContainerVm> vmList; /** * The vms created list. */ protected List<? extends ContainerVm> vmsCreatedList; /** * The containers created list. */ protected List<? extends Container> containersCreatedList; /** * The cloudlet list. */ protected List<? extends ContainerCloudlet> cloudletList; /** * The container list */ protected List<? extends Container> containerList; /** * The cloudlet submitted list. */ protected List<? extends ContainerCloudlet> cloudletSubmittedList; /** * The cloudlet received list. */ protected List<? extends ContainerCloudlet> cloudletReceivedList; /** * The cloudlets submitted. */ protected int cloudletsSubmitted; /** * The vms requested. */ protected int vmsRequested; /** * The vms acks. */ protected int vmsAcks; /** * The containers acks. */ protected int containersAcks; /** * The number of created containers */ protected int containersCreated; /** * The vms destroyed. */ protected int vmsDestroyed; /** * The datacenter ids list. */ protected List<Integer> datacenterIdsList; /** * The datacenter requested ids list. */ protected List<Integer> datacenterRequestedIdsList; /** * The vms to datacenters map. */ protected Map<Integer, Integer> vmsToDatacentersMap; /** * The vms to datacenters map. */ protected Map<Integer, Integer> containersToDatacentersMap; /** * The datacenter characteristics list. */ protected Map<Integer, ContainerDatacenterCharacteristics> datacenterCharacteristicsList; /** * The datacenter characteristics list. */ protected double overBookingfactor; protected int numberOfCreatedVMs; /** * Created a new DatacenterBroker object. * * @param name name to be associated with this entity (as required by Sim_entity class from * simjava package) * @throws Exception the exception * @pre name != null * @post $none */ public ContainerDatacenterBroker(String name, double overBookingfactor) throws Exception { super(name); setVmList(new ArrayList<ContainerVm>()); setContainerList(new ArrayList<Container>()); setVmsCreatedList(new ArrayList<ContainerVm>()); setContainersCreatedList(new ArrayList<Container>()); setCloudletList(new ArrayList<ContainerCloudlet>()); setCloudletSubmittedList(new ArrayList<ContainerCloudlet>()); setCloudletReceivedList(new ArrayList<ContainerCloudlet>()); cloudletsSubmitted = 0; setVmsRequested(0); setVmsAcks(0); setContainersAcks(0); setContainersCreated(0); setVmsDestroyed(0); setOverBookingfactor(overBookingfactor); setDatacenterIdsList(new LinkedList<Integer>()); setDatacenterRequestedIdsList(new ArrayList<Integer>()); setVmsToDatacentersMap(new HashMap<Integer, Integer>()); setContainersToDatacentersMap(new HashMap<Integer, Integer>()); setDatacenterCharacteristicsList(new HashMap<Integer, ContainerDatacenterCharacteristics>()); setNumberOfCreatedVMs(0); } /** * This method is used to send to the broker the list with virtual machines that must be * created. * * @param list the list * @pre list !=null * @post $none */ public void submitVmList(List<? extends ContainerVm> list) { getVmList().addAll(list); } /** * This method is used to send to the broker the list of cloudlets. * * @param list the list * @pre list !=null * @post $none */ public void submitCloudletList(List<? extends ContainerCloudlet> list) { getCloudletList().addAll(list); } /** * Specifies that a given cloudlet must run in a specific virtual machine. * * @param cloudletId ID of the cloudlet being bount to a vm * @param vmId the vm id * @pre cloudletId > 0 * @pre id > 0 * @post $none */ public void bindCloudletToVm(int cloudletId, int vmId) { CloudletList.getById(getCloudletList(), cloudletId).setVmId(vmId); // Log.printConcatLine("The Vm ID is ", CloudletList.getById(getCloudletList(), cloudletId).getVmId(), "should be", vmId); } /** * Specifies that a given cloudlet must run in a specific virtual machine. * * @param cloudletId ID of the cloudlet being bount to a vm * @param containerId the vm id * @pre cloudletId > 0 * @pre id > 0 * @post $none */ public void bindCloudletToContainer(int cloudletId, int containerId) { CloudletList.getById(getCloudletList(), cloudletId).setContainerId(containerId); } /** * Processes events available for this Broker. * * @param ev a SimEvent object * @pre ev != null * @post $none */ @Override public void processEvent(SimEvent ev) { switch (ev.getTag()) { // Resource characteristics request case CloudSimTags.RESOURCE_CHARACTERISTICS_REQUEST: processResourceCharacteristicsRequest(ev); break; // Resource characteristics answer case CloudSimTags.RESOURCE_CHARACTERISTICS: processResourceCharacteristics(ev); break; // VM Creation answer case CloudSimTags.VM_CREATE_ACK: processVmCreate(ev); break; // New VM Creation answer case containerCloudSimTags.VM_NEW_CREATE: processNewVmCreate(ev); break; // A finished cloudlet returned case CloudSimTags.CLOUDLET_RETURN: processCloudletReturn(ev); break; // if the simulation finishes case CloudSimTags.END_OF_SIMULATION: shutdownEntity(); break; case containerCloudSimTags.CONTAINER_CREATE_ACK: processContainerCreate(ev); break; // other unknown tags are processed by this method default: processOtherEvent(ev); break; } } public void processContainerCreate(SimEvent ev) { int[] data = (int[]) ev.getData(); int vmId = data[0]; int containerId = data[1]; int result = data[2]; if (result == CloudSimTags.TRUE) { if(vmId ==-1){ Log.printConcatLine("Error : Where is the VM");} else{ getContainersToVmsMap().put(containerId, vmId); getContainersCreatedList().add(ContainerList.getById(getContainerList(), containerId)); // ContainerVm p= ContainerVmList.getById(getVmsCreatedList(), vmId); int hostId = ContainerVmList.getById(getVmsCreatedList(), vmId).getHost().getId(); Log.printConcatLine(CloudSim.clock(), ": ", getName(), ": The Container #", containerId, ", is created on Vm #",vmId , ", On Host#", hostId); setContainersCreated(getContainersCreated()+1);} } else { //Container container = ContainerList.getById(getContainerList(), containerId); Log.printConcatLine(CloudSim.clock(), ": ", getName(), ": Failed Creation of Container #", containerId); } incrementContainersAcks(); if (getContainersAcks() == getContainerList().size()) { //Log.print(getContainersCreatedList().size() + "vs asli"+getContainerList().size()); submitCloudlets(); getContainerList().clear(); } } /** * Process the return of a request for the characteristics of a PowerDatacenter. * * @param ev a SimEvent object * @pre ev != $null * @post $none */ protected void processResourceCharacteristics(SimEvent ev) { ContainerDatacenterCharacteristics characteristics = (ContainerDatacenterCharacteristics) ev.getData(); getDatacenterCharacteristicsList().put(characteristics.getId(), characteristics); if (getDatacenterCharacteristicsList().size() == getDatacenterIdsList().size()) { getDatacenterCharacteristicsList().clear(); setDatacenterRequestedIdsList(new ArrayList<Integer>()); createVmsInDatacenter(getDatacenterIdsList().get(0)); } } /** * Process a request for the characteristics of a PowerDatacenter. * * @param ev a SimEvent object * @pre ev != $null * @post $none */ protected void processResourceCharacteristicsRequest(SimEvent ev) { setDatacenterIdsList(CloudSim.getCloudResourceList()); setDatacenterCharacteristicsList(new HashMap<Integer, ContainerDatacenterCharacteristics>()); //Log.printConcatLine(CloudSim.clock(), ": ", getName(), ": Cloud Resource List received with ", // getDatacenterIdsList().size(), " resource(s)"); for (Integer datacenterId : getDatacenterIdsList()) { sendNow(datacenterId, CloudSimTags.RESOURCE_CHARACTERISTICS, getId()); } } protected void processNewVmCreate(SimEvent ev) { Map<String, Object> map = (Map<String, Object>) ev.getData(); int datacenterId = (int) map.get("datacenterID"); int result = (int) map.get("result"); ContainerVm containerVm = (ContainerVm) map.get("vm"); int vmId = containerVm.getId(); if (result == CloudSimTags.TRUE) { getVmList().add(containerVm); getVmsToDatacentersMap().put(vmId, datacenterId); getVmsCreatedList().add(containerVm); Log.printConcatLine(CloudSim.clock(), ": ", getName(), ": VM #", vmId, " has been created in Datacenter #", datacenterId, ", Host #", ContainerVmList.getById(getVmsCreatedList(), vmId).getHost().getId()); } else { Log.printConcatLine(CloudSim.clock(), ": ", getName(), ": Creation of VM #", vmId, " failed in Datacenter #", datacenterId); }} /** * Process the ack received due to a request for VM creation. * * @param ev a SimEvent object * @pre ev != null * @post $none */ protected void processVmCreate(SimEvent ev) { int[] data = (int[]) ev.getData(); int datacenterId = data[0]; int vmId = data[1]; int result = data[2]; if (result == CloudSimTags.TRUE) { getVmsToDatacentersMap().put(vmId, datacenterId); getVmsCreatedList().add(ContainerVmList.getById(getVmList(), vmId)); Log.printConcatLine(CloudSim.clock(), ": ", getName(), ": VM #", vmId, " has been created in Datacenter #", datacenterId, ", Host #", ContainerVmList.getById(getVmsCreatedList(), vmId).getHost().getId()); setNumberOfCreatedVMs(getNumberOfCreatedVMs()+1); } else { Log.printConcatLine(CloudSim.clock(), ": ", getName(), ": Creation of VM #", vmId, " failed in Datacenter #", datacenterId); } incrementVmsAcks(); // if (getVmsCreatedList().size() == getVmList().size() - getVmsDestroyed()) { // If we have tried creating all of the vms in the data center, we submit the containers. if(getVmList().size() == vmsAcks){ submitContainers(); } // // all the requested VMs have been created // if (getVmsCreatedList().size() == getVmList().size() - getVmsDestroyed()) { // submitCloudlets(); // } else { // // all the acks received, but some VMs were not created // if (getVmsRequested() == getVmsAcks()) { // // find id of the next datacenter that has not been tried // for (int nextDatacenterId : getDatacenterIdsList()) { // if (!getDatacenterRequestedIdsList().contains(nextDatacenterId)) { // createVmsInDatacenter(nextDatacenterId); // return; // } // } // // // all datacenters already queried // if (getVmsCreatedList().size() > 0) { // if some vm were created // submitCloudlets(); // } else { // no vms created. abort // Log.printLine(CloudSim.clock() + ": " + getName() // + ": none of the required VMs could be created. Aborting"); // finishExecution(); // } // } // } } /** * Process a cloudlet return event. * * @param ev a SimEvent object * @pre ev != $null * @post $none */ protected void processCloudletReturn(SimEvent ev) { ContainerCloudlet cloudlet = (ContainerCloudlet) ev.getData(); getCloudletReceivedList().add(cloudlet); Log.printConcatLine(CloudSim.clock(), ": ", getName(), ": Cloudlet ", cloudlet.getCloudletId(), " returned"); Log.printConcatLine(CloudSim.clock(), ": ", getName(), "The number of finished Cloudlets is:", getCloudletReceivedList().size()); cloudletsSubmitted--; if (getCloudletList().size() == 0 && cloudletsSubmitted == 0) { // all cloudlets executed Log.printConcatLine(CloudSim.clock(), ": ", getName(), ": All Cloudlets executed. Finishing..."); clearDatacenters(); finishExecution(); } else { // some cloudlets haven't finished yet if (getCloudletList().size() > 0 && cloudletsSubmitted == 0) { // all the cloudlets sent finished. It means that some bount // cloudlet is waiting its VM be created clearDatacenters(); createVmsInDatacenter(0); } } } /** * Overrides this method when making a new and different type of Broker. This method is called * by for incoming unknown tags. * * @param ev a SimEvent object * @pre ev != null * @post $none */ protected void processOtherEvent(SimEvent ev) { if (ev == null) { Log.printConcatLine(getName(), ".processOtherEvent(): ", "Error - an event is null."); return; } Log.printConcatLine(getName(), ".processOtherEvent(): Error - event unknown by this DatacenterBroker."); } /** * Create the virtual machines in a datacenter. * * @param datacenterId Id of the chosen PowerDatacenter * @pre $none * @post $none */ protected void createVmsInDatacenter(int datacenterId) { // send as much vms as possible for this datacenter before trying the next one int requestedVms = 0; String datacenterName = CloudSim.getEntityName(datacenterId); for (ContainerVm vm : getVmList()) { if (!getVmsToDatacentersMap().containsKey(vm.getId())) { Log.printLine(String.format("%s: %s: Trying to Create VM #%d in %s", CloudSim.clock(), getName(), vm.getId(), datacenterName)); sendNow(datacenterId, CloudSimTags.VM_CREATE_ACK, vm); requestedVms++; } } getDatacenterRequestedIdsList().add(datacenterId); setVmsRequested(requestedVms); setVmsAcks(0); } /** * Submit cloudlets to the created VMs. * * @pre $none * @post $none */ protected void submitCloudlets() { int containerIndex = 0; List<ContainerCloudlet> successfullySubmitted = new ArrayList<>(); for (ContainerCloudlet cloudlet : getCloudletList()) { //Log.printLine("Containers Created" + getContainersCreated()); if (containerIndex < getContainersCreated()) { //Log.printLine("Container Index" + containerIndex); // int containerId = getContainersCreatedList().get(containerIndex).getId(); // bindCloudletToContainer(cloudlet.getCloudletId(), containerId); if(getContainersToVmsMap().get(cloudlet.getContainerId()) != null) { int vmId = getContainersToVmsMap().get(cloudlet.getContainerId()); // bindCloudletToVm(cloudlet.getCloudletId(), vmId); cloudlet.setVmId(vmId); // if(cloudlet.getVmId() != vmId){ // Log.printConcatLine("The cloudlet Vm Id is ", cloudlet.getVmId(), "It should be", vmId); // // } containerIndex++; sendNow(getDatacenterIdsList().get(0), CloudSimTags.CLOUDLET_SUBMIT, cloudlet); cloudletsSubmitted++; getCloudletSubmittedList().add(cloudlet); successfullySubmitted.add(cloudlet); } //Log.printLine("Container Id" + containerId); //Log.printConcatLine("VM ID is: ",cloudlet.getVmId(), "Container ID:", cloudlet.getContainerId(), "cloudletId:", cloudlet.getCloudletId()); // cloudlet.setVmId(v.getId()); // if user didn't bind this cloudlet and it has not been executed yet // if (cloudlet.getContainerId() == -1) { // Log.print("User has forgotten to bound the cloudlet to container"); // } else { // submit to the specific vm // vm = ContainerVmList.getById(getVmsCreatedList(), cloudlet.getVmId()); // if (vm == null) { // vm was not created // if (!Log.isDisabled()) { // Log.printConcatLine(CloudSim.clock(), ": ", getName(), ": Postponing execution of cloudlet ", // cloudlet.getCloudletId(), ": bount VM not available"); // } // continue; // } // } // // if (!Log.isDisabled()) { // Log.printConcatLine(CloudSim.clock(), ": ", getName(), ": Sending cloudlet ", // cloudlet.getCloudletId(), " to VM #", cloudlet.getContainerId()); // } // containerIndex = (containerIndex + 1) % getVmsCreatedList().size(); // int vmIndex = 0; // List<ContainerCloudlet> successfullySubmitted = new ArrayList<ContainerCloudlet>(); // for (ContainerCloudlet cloudlet : getCloudletList()) { // ContainerVm vm; // // if user didn't bind this cloudlet and it has not been executed yet // if (cloudlet.getVmId() == -1) { // vm = getVmsCreatedList().get(vmIndex); // } else { // submit to the specific vm // vm = ContainerVmList.getById(getVmsCreatedList(), cloudlet.getVmId()); // if (vm == null) { // vm was not created // if (!Log.isDisabled()) { // Log.printConcatLine(CloudSim.clock(), ": ", getName(), ": Postponing execution of cloudlet ", // cloudlet.getCloudletId(), ": bount VM not available"); // } // continue; // } // } // // if (!Log.isDisabled()) {cloudlet.getCloudletId() // Log.printConcatLine(CloudSim.clock(), ": ", getName(), ": Sending cloudlet ", // cloudlet.getCloudletId(), " to VM #", vm.getId()); // } // // cloudlet.setVmId(vm.getId()); // sendNow(getVmsToDatacentersMap().get(vm.getId()), CloudSimTags.CLOUDLET_SUBMIT, cloudlet); // cloudletsSubmitted++; // vmIndex = (vmIndex + 1) % getVmsCreatedList().size(); // getCloudletSubmittedList().add(cloudlet); // successfullySubmitted.add(cloudlet); } } // remove submitted cloudlets from waiting list getCloudletList().removeAll(successfullySubmitted); successfullySubmitted.clear(); } /**getOverBookingfactor * Destroy the virtual machines running in datacenters. * * @pre $none * @post $none */ protected void clearDatacenters() { for (ContainerVm vm : getVmsCreatedList()) { // Log.printConcatLine(CloudSim.clock(), ": " + getName(), ": Destroying VM #", vm.getId()); sendNow(getVmsToDatacentersMap().get(vm.getId()), CloudSimTags.VM_DESTROY, vm); } getVmsCreatedList().clear(); } /** * */ protected void submitContainers(){ List<Container> successfullySubmitted = new ArrayList<>(); int i = 0; for(Container container:getContainerList()) { ContainerCloudlet cloudlet = getCloudletList().get(i); //Log.printLine("Containers Created" + getContainersCreated()); if (cloudlet.getUtilizationModelCpu() instanceof UtilizationModelPlanetLabInMemory) { UtilizationModelPlanetLabInMemory temp = (UtilizationModelPlanetLabInMemory) cloudlet.getUtilizationModelCpu(); double[] cloudletUsage = temp.getData(); Percentile percentile = new Percentile(); double percentileUsage = percentile.evaluate(cloudletUsage, getOverBookingfactor()); //Log.printLine("Container Index" + containerIndex); double newmips = percentileUsage * container.getMips(); // double newmips = percentileUsage * container.getMips(); // double maxUsage = Doubles.max(cloudletUsage); // double newmips = maxUsage * container.getMips(); container.setWorkloadMips(newmips); // bindCloudletToContainer(cloudlet.getCloudletId(), container.getId()); cloudlet.setContainerId(container.getId()); if(cloudlet.getContainerId() != container.getId()){ // Log.printConcatLine("Binding Cloudlet: ", cloudlet.getCloudletId(), "To Container: ",container.getId() , "Now it is", cloudlet.getContainerId()); } } i++; } for(Container container:getContainerList()){ successfullySubmitted.add(container); } sendNow(getDatacenterIdsList().get(0), containerCloudSimTags.CONTAINER_SUBMIT, successfullySubmitted); // List<Container> successfullySubmitted = new ArrayList<>(); // for (Container container : getContainerList()) { // // if (!Log.isDisabled()) { // Log.printConcatLine(CloudSim.clock(), ": ", getName(), ": Sending container ", // container.getId(), " to Datacenter"); // } // cloudletsSubmitted++; // vmIndex = (vmIndex + 1) % getVmsCreatedList().size(); // getCloudletSubmittedList().add(cloudlet); // successfullySubmitted.add(cloudlet); // } // remove submitted cloudlets from waiting list } /** * Send an internal event communicating the end of the simulation. * * @pre $none * @post $none */ protected void finishExecution() { sendNow(getId(), CloudSimTags.END_OF_SIMULATION); } /* * (non-Javadoc) * @see cloudsim.core.SimEntity#shutdownEntity() */ @Override public void shutdownEntity() { Log.printConcatLine(getName(), " is shutting down..."); } /* * (non-Javadoc) * @see cloudsim.core.SimEntity#startEntity() */ @Override public void startEntity() { Log.printConcatLine(getName(), " is starting..."); schedule(getId(), 0, CloudSimTags.RESOURCE_CHARACTERISTICS_REQUEST); } /** * Gets the vm list. * * @param <T> the generic type * @return the vm list */ @SuppressWarnings("unchecked") public <T extends ContainerVm> List<T> getVmList() { return (List<T>) vmList; } /** * Sets the vm list. * * @param <T> the generic type * @param vmList the new vm list */ protected <T extends ContainerVm> void setVmList(List<T> vmList) { this.vmList = vmList; } /** * Gets the cloudlet list. * * @param <T> the generic type * @return the cloudlet list */ @SuppressWarnings("unchecked") public <T extends ContainerCloudlet> List<T> getCloudletList() { return (List<T>) cloudletList; } /** * Sets the cloudlet list. * * @param <T> the generic type * @param cloudletList the new cloudlet list */ protected <T extends ContainerCloudlet> void setCloudletList(List<T> cloudletList) { this.cloudletList = cloudletList; } /** * Gets the cloudlet submitted list. * * @param <T> the generic type * @return the cloudlet submitted list */ @SuppressWarnings("unchecked") public <T extends ContainerCloudlet> List<T> getCloudletSubmittedList() { return (List<T>) cloudletSubmittedList; } /** * Sets the cloudlet submitted list. * * @param <T> the generic type * @param cloudletSubmittedList the new cloudlet submitted list */ protected <T extends ContainerCloudlet> void setCloudletSubmittedList(List<T> cloudletSubmittedList) { this.cloudletSubmittedList = cloudletSubmittedList; } /** * Gets the cloudlet received list. * * @param <T> the generic type * @return the cloudlet received list */ @SuppressWarnings("unchecked") public <T extends ContainerCloudlet> List<T> getCloudletReceivedList() { return (List<T>) cloudletReceivedList; } /** * Sets the cloudlet received list. * * @param <T> the generic type * @param cloudletReceivedList the new cloudlet received list */ protected <T extends ContainerCloudlet> void setCloudletReceivedList(List<T> cloudletReceivedList) { this.cloudletReceivedList = cloudletReceivedList; } /** * Gets the vm list. * * @param <T> the generic type * @return the vm list */ @SuppressWarnings("unchecked") public <T extends ContainerVm> List<T> getVmsCreatedList() { return (List<T>) vmsCreatedList; } /** * Sets the vm list. * * @param <T> the generic type * @param vmsCreatedList the vms created list */ protected <T extends ContainerVm> void setVmsCreatedList(List<T> vmsCreatedList) { this.vmsCreatedList = vmsCreatedList; } /** * Gets the vms requested. * * @return the vms requested */ protected int getVmsRequested() { return vmsRequested; } /** * Sets the vms requested. * * @param vmsRequested the new vms requested */ protected void setVmsRequested(int vmsRequested) { this.vmsRequested = vmsRequested; } /** * Gets the vms acks. * * @return the vms acks */ protected int getVmsAcks() { return vmsAcks; } /** * Sets the vms acks. * * @param vmsAcks the new vms acks */ protected void setVmsAcks(int vmsAcks) { this.vmsAcks = vmsAcks; } /** * Increment vms acks. */ protected void incrementVmsAcks() { vmsAcks++; } /** * Increment vms acks. */ protected void incrementContainersAcks() { setContainersAcks(getContainersAcks()+1); } /** * Gets the vms destroyed. * * @return the vms destroyed */ protected int getVmsDestroyed() { return vmsDestroyed; } /** * Sets the vms destroyed. * * @param vmsDestroyed the new vms destroyed */ protected void setVmsDestroyed(int vmsDestroyed) { this.vmsDestroyed = vmsDestroyed; } /** * Gets the datacenter ids list. * * @return the datacenter ids list */ protected List<Integer> getDatacenterIdsList() { return datacenterIdsList; } /** * Sets the datacenter ids list. * * @param datacenterIdsList the new datacenter ids list */ protected void setDatacenterIdsList(List<Integer> datacenterIdsList) { this.datacenterIdsList = datacenterIdsList; } /** * Gets the vms to datacenters map. * * @return the vms to datacenters map */ protected Map<Integer, Integer> getVmsToDatacentersMap() { return vmsToDatacentersMap; } /** * Sets the vms to datacenters map. * * @param vmsToDatacentersMap the vms to datacenters map */ protected void setVmsToDatacentersMap(Map<Integer, Integer> vmsToDatacentersMap) { this.vmsToDatacentersMap = vmsToDatacentersMap; } /** * Gets the datacenter characteristics list. * * @return the datacenter characteristics list */ protected Map<Integer, ContainerDatacenterCharacteristics> getDatacenterCharacteristicsList() { return datacenterCharacteristicsList; } /** * Sets the datacenter characteristics list. * * @param datacenterCharacteristicsList the datacenter characteristics list */ protected void setDatacenterCharacteristicsList( Map<Integer, ContainerDatacenterCharacteristics> datacenterCharacteristicsList) { this.datacenterCharacteristicsList = datacenterCharacteristicsList; } /** * Gets the datacenter requested ids list. * * @return the datacenter requested ids list */ protected List<Integer> getDatacenterRequestedIdsList() { return datacenterRequestedIdsList; } /** * Sets the datacenter requested ids list. * * @param datacenterRequestedIdsList the new datacenter requested ids list */ protected void setDatacenterRequestedIdsList(List<Integer> datacenterRequestedIdsList) { this.datacenterRequestedIdsList = datacenterRequestedIdsList; } //------------------------------------------------ public <T extends Container> List<T> getContainerList() { return (List<T>) containerList; } public void setContainerList(List<? extends Container> containerList) { this.containerList = containerList; } /** * This method is used to send to the broker the list with virtual machines that must be * created. * * @param list the list * @pre list !=null * @post $none */ public void submitContainerList(List<? extends Container> list) { getContainerList().addAll(list); } public Map<Integer, Integer> getContainersToVmsMap() { return containersToDatacentersMap; } public void setContainersToDatacentersMap(Map<Integer, Integer> containersToDatacentersMap) { this.containersToDatacentersMap = containersToDatacentersMap; } public <T extends Container> List<T> getContainersCreatedList() { return (List<T>) containersCreatedList; } public void setContainersCreatedList(List<? extends Container> containersCreatedList) { this.containersCreatedList = containersCreatedList; } public int getContainersAcks() { return containersAcks; } public void setContainersAcks(int containersAcks) { this.containersAcks = containersAcks; } public int getContainersCreated() { return containersCreated; } public void setContainersCreated(int containersCreated) { this.containersCreated = containersCreated; } public double getOverBookingfactor() { return overBookingfactor; } public void setOverBookingfactor(double overBookingfactor) { this.overBookingfactor = overBookingfactor; } public int getNumberOfCreatedVMs() { return numberOfCreatedVMs; } public void setNumberOfCreatedVMs(int numberOfCreatedVMs) { this.numberOfCreatedVMs = numberOfCreatedVMs; } }