You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by la...@apache.org on 2013/02/19 17:02:07 UTC

svn commit: r1447777 - in /airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac: context/JobExecutionContext.java utils/GramRSLGenerator.java

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());