/** * Notify RM to create a new job. * * @param parentID parent element ID * @param jobID the ID of the job * @param attrMgr attributes from the job thread * @return job id of the newly created job */ public String createJob(String parentID, AttributeManager attrMgr) throws CoreException { ElementAttributeManager mgr = new ElementAttributeManager(); AttributeManager jobAttrMgr = new AttributeManager(); /* * Add generated attributes. */ String jobID = generateID().toString(); jobAttrMgr.addAttribute(JobAttributes.getJobIdAttributeDefinition().create(jobID)); jobAttrMgr.addAttribute( JobAttributes.getStatusAttributeDefinition() .create(MPIJobAttributes.Status.NORMAL.toString())); jobAttrMgr.addAttribute( JobAttributes.getUserIdAttributeDefinition().create(System.getenv("USER"))); // $NON-NLS-1$ jobAttrMgr.addAttribute( ElementAttributes.getNameAttributeDefinition().create(generateJobName())); /* * Get mandatory launch attributes. */ String subId = getAttributeValue(JobAttributes.getSubIdAttributeDefinition(), attrMgr); String execName = getAttributeValue(JobAttributes.getExecutableNameAttributeDefinition(), attrMgr); String execPath = getAttributeValue(JobAttributes.getExecutablePathAttributeDefinition(), attrMgr); String workDir = getAttributeValue(JobAttributes.getWorkingDirectoryAttributeDefinition(), attrMgr); Integer numProcs = getAttributeValue(JobAttributes.getNumberOfProcessesAttributeDefinition(), attrMgr); List<? extends String> progArgs = getAttributeValue(JobAttributes.getProgramArgumentsAttributeDefinition(), attrMgr); /* * Copy these relevant attributes to IPJob. */ jobAttrMgr.addAttribute(JobAttributes.getSubIdAttributeDefinition().create(subId)); jobAttrMgr.addAttribute(JobAttributes.getExecutableNameAttributeDefinition().create(execName)); jobAttrMgr.addAttribute(JobAttributes.getExecutablePathAttributeDefinition().create(execPath)); jobAttrMgr.addAttribute(JobAttributes.getWorkingDirectoryAttributeDefinition().create(workDir)); try { jobAttrMgr.addAttribute( JobAttributes.getNumberOfProcessesAttributeDefinition().create(numProcs)); } catch (IllegalValueException e) { RMCorePlugin.log(e); } jobAttrMgr.addAttribute( JobAttributes.getProgramArgumentsAttributeDefinition() .create(progArgs.toArray(new String[0]))); /* * Copy optional attributes */ BooleanAttribute debugAttr = attrMgr.getAttribute(JobAttributes.getDebugFlagAttributeDefinition()); if (debugAttr != null) { jobAttrMgr.addAttribute( JobAttributes.getDebugFlagAttributeDefinition().create(debugAttr.getValue())); } /* * Notify RM. */ mgr.setAttributeManager(new RangeSet(jobID), jobAttrMgr); fireRuntimeNewJobEvent(eventFactory.newRuntimeNewJobEvent(parentID, mgr)); DebugUtil.trace( DebugUtil.RTS_TRACING, "RTS {0}: new job #{1}", getResourceManager().getConfiguration().getName(), jobID); //$NON-NLS-1$ return jobID; }