Fixed workflow interpreter to work with multiple app
Project: http://git-wip-us.apache.org/repos/asf/airavata/repo Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/a9a370d1 Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/a9a370d1 Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/a9a370d1 Branch: refs/heads/master Commit: a9a370d19b02499dc371baa5e95eb34a42fbb4c6 Parents: 896d345 Author: shamrath <[email protected]> Authored: Wed Oct 8 12:01:20 2014 -0400 Committer: shamrath <[email protected]> Committed: Wed Oct 8 12:01:20 2014 -0400 ---------------------------------------------------------------------- .../airavata/gfac/local/utils/InputUtils.java | 7 +++ .../engine/interpretor/WorkflowInterpreter.java | 27 ++++++----- .../WorkflowInterpreterLaunchWindow.java | 48 +++++++++++--------- .../airavata/xbaya/ui/menues/RunMenuItem.java | 14 +++--- 4 files changed, 54 insertions(+), 42 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/airavata/blob/a9a370d1/modules/gfac/gfac-local/src/main/java/org/apache/airavata/gfac/local/utils/InputUtils.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-local/src/main/java/org/apache/airavata/gfac/local/utils/InputUtils.java b/modules/gfac/gfac-local/src/main/java/org/apache/airavata/gfac/local/utils/InputUtils.java index ba65753..98671fd 100644 --- a/modules/gfac/gfac-local/src/main/java/org/apache/airavata/gfac/local/utils/InputUtils.java +++ b/modules/gfac/gfac-local/src/main/java/org/apache/airavata/gfac/local/utils/InputUtils.java @@ -20,9 +20,15 @@ */ package org.apache.airavata.gfac.local.utils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.util.List; public class InputUtils { + + private static final Logger logger = LoggerFactory.getLogger(InputUtils.class); + private static final String SPACE = " "; private InputUtils() { @@ -31,6 +37,7 @@ public class InputUtils { public static String buildCommand(List<String> cmdList) { StringBuffer buff = new StringBuffer(); for (String string : cmdList) { + logger.debug("Build Command --> " + string); buff.append(string); buff.append(SPACE); } http://git-wip-us.apache.org/repos/asf/airavata/blob/a9a370d1/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 dd9c917..f9e26a6 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 @@ -40,7 +40,6 @@ import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathFactory; -import org.apache.airavata.client.api.exception.AiravataAPIInvocationException; import org.apache.airavata.common.utils.StringUtil; import org.apache.airavata.common.utils.XMLUtil; import org.apache.airavata.common.utils.listener.AbstractActivityListener; @@ -147,11 +146,13 @@ public class WorkflowInterpreter implements AbstractActivityListener{ private String credentialStoreToken; /** - * + * @param experiment + * @param credentialStoreToken * @param config - * @param interactor + * @param orchestratorClient */ - public WorkflowInterpreter(Experiment experiment, String credentialStoreToken, WorkflowInterpreterConfiguration config, OrchestratorService.Client orchestratorClient) { + public WorkflowInterpreter(Experiment experiment, String credentialStoreToken, + WorkflowInterpreterConfiguration config, OrchestratorService.Client orchestratorClient) { this.setConfig(config); this.setExperiment(experiment); this.setCredentialStoreToken(credentialStoreToken); @@ -204,9 +205,9 @@ public class WorkflowInterpreter implements AbstractActivityListener{ try { this.getWorkflow().setExecutionState(WorkflowExecutionState.RUNNING); ArrayList<Node> inputNodes = this.getInputNodesDynamically(); - List<DataObjectType> experimentOutputs = experiment.getExperimentInputs(); + List<DataObjectType> experimentInputs = experiment.getExperimentInputs(); Map<String,String> inputDataStrings=new HashMap<String, String>(); - for (DataObjectType dataObjectType : experimentOutputs) { + for (DataObjectType dataObjectType : experimentInputs) { inputDataStrings.put(dataObjectType.getKey(), dataObjectType.getValue()); } for (Node node : inputNodes) { @@ -232,7 +233,7 @@ public class WorkflowInterpreter implements AbstractActivityListener{ getRegistry().update(RegistryModelType.WORKFLOW_NODE_DETAIL, workflowNode, workflowNode.getNodeInstanceId()); updateWorkflowNodeStatus(workflowNode, WorkflowNodeState.COMPLETED); } - + while (this.getWorkflow().getExecutionState() != WorkflowExecutionState.STOPPED) { ArrayList<Node> readyNodes = this.getReadyNodesDynamically(); ArrayList<Thread> threadList = new ArrayList<Thread>(); @@ -364,9 +365,7 @@ public class WorkflowInterpreter implements AbstractActivityListener{ // we reset all the state cleanup(); raiseException(e); - } catch (AiravataAPIInvocationException e) { - e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. - }finally{ + } finally{ cleanup(); this.getWorkflow().setExecutionState(WorkflowExecutionState.NONE); } @@ -417,7 +416,7 @@ public class WorkflowInterpreter implements AbstractActivityListener{ notifyViaInteractor(WorkflowExecutionMessage.EXECUTION_CLEANUP, null); } - private void sendOutputsDynamically() throws WorkflowException, AiravataAPIInvocationException, RegistryException { + private void sendOutputsDynamically() throws WorkflowException, RegistryException { ArrayList<Node> outputNodes = getReadyOutputNodesDynamically(); if (outputNodes.size() != 0) { LinkedList<Object> outputValues = new LinkedList<Object>(); @@ -633,6 +632,7 @@ public class WorkflowInterpreter implements AbstractActivityListener{ protected void handleWSComponent(Node node) throws WorkflowException, TException, RegistryException { TaskDetails taskDetails = createTaskDetails(node); + log.debug("Launching task , node = " + node.getName() + " node id = " + node.getID()); getOrchestratorClient().launchTask(taskDetails.getTaskID(), getCredentialStoreToken()); } @@ -998,7 +998,10 @@ public class WorkflowInterpreter implements AbstractActivityListener{ portInputValue = (String) ((InputNode) fromNode).getDefaultValue(); } else if (fromNode instanceof WSNode){ Map<String, String> outputData = nodeOutputData.get(fromNode); - portInputValue = outputData.get(dataPort.getName()); + portInputValue = outputData.get(dataPort.getName()); + if (portInputValue == null) { + portInputValue = outputData.get(dataPort.getEdge(0).getFromPort().getName()); + } } DataObjectType elem = new DataObjectType(); elem.setKey(dataPort.getName()); http://git-wip-us.apache.org/repos/asf/airavata/blob/a9a370d1/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/experiment/WorkflowInterpreterLaunchWindow.java ---------------------------------------------------------------------- diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/experiment/WorkflowInterpreterLaunchWindow.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/experiment/WorkflowInterpreterLaunchWindow.java index fd6cb46..ac2b197 100644 --- a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/experiment/WorkflowInterpreterLaunchWindow.java +++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/experiment/WorkflowInterpreterLaunchWindow.java @@ -21,23 +21,6 @@ package org.apache.airavata.xbaya.ui.experiment; -import java.awt.event.ActionEvent; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.UUID; -//import org.apache.airavata.registry.api.AiravataRegistry2; - - -import javax.swing.AbstractAction; -import javax.swing.BorderFactory; -import javax.swing.JButton; -import javax.swing.JLabel; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.border.EtchedBorder; -import javax.xml.namespace.QName; - import org.apache.airavata.api.Airavata.Client; import org.apache.airavata.common.utils.ServerSettings; import org.apache.airavata.common.utils.XMLUtil; @@ -45,16 +28,15 @@ import org.apache.airavata.model.error.AiravataClientConnectException; import org.apache.airavata.model.error.AiravataClientException; import org.apache.airavata.model.error.AiravataSystemException; import org.apache.airavata.model.error.InvalidRequestException; +import org.apache.airavata.model.util.ExperimentModelUtil; import org.apache.airavata.model.workspace.Project; +import org.apache.airavata.model.workspace.experiment.ComputationalResourceScheduling; import org.apache.airavata.model.workspace.experiment.DataObjectType; import org.apache.airavata.model.workspace.experiment.DataType; import org.apache.airavata.model.workspace.experiment.Experiment; +import org.apache.airavata.model.workspace.experiment.UserConfigurationData; import org.apache.airavata.orchestrator.client.OrchestratorClientFactory; import org.apache.airavata.orchestrator.cpi.OrchestratorService; -import org.apache.airavata.registry.cpi.RegistryException; -import org.apache.airavata.workflow.engine.interpretor.WorkflowInterpreter; -import org.apache.airavata.workflow.engine.interpretor.WorkflowInterpreterConfiguration; -import org.apache.airavata.workflow.model.exceptions.WorkflowException; import org.apache.airavata.workflow.model.graph.system.InputNode; import org.apache.airavata.workflow.model.graph.util.GraphUtil; import org.apache.airavata.workflow.model.wf.Workflow; @@ -73,6 +55,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.xmlpull.infoset.XmlElement; +import javax.swing.*; +import javax.swing.border.EtchedBorder; +import javax.xml.namespace.QName; +import java.awt.event.ActionEvent; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.UUID; + +//import org.apache.airavata.registry.api.AiravataRegistry2; + public class WorkflowInterpreterLaunchWindow { private static final Logger logger = LoggerFactory.getLogger(WorkflowInterpreterLaunchWindow.class); @@ -318,7 +311,18 @@ public class WorkflowInterpreterLaunchWindow { elem.setValue(value); experiment.addToExperimentInputs(elem ); } - + + // Add scheduling configurations + String computeResouceId = airavataClient.getAllComputeResourceNames().get("localhost"); + + UserConfigurationData userConfigurationData = new UserConfigurationData(); + ComputationalResourceScheduling computationalResourceScheduling = ExperimentModelUtil.createComputationResourceScheduling( + computeResouceId, 1, 1, 1, "normal", 1, 0, 1, "test"); + userConfigurationData.setAiravataAutoSchedule(false); + userConfigurationData.setOverrideManualScheduledParams(false); + userConfigurationData.setComputationalResourceScheduling(computationalResourceScheduling); + experiment.setUserConfigurationData(userConfigurationData); + experiment.setExperimentID(airavataClient.createExperiment(experiment)); airavataClient.launchExperiment(experiment.getExperimentID(), "testToken"); // final String workflowInterpreterUrl = this.workflowInterpreterTextField.getText(); http://git-wip-us.apache.org/repos/asf/airavata/blob/a9a370d1/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/menues/RunMenuItem.java ---------------------------------------------------------------------- diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/menues/RunMenuItem.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/menues/RunMenuItem.java index 6cfde9f..fae974b 100644 --- a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/menues/RunMenuItem.java +++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/menues/RunMenuItem.java @@ -45,8 +45,7 @@ import org.apache.airavata.xbaya.XBayaConfiguration.XBayaExecutionMode; import org.apache.airavata.xbaya.XBayaEngine; import org.apache.airavata.xbaya.core.ide.XBayaExecutionModeListener; import org.apache.airavata.xbaya.ui.dialogs.monitor.MonitorConfigurationWindow; -import org.apache.airavata.xbaya.ui.experiment.LaunchApplicationWindow; -//import org.apache.airavata.xbaya.ui.experiment.WorkflowInterpreterLaunchWindow; +import org.apache.airavata.xbaya.ui.experiment.WorkflowInterpreterLaunchWindow; import org.apache.airavata.xbaya.ui.monitor.MonitorStarter; import org.apache.airavata.xbaya.ui.utils.ErrorMessages; import org.apache.airavata.xbaya.ui.widgets.ToolbarButton; @@ -268,8 +267,7 @@ public class RunMenuItem implements EventListener, XBayaExecutionModeListener{ private void createLaunchXBayaInterpreterItem() { this.launchXBayaInterpreterItem = new JMenuItem("Run on Interpreter Server...", MenuIcons.RUN_ICON); AbstractAction action = new AbstractAction() { - //private WorkflowInterpreterLaunchWindow window; - private LaunchApplicationWindow window; + private WorkflowInterpreterLaunchWindow window; public void actionPerformed(ActionEvent e) { if(!engine.getMonitor().hasCurrentExecutionTerminatedNotificationReceived() && engine.getMonitor().isMonitoring()){ if (JOptionPane.showConfirmDialog(null, @@ -278,10 +276,10 @@ public class RunMenuItem implements EventListener, XBayaExecutionModeListener{ return; } } -// if (this.window == null) { - //this.window = new WorkflowInterpreterLaunchWindow(engine); - this.window = new LaunchApplicationWindow(engine); -// } + + if (this.window == null) { + this.window = new WorkflowInterpreterLaunchWindow(engine); + } try { this.window.show(); } catch (Exception e1) {
