source: DCWoRMS/trunk/build/classes/example/globalplugin/GridFCFSRoundRobinPlugin.java @ 539

Revision 539, 2.7 KB checked in by wojtekp, 12 years ago (diff)
  • Property svn:mime-type set to text/plain
Line 
1package example.globalplugin;
2
3import java.util.LinkedList;
4import java.util.List;
5
6import schedframe.events.scheduling.SchedulingEvent;
7import schedframe.scheduling.SchedulerDescription;
8import schedframe.scheduling.manager.resources.ResourceManager;
9import schedframe.scheduling.manager.tasks.JobRegistry;
10import schedframe.scheduling.plan.SchedulingPlanInterface;
11import schedframe.scheduling.plan.impl.Allocation;
12import schedframe.scheduling.plan.impl.ScheduledTask;
13import schedframe.scheduling.plan.impl.SchedulingPlan;
14import schedframe.scheduling.plugin.grid.Module;
15import schedframe.scheduling.plugin.grid.ModuleList;
16import schedframe.scheduling.plugin.grid.ResourceDiscovery;
17import schedframe.scheduling.queue.TaskQueue;
18import schedframe.scheduling.queue.TaskQueueList;
19import schedframe.scheduling.tasks.TaskInterface;
20import schedframe.scheduling.tasks.WorkloadUnit;
21
22public class GridFCFSRoundRobinPlugin extends BaseGlobalPlugin {
23
24        private LinkedList<String> lastUsedResources = new LinkedList<String>();
25
26        public SchedulingPlanInterface schedule(SchedulingEvent event,
27                        TaskQueueList queues,
28                        JobRegistry jobRegistry,
29                        ResourceManager resourceManager, ModuleList modules)  {
30       
31                ResourceDiscovery resources = null;
32                for(int i = 0; i < modules.size(); i++){
33                        Module m = modules.get(i);
34                        switch(m.getType()){
35                                case RESOURCE_DISCOVERY: resources = (ResourceDiscovery) m;
36                                        break;
37                        }
38                }
39               
40                SchedulingPlan plan = new SchedulingPlan();
41               
42                TaskQueue q = queues.get(0);
43                int size = q.size();
44               
45                // order of the resources on this list is not determined
46                List<SchedulerDescription> availableResources = resources.getResources();
47               
48                for(int i = 0; i < size; i++) {
49                        WorkloadUnit job = q.remove(0);
50                        TaskInterface<?> task = (TaskInterface<?>)job;
51                       
52                        SchedulerDescription sd = availableResources.get(availableResources.size() - 1);
53                        for(SchedulerDescription schedDesc: availableResources){
54                                if(!lastUsedResources.contains(schedDesc.getProvider().getProviderId())){
55                                        if(lastUsedResources.size() + 1 >= availableResources.size()){
56                                                lastUsedResources.poll();
57                                        }
58                                        lastUsedResources.add(schedDesc.getProvider().getProviderId());
59                                        sd = schedDesc;
60                                        break;
61                                }
62                        }
63               
64                        Allocation allocation = new Allocation();
65                        allocation.setProcessesCount(1);
66                        allocation.setProviderName(sd.getProvider().getProviderId());
67                        ScheduledTask scheduledTask = new ScheduledTask(task);
68                        scheduledTask.setTaskId(task.getId());
69                        scheduledTask.setJobId(task.getJobId());
70                        scheduledTask.addAllocation(allocation);               
71                       
72                        plan.addTask(scheduledTask);
73                }
74                return plan;
75        }
76
77}
Note: See TracBrowser for help on using the repository browser.