use of eu.unicore.jsdl.extensions.ResourceRequestDocument in project airavata by apache.
the class ResourceProcessor method generateResourceElements.
public static void generateResourceElements(JobDefinitionType value, ProcessContext context) throws Exception {
ProcessModel processModel = context.getProcessModel();
if (processModel != null) {
try {
ComputationalResourceSchedulingModel crs = processModel.getProcessResourceSchedule();
if (crs.getTotalPhysicalMemory() > 0) {
RangeValueType rangeType = new RangeValueType();
rangeType.setLowerBound(Double.NaN);
rangeType.setUpperBound(Double.NaN);
rangeType.setExact(crs.getTotalPhysicalMemory());
JSDLUtils.setIndividualPhysicalMemoryRequirements(value, rangeType);
}
if (crs.getNodeCount() > 0) {
RangeValueType rangeType = new RangeValueType();
rangeType.setLowerBound(Double.NaN);
rangeType.setUpperBound(Double.NaN);
rangeType.setExact(crs.getNodeCount());
JSDLUtils.setTotalResourceCountRequirements(value, rangeType);
}
if (crs.getWallTimeLimit() > 0) {
RangeValueType cpuTime = new RangeValueType();
cpuTime.setLowerBound(Double.NaN);
cpuTime.setUpperBound(Double.NaN);
long wallTime = crs.getWallTimeLimit() * 60;
cpuTime.setExact(wallTime);
JSDLUtils.setIndividualCPUTimeRequirements(value, cpuTime);
}
// the total cpu count is total cpus per node
if (crs.getTotalCPUCount() > 0) {
RangeValueType rangeType = new RangeValueType();
rangeType.setLowerBound(Double.NaN);
rangeType.setUpperBound(Double.NaN);
int nodeCount = crs.getNodeCount();
if (nodeCount <= 0) {
nodeCount = 1;
}
rangeType.setExact(crs.getTotalCPUCount() / nodeCount);
JSDLUtils.setIndividualCPUCountRequirements(value, rangeType);
}
String qName = crs.getQueueName();
if (!(qName == null || "".equals(qName))) {
// ignore "default" queue names
if (!(crs.getQueueName().trim().equalsIgnoreCase("default"))) {
ResourceRequestDocument rqDoc = ResourceRequestDocument.Factory.newInstance();
ResourceRequestType rq = rqDoc.addNewResourceRequest();
rq.setName("Queue");
rq.setValue(qName);
ResourcesType res = JSDLUtils.getOrCreateResources(value);
WSUtilities.insertAny(rqDoc, res);
}
}
} catch (NullPointerException npe) {
throw new Exception("No value set for resource requirements.", npe);
}
}
}
Aggregations