Author: lahiru Date: Tue Feb 19 16:02:07 2013 New Revision: 1447777 URL: http://svn.apache.org/r1447777 Log: adding workflow context header support.
Modified: airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/context/JobExecutionContext.java airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/utils/GramRSLGenerator.java Modified: airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/context/JobExecutionContext.java URL: http://svn.apache.org/viewvc/airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/context/JobExecutionContext.java?rev=1447777&r1=1447776&r2=1447777&view=diff ============================================================================== --- airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/context/JobExecutionContext.java (original) +++ airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/context/JobExecutionContext.java Tue Feb 19 16:02:07 2013 @@ -24,6 +24,7 @@ package org.apache.airavata.gfac.context import org.apache.airavata.gfac.GFacConfiguration; import org.apache.airavata.gfac.notification.GFacNotifier; import org.apache.airavata.gfac.provider.GFacProvider; +import org.apache.airavata.schemas.wec.ContextHeaderDocument; import java.util.ArrayList; import java.util.List; @@ -41,6 +42,9 @@ public class JobExecutionContext extends private GFacNotifier notifier; private SecurityContext securityContext; + + private ContextHeaderDocument.ContextHeader contextHeader; + // Keep track of the current path of the message. Before hitting provider its in-path. // After provider its out-path. private boolean inPath = true; @@ -165,4 +169,12 @@ public class JobExecutionContext extends public void setSecurityContext(SecurityContext securityContext) { this.securityContext = securityContext; } + + public ContextHeaderDocument.ContextHeader getContextHeader() { + return contextHeader; + } + + public void setContextHeader(ContextHeaderDocument.ContextHeader contextHeader) { + this.contextHeader = contextHeader; + } } Modified: airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/utils/GramRSLGenerator.java URL: http://svn.apache.org/viewvc/airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/utils/GramRSLGenerator.java?rev=1447777&r1=1447776&r2=1447777&view=diff ============================================================================== --- airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/utils/GramRSLGenerator.java (original) +++ airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/utils/GramRSLGenerator.java Tue Feb 19 16:02:07 2013 @@ -26,9 +26,12 @@ import org.apache.airavata.gfac.Constant import org.apache.airavata.gfac.ToolsException; import org.apache.airavata.gfac.context.JobExecutionContext; import org.apache.airavata.gfac.context.MessageContext; +import org.apache.airavata.gfac.provider.GFacProviderException; import org.apache.airavata.schemas.gfac.HpcApplicationDeploymentType; import org.apache.airavata.schemas.gfac.NameValuePairType; +import org.apache.airavata.schemas.gfac.QueueType; import org.apache.airavata.schemas.gfac.URIArrayType; +import org.apache.airavata.schemas.wec.ContextHeaderDocument; import org.globus.gram.GramAttributes; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -108,49 +111,51 @@ public class GramRSLGenerator { } // Using the workflowContext Header values if user provided them in the request and overwrite the default values in DD //todo finish the scheduling based on workflow execution context -// ContextHeaderDocument.ContextHeader currentContextHeader = WorkflowContextHeaderBuilder.getCurrentContextHeader(); -// if (currentContextHeader.getWorkflowSchedulingContext() != null) { -// if (currentContextHeader != null && -// currentContextHeader.getWorkflowSchedulingContext().getApplicationSchedulingContextArray() != null && -// currentContextHeader.getWorkflowSchedulingContext().getApplicationSchedulingContextArray().length > 0) { -// try { -// int cpuCount = currentContextHeader.getWorkflowSchedulingContext().getApplicationSchedulingContextArray()[0].getCpuCount(); -// if(cpuCount>0){ -// app.setCpuCount(cpuCount); -// } -// } catch (NullPointerException e) { -// log.debug("No Value sent in WorkflowContextHeader for CPU Count, value in the Deployment Descriptor will be used"); -// context.getNotifier().publish(new ExecutionFailEvent(context, e, "No Value sent in WorkflowContextHeader for Node Count, value in the Deployment Descriptor will be used"); -// } -// try { -// int nodeCount = currentContextHeader.getWorkflowSchedulingContext().getApplicationSchedulingContextArray()[0].getNodeCount(); -// if(nodeCount>0){ -// app.setNodeCount(nodeCount); -// } -// } catch (NullPointerException e) { -// log.debug("No Value sent in WorkflowContextHeader for Node Count, value in the Deployment Descriptor will be used"); -// context.getExecutionContext().getNotifier().executionFail(context, e, "No Value sent in WorkflowContextHeader for Node Count, value in the Deployment Descriptor will be used"); -// } -// try { -// String queueName = currentContextHeader.getWorkflowSchedulingContext().getApplicationSchedulingContextArray()[0].getQueueName(); -// if (queueName != null) { -// if(app.getQueue() == null){ -// QueueType queueType = app.addNewQueue(); -// queueType.setQueueName(queueName); -// }else{ -// app.getQueue().setQueueName(queueName); -// } -// } -// } catch (NullPointerException e) { -// log.debug("No Value sent in WorkflowContextHeader for Node Count, value in the Deployment Descriptor will be used"); -// context.getExecutionContext().getNotifier().executionFail(context, e, "No Value sent in WorkflowContextHeader for Node Count, value in the Deployment Descriptor will be used"); -// } -// } -// } -// if(currentContextHeader.getWorkflowOutputDataHandling() != null){ -// if(currentContextHeader.getWorkflowOutputDataHandling().getApplicationOutputDataHandlingArray().length != 0) -// app.setOutputDataDirectory(currentContextHeader.getWorkflowOutputDataHandling().getApplicationOutputDataHandlingArray()[0].getOutputDataDirectory()); -// } + ContextHeaderDocument.ContextHeader currentContextHeader = context.getContextHeader(); + if(currentContextHeader != null){ + if (currentContextHeader.getWorkflowSchedulingContext() != null) { + if (currentContextHeader != null && + currentContextHeader.getWorkflowSchedulingContext().getApplicationSchedulingContextArray() != null && + currentContextHeader.getWorkflowSchedulingContext().getApplicationSchedulingContextArray().length > 0) { + try { + int cpuCount = currentContextHeader.getWorkflowSchedulingContext().getApplicationSchedulingContextArray()[0].getCpuCount(); + if(cpuCount>0){ + app.setCpuCount(cpuCount); + } + } catch (NullPointerException e) { + log.debug("No Value sent in WorkflowContextHeader for CPU Count, value in the Deployment Descriptor will be used"); + new GFacProviderException("No Value sent in WorkflowContextHeader for Node Count, value in the Deployment Descriptor will be used",e); + } + try { + int nodeCount = currentContextHeader.getWorkflowSchedulingContext().getApplicationSchedulingContextArray()[0].getNodeCount(); + if(nodeCount>0){ + app.setNodeCount(nodeCount); + } + } catch (NullPointerException e) { + log.debug("No Value sent in WorkflowContextHeader for Node Count, value in the Deployment Descriptor will be used"); + new GFacProviderException("No Value sent in WorkflowContextHeader for Node Count, value in the Deployment Descriptor will be used",e); + } + try { + String queueName = currentContextHeader.getWorkflowSchedulingContext().getApplicationSchedulingContextArray()[0].getQueueName(); + if (queueName != null) { + if(app.getQueue() == null){ + QueueType queueType = app.addNewQueue(); + queueType.setQueueName(queueName); + }else{ + app.getQueue().setQueueName(queueName); + } + } + } catch (NullPointerException e) { + log.debug("No Value sent in WorkflowContextHeader for Node Count, value in the Deployment Descriptor will be used"); + new GFacProviderException("No Value sent in WorkflowContextHeader for Node Count, value in the Deployment Descriptor will be used",e); + } + } + } + if(currentContextHeader.getWorkflowOutputDataHandling() != null){ + if(currentContextHeader.getWorkflowOutputDataHandling().getApplicationOutputDataHandlingArray().length != 0) + app.setOutputDataDirectory(currentContextHeader.getWorkflowOutputDataHandling().getApplicationOutputDataHandlingArray()[0].getOutputDataDirectory()); + } + } if (app.getNodeCount() > 0) { jobAttr.set("hostCount", String.valueOf(app.getNodeCount())); log.debug("Setting number of Nodes to " + app.getCpuCount());