[477] | 1 | package schedframe.scheduling.manager.tasks; |
---|
| 2 | |
---|
| 3 | |
---|
[1362] | 4 | import gridsim.dcworms.DCWormsTags; |
---|
| 5 | |
---|
[1151] | 6 | import java.util.ArrayList; |
---|
| 7 | import java.util.List; |
---|
[1362] | 8 | import java.util.Map; |
---|
[477] | 9 | import java.util.concurrent.ConcurrentHashMap; |
---|
| 10 | |
---|
[1362] | 11 | import schedframe.resources.units.ResourceUnit; |
---|
| 12 | import schedframe.resources.units.ResourceUnitName; |
---|
[1374] | 13 | import schedframe.scheduling.manager.resources.utils.ResourceManagerUtils; |
---|
[477] | 14 | import schedframe.scheduling.tasks.Job; |
---|
| 15 | import schedframe.scheduling.tasks.JobInterface; |
---|
| 16 | import schedframe.scheduling.tasks.Task; |
---|
| 17 | import schedframe.scheduling.tasks.TaskInterface; |
---|
[1362] | 18 | import simulator.DataCenterWorkloadSimulator; |
---|
| 19 | import dcworms.schedframe.scheduling.ExecTask; |
---|
[477] | 20 | |
---|
| 21 | |
---|
[1385] | 22 | public abstract class AbstractJobRegistry /*extends ConcurrentHashMap<String, Job>*/ implements JobRegistry{ |
---|
[477] | 23 | |
---|
| 24 | |
---|
[481] | 25 | protected static final ConcurrentHashMap<String, JobInterface<?>> jobs = new ConcurrentHashMap<String, JobInterface<?>>(); |
---|
[477] | 26 | |
---|
| 27 | protected AbstractJobRegistry(){ |
---|
| 28 | } |
---|
| 29 | |
---|
| 30 | public boolean addJob(JobInterface<?> job) { |
---|
[1151] | 31 | jobs.put(job.getId(), job); |
---|
[477] | 32 | return true; |
---|
| 33 | } |
---|
| 34 | |
---|
| 35 | public boolean addTask(TaskInterface<?> task) { |
---|
| 36 | if(jobs.containsKey(task.getJobId())){ |
---|
[481] | 37 | getJob(task.getJobId()).add((Task)task); |
---|
[477] | 38 | return true; |
---|
| 39 | } else { |
---|
| 40 | return false; |
---|
| 41 | } |
---|
| 42 | } |
---|
| 43 | |
---|
[481] | 44 | public JobInterface<?> getJobInfo(String jobId) { |
---|
[477] | 45 | return jobs.get(jobId); |
---|
| 46 | } |
---|
| 47 | |
---|
[481] | 48 | public TaskInterface<?> getTaskInfo(String jobId, String taskId) { |
---|
[477] | 49 | Task task = null; |
---|
[481] | 50 | Job job = getJob(jobId); |
---|
[477] | 51 | |
---|
| 52 | if(job == null) |
---|
| 53 | return null; |
---|
| 54 | |
---|
| 55 | try { |
---|
| 56 | task = job.getTask(taskId); |
---|
| 57 | } catch (NoSuchFieldException e) { |
---|
| 58 | } |
---|
| 59 | return task; |
---|
| 60 | } |
---|
| 61 | |
---|
[481] | 62 | public Job getJob(String jobId){ |
---|
| 63 | return (Job)jobs.get(jobId); |
---|
[477] | 64 | } |
---|
[1151] | 65 | |
---|
| 66 | public List<JobInterface<?>> getJobs(){ |
---|
| 67 | List<JobInterface<?>> jobList = new ArrayList<JobInterface<?>>(); |
---|
[1374] | 68 | for(String jobId: jobs.keySet()) { |
---|
[1151] | 69 | jobList.add(jobs.get(jobId)); |
---|
| 70 | } |
---|
| 71 | return jobList; |
---|
| 72 | } |
---|
[477] | 73 | |
---|
[1151] | 74 | public List<JobInterface<?>> getJobs(int status) { |
---|
| 75 | List<JobInterface<?>> jobList = new ArrayList<JobInterface<?>>(); |
---|
| 76 | synchronized (jobs) { |
---|
[1374] | 77 | for(String jobId: jobs.keySet()){ |
---|
[1151] | 78 | JobInterface<?> job = jobs.get(jobId); |
---|
| 79 | if (job.getStatus() == status) { |
---|
| 80 | jobList.add(job); |
---|
| 81 | } |
---|
| 82 | } |
---|
| 83 | } |
---|
| 84 | return jobList; |
---|
| 85 | } |
---|
| 86 | |
---|
[1362] | 87 | @Override |
---|
| 88 | public boolean pauseTask(String jobId, String taskId) { |
---|
| 89 | ExecTask execTask = getTask(jobId, taskId); |
---|
| 90 | if (execTask == null) { |
---|
| 91 | return false; |
---|
| 92 | }else{ |
---|
[1374] | 93 | try { |
---|
| 94 | execTask.setStatus(DCWormsTags.PAUSING); |
---|
| 95 | } catch (Exception e) { |
---|
| 96 | // TODO Auto-generated catch block |
---|
| 97 | e.printStackTrace(); |
---|
| 98 | } |
---|
[1362] | 99 | String[] ids = new String[2]; |
---|
| 100 | ids[0] = new String(jobId); |
---|
| 101 | ids[1] = new String(taskId); |
---|
| 102 | DataCenterWorkloadSimulator.getEventManager().sendToAllSchedulers(0, DCWormsTags.TASK_PAUSE, ids); |
---|
| 103 | return true; |
---|
| 104 | } |
---|
| 105 | } |
---|
| 106 | |
---|
| 107 | public boolean resumeTask(String jobId, String taskId) { |
---|
| 108 | ExecTask execTask = getTask(jobId, taskId); |
---|
| 109 | if (execTask == null) { |
---|
| 110 | return false; |
---|
| 111 | }else{ |
---|
| 112 | String[] ids = new String[2]; |
---|
| 113 | ids[0] = new String(jobId); |
---|
| 114 | ids[1] = new String(taskId); |
---|
| 115 | DataCenterWorkloadSimulator.getEventManager().sendToAllSchedulers(0, DCWormsTags.TASK_RESUME, ids); |
---|
| 116 | return true; |
---|
| 117 | } |
---|
| 118 | } |
---|
| 119 | |
---|
| 120 | public boolean migrateTask(String jobId, String taskId, Map<ResourceUnitName, ResourceUnit> choosenResources) { |
---|
| 121 | ExecTask execTask = getTask(jobId, taskId); |
---|
| 122 | if (execTask == null) { |
---|
| 123 | return false; |
---|
| 124 | }else{ |
---|
[1374] | 125 | try { |
---|
| 126 | execTask.setStatus(DCWormsTags.IN_MIGRATION); |
---|
| 127 | } catch (Exception e) { |
---|
| 128 | return false; |
---|
| 129 | } |
---|
| 130 | if(choosenResources != null){ |
---|
| 131 | ResourceManagerUtils.setPendingResources(choosenResources); |
---|
| 132 | } |
---|
[1362] | 133 | Object[] data = new Object[3]; |
---|
| 134 | data[0] = new String(jobId); |
---|
| 135 | data[1] = new String(taskId); |
---|
| 136 | data[2] = choosenResources; |
---|
[1551] | 137 | DataCenterWorkloadSimulator.getEventManager().sendToScheduler(execTask.getSchedulerName(), 0, DCWormsTags.TASK_MIGRATE, data); |
---|
[1362] | 138 | return true; |
---|
| 139 | } |
---|
| 140 | } |
---|
| 141 | |
---|
| 142 | public boolean migrateTask(String jobId, String taskId, String nodeName) { |
---|
| 143 | // TODO Auto-generated method stub |
---|
| 144 | return false; |
---|
| 145 | } |
---|
| 146 | |
---|
[477] | 147 | } |
---|