source: DCWoRMS/branches/coolemall/src/simulator/workload/writer/swf/QcgSWFJobWriter.java @ 1131

Revision 1131, 5.4 KB checked in by wojtekp, 12 years ago (diff)
  • Property svn:mime-type set to text/plain
Line 
1package simulator.workload.writer.swf;
2
3import java.io.IOException;
4import java.util.Random;
5
6import org.exolab.castor.types.Duration;
7
8import simulator.workload.reader.archive.swf.SWFFields;
9
10import org.qcg.broker.schemas.exception.NoSuchParamException;
11import org.qcg.broker.schemas.jobdesc.ExecutionTimeType;
12import org.qcg.broker.schemas.jobdesc.Task;
13import org.qcg.broker.schemas.jobdesc.wrapper.TaskRequirements;
14import test.jobschema.DCWoRMSTaskRequirementsImpl;
15
16/**
17 *
18 * @author Marcin Krystek
19 *
20 */
21public class QcgSWFJobWriter extends AbstractSWFJobWriter<org.qcg.broker.schemas.jobdesc.Job>{
22
23        protected int intTaskId;
24        protected String workloadArray[];
25        protected Random random;
26       
27        public QcgSWFJobWriter(String dirName, String fileName) throws IOException{
28                super(dirName, fileName);
29                this.intTaskId = 0;
30                this.workloadArray = new String[18];
31                this.random = new Random(System.currentTimeMillis());
32        }
33       
34        public boolean write(org.qcg.broker.schemas.jobdesc.Job job) throws IOException {
35                long taskLength;
36                String idMapping;
37                String taskId;
38                TaskRequirements taskReqWrapper = new DCWoRMSTaskRequirementsImpl();
39               
40                for(int i = 0; i < job.getTaskCount(); i++){
41                        Task task = job.getTask(i);
42                        taskReqWrapper.wrap(task);
43                       
44                        // prepare swf task id
45                        if(this.useTaskMapping){
46                                taskId = String.valueOf(intTaskId);
47                                idMapping = taskId+":"+job.getId()+":"+task.getId();
48                                intTaskId++;
49                                this.taskMapping.add(idMapping);
50                        } else {
51                                taskId = task.getId();
52                        }
53                       
54                        // prepare task length value
55                        if(tasksLength.containsKey(task.getId())){
56                                taskLength = tasksLength.get(task.getId());
57                        } else {
58                                taskLength = 0;
59                        }
60                       
61                        double tab[] = null;
62                       
63                        // prepare requested number of processors
64                        String reqCpuCnt = IRRELEVANT;
65                        try {
66                                double min = 0;
67                                double max = Double.MAX_VALUE;
68                               
69                                if((tab = taskReqWrapper.getCpucount()).length != 0){ // try single value
70                                        reqCpuCnt = String.valueOf(Math.round(tab[0]));
71                                       
72                                } else {
73                                        double d[][] = taskReqWrapper.getRangeCpucount();
74                                        if(d.length != 0 && (tab = d[0]).length != 0){ // try range value
75                                                min = tab[0];
76                                                max = tab[1];
77                                                double r = random.nextDouble();
78                                                reqCpuCnt = String.valueOf(Math.round(min + (max - min) * r));
79                                       
80                                        } else {                                                                                // try single min and max value
81                                                boolean change = false;
82                                                if((tab = taskReqWrapper.getMinCpucount()).length != 0) {
83                                                        min = tab[0];
84                                                        change = true;
85                                                }
86                                                if((tab = taskReqWrapper.getMaxCpucount()).length != 0){
87                                                        max = tab[0];
88                                                        change = true;
89                                                }
90                                                if(change) {
91                                                        double r = random.nextDouble();
92                                                        reqCpuCnt = String.valueOf(Math.round(min + (max - min) * r));
93                                                }
94                                        }
95                                }
96                               
97                        } catch(NoSuchParamException e){
98
99                        }
100                       
101                        // prepare requested memory
102                        String reqMemCnt = IRRELEVANT;
103                        try {
104                                double min = 0;
105                                double max = Double.MAX_VALUE;
106                               
107                                if((tab = taskReqWrapper.getMemory()).length != 0){ // try single value
108                                        reqMemCnt = String.valueOf(Math.round(tab[0]));
109                                       
110                                } else {
111                                        double d[][] = taskReqWrapper.getRangeMemory();
112                                        if(d.length != 0 && (tab = d[0]).length != 0){ // try range value
113                                                min = tab[0];
114                                                max = tab[1];
115                                                double r = random.nextDouble();
116                                                reqMemCnt = String.valueOf(Math.round(min + (max - min) * r));
117                                               
118                                        } else {                                                                                // try single min and max value
119                                                boolean change = false;
120                                                if((tab = taskReqWrapper.getMinMemory()).length != 0) {
121                                                        min = tab[0];
122                                                        change = true;
123                                                }
124                                                if((tab = taskReqWrapper.getMaxMemory()).length != 0){
125                                                        max = tab[0];
126                                                        change = true;
127                                                }
128                                                if(change){
129                                                        double r = random.nextDouble();
130                                                        reqMemCnt = String.valueOf(Math.round(min + (max - min) * r));
131                                                }
132                                        }
133                                }
134                               
135                        } catch(NoSuchParamException e){
136
137                        }
138                       
139                        // prepare requested time
140                        long reqTaskLength = taskLength;
141                        ExecutionTimeType ett = task.getExecutionTime();
142                        if(ett != null){
143                                Duration duration = ett.getExecutionDuration();
144                                reqTaskLength = duration.toLong();
145                        }
146                       
147                       
148                        workloadArray[SWFFields.DATA_JOB_NUMBER] = taskId;
149                        workloadArray[SWFFields.DATA_SUBMIT_TIME] = String.valueOf(this.submitTime);
150                        workloadArray[SWFFields.DATA_WAIT_TIME] = IRRELEVANT;
151                        workloadArray[SWFFields.DATA_RUN_TIME] = String.valueOf(taskLength);
152                        workloadArray[SWFFields.DATA_NUMBER_OF_ALLOCATED_PROCESSORS] = reqCpuCnt;
153                        workloadArray[SWFFields.DATA_AVERAGE_CPU_TIME_USED] = IRRELEVANT;
154                        workloadArray[SWFFields.DATA_USED_MEMORY] = IRRELEVANT;
155                        workloadArray[SWFFields.DATA_REQUESTED_NUMBER_OF_PROCESSORS] = reqCpuCnt;
156                        workloadArray[SWFFields.DATA_REQUESTED_TIME] = String.valueOf(reqTaskLength);
157                        workloadArray[SWFFields.DATA_REQUESTED_MEMORY] = reqMemCnt;
158                        workloadArray[SWFFields.DATA_STATUS] = IRRELEVANT;
159                        workloadArray[SWFFields.DATA_USER_ID] = IRRELEVANT;
160                        workloadArray[SWFFields.DATA_GROUP_ID] = IRRELEVANT;
161                        workloadArray[SWFFields.DATA_EXECUTABLE_NUMBER]  = IRRELEVANT;
162                        workloadArray[SWFFields.DATA_QUEUE_NUMBER] = IRRELEVANT;
163                        workloadArray[SWFFields.DATA_PARTITION_NUMBER] = IRRELEVANT;
164                        workloadArray[SWFFields.DATA_PRECEDING_JOB_NUMBER] = IRRELEVANT;
165                        workloadArray[SWFFields.DATA_THINK_TIME_FROM_PRECEDING_JOB] = IRRELEVANT;
166                       
167                        writeLine(workloadArray);
168                       
169                }
170               
171                this.tasksLength.clear();
172               
173                return true;
174        }
175       
176        public void addTaskMapping(String swfJobId, String xmlJobId, String xmlTaskId){
177                if(!this.useTaskMapping)
178                        return;
179                this.taskMapping.add(swfJobId+":"+xmlJobId+":"+xmlTaskId);
180        }
181}
Note: See TracBrowser for help on using the repository browser.