package simulator.workload.reader.archive.gwf; import java.io.IOException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.exolab.castor.types.Duration; import org.qcg.broker.schemas.jobdesc.ComputingResourceBaseTypeChoice; import org.qcg.broker.schemas.jobdesc.ComputingResourceBaseTypeChoiceItem; import org.qcg.broker.schemas.jobdesc.ComputingResourceParameterType; import org.qcg.broker.schemas.jobdesc.ComputingResourceType; import org.qcg.broker.schemas.jobdesc.ExecutionTimeType; import org.qcg.broker.schemas.jobdesc.ParameterTypeChoice; import org.qcg.broker.schemas.jobdesc.ParameterTypeChoiceItem; import org.qcg.broker.schemas.jobdesc.RequirementsType; import org.qcg.broker.schemas.jobdesc.ResourceRequirementsType; import org.qcg.broker.schemas.jobdesc.Task; import org.qcg.broker.schemas.jobdesc.Value; import org.qcg.broker.schemas.jobdesc.types.ComputingParameterName; import simulator.workload.reader.archive.QcgWAJobReader; import simulator.workload.reader.archive.WAParser; /** * * @author Marcin Krystek * */ public class QcgGWFJobReader extends QcgWAJobReader{ private Log log = LogFactory.getLog(QcgGWFJobReader.class); public QcgGWFJobReader(String fileName) throws NullPointerException, IOException { super(fileName); this.waParser.loadHeader(); } public QcgGWFJobReader(WAParser parser) { super(parser); } protected Task createTask(String[] data) { RequirementsType requirements = null; ResourceRequirementsType taskReq = null; ComputingResourceType compResource = null; ComputingResourceBaseTypeChoice choice = null; ComputingResourceBaseTypeChoiceItem crItem = null; ComputingResourceParameterType param = null; Task task = null; long value = -1; task = new Task(); requirements = new RequirementsType(); taskReq = new ResourceRequirementsType(); compResource = new ComputingResourceType(); choice = new ComputingResourceBaseTypeChoice(); compResource.setComputingResourceBaseTypeChoice(choice); taskReq.addComputingResource(compResource); requirements.setResourceRequirements(taskReq); task.setRequirements(requirements); for(int i = 0; i < GWFFields.DATA_FIELDS.length; i++){ try { value = Long.parseLong(data[GWFFields.DATA_FIELDS[i]]); switch(GWFFields.DATA_FIELDS[i]){ case GWFFields.DATA_NPROCS: if(value <= 0){ if(log.isWarnEnabled()) log.warn("Task "+data[0] + " is omited. Number of allocated processors should be grather then 0."); return null; } break; case GWFFields.DATA_REQ_NPROCS: if(value <= 0){ if(log.isWarnEnabled()) log.warn("Task "+data[0] + " is omited. Number of requested processors should be grather then 0."); return null; } break; case GWFFields.DATA_RUN_TIME: if(value <= 0){ if(log.isWarnEnabled()) log.warn("Task "+data[0] + " is omited. Task runtime should be grather then 0."); return null; } break; } if (value == -1) continue; } catch (NumberFormatException e) { if(GWFFields.DATA_FIELDS[i] != GWFFields.DATA_JOB_ID) continue; } switch(GWFFields.DATA_FIELDS[i]){ case GWFFields.DATA_JOB_ID: currntJobID = data[GWFFields.DATA_FIELDS[i]]; String tab[] = this.waParser.getIDMapping(currntJobID); task.setId(tab[1]); break; case GWFFields.DATA_SUBMIT_TIME: /* * This is information for simulator not for task description. * See WorkloadLoader for details. */ break; case GWFFields.DATA_RUN_TIME: /* * This is information for simulator not for task description. * See WorkloadLoader for details. */ break; case GWFFields.DATA_NPROCS: /* * This is information for simulator not for task description. * See WorkloadLoader for details. */ break; case GWFFields.DATA_USED_MEMORY: /* * This is information for simulator not for task description. * See WorkloadLoader for details. */ break; case GWFFields.DATA_REQ_NPROCS: crItem = new ComputingResourceBaseTypeChoiceItem(); param = new ComputingResourceParameterType(); param.setName(ComputingParameterName.CPUCOUNT); { ParameterTypeChoice tpChoice = new ParameterTypeChoice(); ParameterTypeChoiceItem item = new ParameterTypeChoiceItem(); Value paramValue = new Value(); paramValue.setContent(Long.valueOf(value).doubleValue()); item.setValue(paramValue); tpChoice.addParameterTypeChoiceItem(item); param.setParameterTypeChoice(tpChoice); } crItem.setHostParameter(param); choice.addComputingResourceBaseTypeChoiceItem(crItem); break; case GWFFields.DATA_REQ_TIME: ExecutionTimeType executionTime = new ExecutionTimeType(); // requested time is expressed in swf file in seconds // multiply value * 1000 to get milliseconds Duration d = new Duration(value * 1000); executionTime.setExecutionDuration(d); task.setExecutionTime(executionTime); break; case GWFFields.DATA_REQ_MEMORY: crItem = new ComputingResourceBaseTypeChoiceItem(); param = new ComputingResourceParameterType(); param.setName(ComputingParameterName.MEMORY); { ParameterTypeChoice tpChoice = new ParameterTypeChoice(); ParameterTypeChoiceItem item = new ParameterTypeChoiceItem(); Value paramValue = new Value(); paramValue.setContent(Long.valueOf(value).doubleValue()); item.setValue(paramValue); tpChoice.addParameterTypeChoiceItem(item); param.setParameterTypeChoice(tpChoice); } crItem.setHostParameter(param); choice.addComputingResourceBaseTypeChoiceItem(crItem); break; } } return task; } }