Search in sources :

Example 1 with ResourceRequestDocument

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);
        }
    }
}
Also used : ProcessModel(org.apache.airavata.model.process.ProcessModel) ResourcesType(org.ggf.schemas.jsdl.x2005.x11.jsdl.ResourcesType) ResourceRequestDocument(eu.unicore.jsdl.extensions.ResourceRequestDocument) ResourceRequestType(eu.unicore.jsdl.extensions.ResourceRequestType) ComputationalResourceSchedulingModel(org.apache.airavata.model.scheduling.ComputationalResourceSchedulingModel)

Aggregations

ResourceRequestDocument (eu.unicore.jsdl.extensions.ResourceRequestDocument)1 ResourceRequestType (eu.unicore.jsdl.extensions.ResourceRequestType)1 ProcessModel (org.apache.airavata.model.process.ProcessModel)1 ComputationalResourceSchedulingModel (org.apache.airavata.model.scheduling.ComputationalResourceSchedulingModel)1 ResourcesType (org.ggf.schemas.jsdl.x2005.x11.jsdl.ResourcesType)1