Used node Id instead of node name to get the default inputs
Project: http://git-wip-us.apache.org/repos/asf/airavata/repo Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/61fa9e5e Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/61fa9e5e Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/61fa9e5e Branch: refs/heads/master Commit: 61fa9e5e3211feb82252c973875590a463846885 Parents: b6ca98a Author: shamrath <[email protected]> Authored: Thu Oct 9 13:26:55 2014 -0400 Committer: shamrath <[email protected]> Committed: Thu Oct 9 13:26:55 2014 -0400 ---------------------------------------------------------------------- .../engine/interpretor/WorkflowInterpreter.java | 42 ++++++++++---------- .../workflow/engine/util/InterpreterUtil.java | 10 +++++ 2 files changed, 32 insertions(+), 20 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/airavata/blob/61fa9e5e/modules/workflow-model/workflow-engine/src/main/java/org/apache/airavata/workflow/engine/interpretor/WorkflowInterpreter.java ---------------------------------------------------------------------- diff --git a/modules/workflow-model/workflow-engine/src/main/java/org/apache/airavata/workflow/engine/interpretor/WorkflowInterpreter.java b/modules/workflow-model/workflow-engine/src/main/java/org/apache/airavata/workflow/engine/interpretor/WorkflowInterpreter.java index f9e26a6..17b8fe0 100644 --- a/modules/workflow-model/workflow-engine/src/main/java/org/apache/airavata/workflow/engine/interpretor/WorkflowInterpreter.java +++ b/modules/workflow-model/workflow-engine/src/main/java/org/apache/airavata/workflow/engine/interpretor/WorkflowInterpreter.java @@ -211,8 +211,8 @@ public class WorkflowInterpreter implements AbstractActivityListener{ inputDataStrings.put(dataObjectType.getKey(), dataObjectType.getValue()); } for (Node node : inputNodes) { - if (inputDataStrings.containsKey(node.getName())){ - ((InputNode)node).setDefaultValue(inputDataStrings.get(node.getName())); + if (inputDataStrings.containsKey(node.getID())){ + ((InputNode)node).setDefaultValue(inputDataStrings.get(node.getID())); } else { log.warn("value for node not found "+node.getName()); } @@ -222,12 +222,12 @@ public class WorkflowInterpreter implements AbstractActivityListener{ invokedNode.add(node); node.setState(NodeExecutionState.FINISHED); notifyViaInteractor(WorkflowExecutionMessage.NODE_STATE_CHANGED, null); - String portName = ((InputNode) node).getName(); + String portId= ((InputNode) node).getID(); Object portValue = ((InputNode) node).getDefaultValue(); //Saving workflow input Node data before running the workflow WorkflowNodeDetails workflowNode = createWorkflowNodeDetails(node); DataObjectType elem = new DataObjectType(); - elem.setKey(portName); + elem.setKey(portId); elem.setValue(portValue==null?null:portValue.toString()); workflowNode.addToNodeInputs(elem); getRegistry().update(RegistryModelType.WORKFLOW_NODE_DETAIL, workflowNode, workflowNode.getNodeInstanceId()); @@ -235,7 +235,6 @@ public class WorkflowInterpreter implements AbstractActivityListener{ } while (this.getWorkflow().getExecutionState() != WorkflowExecutionState.STOPPED) { - ArrayList<Node> readyNodes = this.getReadyNodesDynamically(); ArrayList<Thread> threadList = new ArrayList<Thread>(); if (getRemainNodesDynamically() == 0) { notifyViaInteractor(WorkflowExecutionMessage.EXECUTION_STATE_CHANGED, WorkflowExecutionState.STOPPED); @@ -256,6 +255,7 @@ public class WorkflowInterpreter implements AbstractActivityListener{ log.info("Workflow execution "+experiment.getExperimentID()+" is resumed."); } // get task list and execute them + ArrayList<Node> readyNodes = this.getReadyNodesDynamically(); for (final Node node : readyNodes) { if (node.isBreak()) { this.notifyPause(); @@ -1228,8 +1228,10 @@ public class WorkflowInterpreter implements AbstractActivityListener{ private ArrayList<Node> getReadyNodesDynamically() { ArrayList<Node> list = new ArrayList<Node>(); ArrayList<Node> waiting = InterpreterUtil.getWaitingNodesDynamically(this.getGraph()); - ArrayList<Node> finishedNodes = InterpreterUtil.getFinishedNodesDynamically(this.getGraph()); - for (Node node : waiting) { +// ArrayList<Node> finishedNodes = InterpreterUtil.getFinishedNodesDynamically(this.getGraph()); + // This is to support repeat the same application in the workflow. + List<String> finishedNodeIds = InterpreterUtil.getFinishedNodesIds(this.getGraph()); + for (Node node : waiting) { Component component = node.getComponent(); if (component instanceof WSComponent || component instanceof DynamicComponent @@ -1246,14 +1248,14 @@ public class WorkflowInterpreter implements AbstractActivityListener{ boolean controlDone = true; if (control != null) { for (EdgeImpl edge : control.getEdges()) { - controlDone = controlDone && (finishedNodes.contains(edge.getFromPort().getNode()) - // amazon component use condition met to check - // whether the control port is done - // FIXME I changed the "||" to a "&&" in the following since thats the only this - // that makes sense and if anyone found a scenario it should be otherwise pls fix - || ((ControlPort) edge.getFromPort()).isConditionMet()); - } - } + controlDone = controlDone && (finishedNodeIds.contains(edge.getFromPort().getNode().getID()) + // amazon component use condition met to check + // whether the control port is done + // FIXME I changed the "||" to a "&&" in the following since thats the only this + // that makes sense and if anyone found a scenario it should be otherwise pls fix + || ((ControlPort) edge.getFromPort()).isConditionMet()); + } + } /* * Check for input ports @@ -1261,7 +1263,7 @@ public class WorkflowInterpreter implements AbstractActivityListener{ List<DataPort> inputPorts = node.getInputPorts(); boolean inputsDone = true; for (DataPort dataPort : inputPorts) { - inputsDone = inputsDone && finishedNodes.contains(dataPort.getFromNode()); + inputsDone = inputsDone && finishedNodeIds.contains(dataPort.getFromNode().getID()); } if (inputsDone && controlDone) { list.add(node); @@ -1275,7 +1277,7 @@ public class WorkflowInterpreter implements AbstractActivityListener{ int actualInput = 0; List<DataPort> inputPorts = node.getInputPorts(); for (DataPort dataPort : inputPorts) { - if (finishedNodes.contains(dataPort.getFromNode())) + if (finishedNodeIds.contains(dataPort.getFromNode().getID())) actualInput++; } @@ -1290,7 +1292,7 @@ public class WorkflowInterpreter implements AbstractActivityListener{ boolean controlDone = true; if (control != null) { for (EdgeImpl edge : control.getEdges()) { - controlDone = controlDone && finishedNodes.contains(edge.getFromPort().getFromNode()); + controlDone = controlDone && finishedNodeIds.contains(edge.getFromPort().getFromNode().getID()); } } @@ -1300,7 +1302,7 @@ public class WorkflowInterpreter implements AbstractActivityListener{ List<DataPort> inputPorts = node.getInputPorts(); boolean inputsDone = true; for (DataPort dataPort : inputPorts) { - inputsDone = inputsDone && finishedNodes.contains(dataPort.getFromNode()); + inputsDone = inputsDone && finishedNodeIds.contains(dataPort.getFromNode().getID()); } if (inputsDone && controlDone) { list.add(node); @@ -1318,7 +1320,7 @@ public class WorkflowInterpreter implements AbstractActivityListener{ boolean controlDone = true; if (control != null) { for (EdgeImpl edge : control.getEdges()) { - controlDone = controlDone && finishedNodes.contains(edge.getFromPort().getFromNode()); + controlDone = controlDone && finishedNodeIds.contains(edge.getFromPort().getFromNode().getID()); } } http://git-wip-us.apache.org/repos/asf/airavata/blob/61fa9e5e/modules/workflow-model/workflow-engine/src/main/java/org/apache/airavata/workflow/engine/util/InterpreterUtil.java ---------------------------------------------------------------------- diff --git a/modules/workflow-model/workflow-engine/src/main/java/org/apache/airavata/workflow/engine/util/InterpreterUtil.java b/modules/workflow-model/workflow-engine/src/main/java/org/apache/airavata/workflow/engine/util/InterpreterUtil.java index 38c4f6a..6d56c44 100644 --- a/modules/workflow-model/workflow-engine/src/main/java/org/apache/airavata/workflow/engine/util/InterpreterUtil.java +++ b/modules/workflow-model/workflow-engine/src/main/java/org/apache/airavata/workflow/engine/util/InterpreterUtil.java @@ -263,6 +263,16 @@ public class InterpreterUtil { return getNodesWithBodyColor(NodeExecutionState.FINISHED, graph); } + public static List<String> getFinishedNodesIds(WSGraph graph) { + List<String> finishedNodeIds = new ArrayList<String>(); + for (Node node : graph.getNodes()) { + if (node.getState() == NodeExecutionState.FINISHED) { + finishedNodeIds.add(node.getID()); + } + } + return finishedNodeIds; + } + public static ArrayList<Node> getFailedNodesDynamically(WSGraph graph) { return getNodesWithBodyColor(NodeExecutionState.FAILED, graph); }
