/**
* Copyright 2013-2014 University Of Southern California
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package org.workflowsim.scheduling;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import org.cloudbus.cloudsim.Cloudlet;
import org.workflowsim.CondorVM;
import org.workflowsim.WorkflowSimTags;
/**
* The Round Robin algorithm.
*
* @author Weiwei Chen
* @since WorkflowSim Toolkit 1.0
* @date May 12, 2014
*/
public class RoundRobinSchedulingAlgorithm extends BaseSchedulingAlgorithm {
/**
* The main function
*/
@Override
public void run() {
int vmIndex = 0;
int size = getCloudletList().size();
Collections.sort(getCloudletList(), new CloudletListComparator());
List vmList = getVmList();
Collections.sort(vmList, new VmListComparator());
for (int j = 0; j < size; j++) {
Cloudlet cloudlet = (Cloudlet) getCloudletList().get(j);
int vmSize = vmList.size();
CondorVM firstIdleVm = null;//(CondorVM)getVmList().get(0);
for (int l = 0; l < vmSize; l++) {
CondorVM vm = (CondorVM) vmList.get(l);
if (vm.getState() == WorkflowSimTags.VM_STATUS_IDLE) {
firstIdleVm = vm;
break;
}
}
if (firstIdleVm == null) {
break;
}
((CondorVM) firstIdleVm).setState(WorkflowSimTags.VM_STATUS_BUSY);
cloudlet.setVmId(firstIdleVm.getId());
getScheduledList().add(cloudlet);
vmIndex = (vmIndex + 1) % vmList.size();
}
}
/**
* Sort it based on vm index
*/
public class VmListComparator implements Comparator<CondorVM>{
@Override
public int compare(CondorVM v1, CondorVM v2){
return Integer.compare(v1.getId(), v2.getId());
}
}
public class CloudletListComparator implements Comparator<Cloudlet>{
@Override
public int compare(Cloudlet c1, Cloudlet c2){
return Integer.compare(c1.getCloudletId(), c2.getCloudletId());
}
}
}