Fixed new workflow interpreter termination issue.
Project: http://git-wip-us.apache.org/repos/asf/airavata/repo Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/97004593 Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/97004593 Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/97004593 Branch: refs/heads/master Commit: 970045939852e228bd7059eac8c7df30acad0c0e Parents: ad8e482 Author: shamrath <[email protected]> Authored: Fri Mar 13 14:40:32 2015 -0400 Committer: shamrath <[email protected]> Committed: Fri Mar 13 14:40:32 2015 -0400 ---------------------------------------------------------------------- .../workflow/engine/SimpleWorkflowInterpreter.java | 15 ++++++++++++++- .../workflow/engine/dag/port/InputPortIml.java | 3 ++- 2 files changed, 16 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/airavata/blob/97004593/modules/simple-workflow/src/main/java/org/apache/airavata/simple/workflow/engine/SimpleWorkflowInterpreter.java ---------------------------------------------------------------------- diff --git a/modules/simple-workflow/src/main/java/org/apache/airavata/simple/workflow/engine/SimpleWorkflowInterpreter.java b/modules/simple-workflow/src/main/java/org/apache/airavata/simple/workflow/engine/SimpleWorkflowInterpreter.java index ee7ff6b..5504f84 100644 --- a/modules/simple-workflow/src/main/java/org/apache/airavata/simple/workflow/engine/SimpleWorkflowInterpreter.java +++ b/modules/simple-workflow/src/main/java/org/apache/airavata/simple/workflow/engine/SimpleWorkflowInterpreter.java @@ -115,6 +115,16 @@ class SimpleWorkflowInterpreter{ log.debug("Parsed the workflow and got the workflow input nodes"); // process workflow input nodes processWorkflowInputNodes(getWorkflowInputNodes()); + if (readyList.isEmpty()) { + StringBuilder sb = new StringBuilder(); + for (WorkflowInputNode workflowInputNode : workflowInputNodes) { + sb.append(", "); + sb.append(workflowInputNode.getInputObject().getName()); + sb.append("="); + sb.append(workflowInputNode.getInputObject().getValue()); + } + throw new AiravataException("No workflow application node in ready state to run with experiment inputs" + sb.toString()); + } processReadyList(); } @@ -125,6 +135,9 @@ class SimpleWorkflowInterpreter{ * @throws AiravataException */ void processReadyList() throws RegistryException, AiravataException { + if (readyList.isEmpty() && processingQueue.isEmpty() && !waitingList.isEmpty()) { + throw new AiravataException("No workflow application node in ready state to run"); + } for (WorkflowNode readyNode : readyList.values()) { if (readyNode instanceof WorkflowOutputNode) { WorkflowOutputNode wfOutputNode = (WorkflowOutputNode) readyNode; @@ -272,7 +285,7 @@ class SimpleWorkflowInterpreter{ } boolean isAllDone() { - return !continueWorkflow || (waitingList.isEmpty() && readyList.isEmpty()); + return !continueWorkflow || (waitingList.isEmpty() && readyList.isEmpty() && processingQueue.isEmpty()); } private void setExperiment(String experimentId) throws RegistryException { http://git-wip-us.apache.org/repos/asf/airavata/blob/97004593/modules/simple-workflow/src/main/java/org/apache/airavata/simple/workflow/engine/dag/port/InputPortIml.java ---------------------------------------------------------------------- diff --git a/modules/simple-workflow/src/main/java/org/apache/airavata/simple/workflow/engine/dag/port/InputPortIml.java b/modules/simple-workflow/src/main/java/org/apache/airavata/simple/workflow/engine/dag/port/InputPortIml.java index c78dc86..076f5b6 100644 --- a/modules/simple-workflow/src/main/java/org/apache/airavata/simple/workflow/engine/dag/port/InputPortIml.java +++ b/modules/simple-workflow/src/main/java/org/apache/airavata/simple/workflow/engine/dag/port/InputPortIml.java @@ -69,7 +69,8 @@ public class InputPortIml implements InPort { @Override public boolean isReady() { - return getInputObject() != null && inputDataObjectType.getValue() != null && !inputDataObjectType.getValue().equals(""); + return getInputObject() != null && (!inputDataObjectType.isIsRequired() || + (inputDataObjectType.getValue() != null && !inputDataObjectType.getValue().equals(""))); } @Override
