You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by sa...@apache.org on 2012/12/20 15:53:00 UTC
svn commit: r1424502 - in /airavata/trunk/modules:
airavata-client/src/main/java/org/apache/airavata/client/api/
airavata-client/src/main/java/org/apache/airavata/client/impl/
distribution/airavata-server/src/main/resources/conf/
Author: samindaw
Date: Thu Dec 20 14:53:00 2012
New Revision: 1424502
URL: http://svn.apache.org/viewvc?rev=1424502&view=rev
Log:
adding execution advance options impl + updating the API + api impl
Added:
airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/impl/ExperimentAdavanceOptionsImpl.java (with props)
Modified:
airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/ExecutionManager.java
airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/ExperimentAdvanceOptions.java
airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/impl/ExecutionManagerImpl.java
airavata/trunk/modules/distribution/airavata-server/src/main/resources/conf/airavata-server.properties
Modified: airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/ExecutionManager.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/ExecutionManager.java?rev=1424502&r1=1424501&r2=1424502&view=diff
==============================================================================
--- airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/ExecutionManager.java (original)
+++ airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/ExecutionManager.java Thu Dec 20 14:53:00 2012
@@ -32,14 +32,25 @@ import org.apache.airavata.ws.monitor.Mo
public interface ExecutionManager {
/**
* Run an experiment containing single workflow
- * @param workflowTemplateId
+ * @param workflow - Workflow template Id or Workflow Graph XML
* @param inputs
* @return
* @throws AiravataAPIInvocationException
*/
- public String runExperiment(String workflowTemplateId,List<WorkflowInput> inputs) throws AiravataAPIInvocationException;
+ public String runExperiment(String workflow,List<WorkflowInput> inputs) throws AiravataAPIInvocationException;
/**
+ * Run an experiment containing single workflow with custom settings for the experiment
+ * @param workflow - Workflow template Id or Workflow Graph XML
+ * @param inputs
+ * @param options
+ * @return
+ * @throws AiravataAPIInvocationException
+ */
+ public String runExperiment(String workflow,List<WorkflowInput> inputs, ExperimentAdvanceOptions options) throws AiravataAPIInvocationException;
+
+
+ /**
* Run an experiment containing single workflow
* @param workflow
* @param inputs
@@ -49,6 +60,7 @@ public interface ExecutionManager {
public String runExperiment(Workflow workflow,List<WorkflowInput> inputs) throws AiravataAPIInvocationException;
/**
+ * @deprecated Use the function <code>runExperiment(String,List<WorkflowInput>,ExperimentAdvanceOptions)</code> instead. <br />
* Run an experiment containing single workflow
* @param workflowTemplateId
* @param inputs
@@ -61,6 +73,7 @@ public interface ExecutionManager {
public String runExperiment(String workflowTemplateId,List<WorkflowInput> inputs, String user, String metadata, String workflowInstanceName)throws AiravataAPIInvocationException;
/**
+ * @deprecated Use the function <code>runExperiment(String,List<WorkflowInput>,ExperimentAdvanceOptions)</code> instead. <br />
* Run an experiment containing single workflow
* @param workflowTemplateId
* @param inputs
@@ -73,6 +86,7 @@ public interface ExecutionManager {
public String runExperiment(String workflowTemplateId,List<WorkflowInput> inputs, String user, String metadata, String workflowInstanceName, String experimentName)throws AiravataAPIInvocationException;
/**
+ * @deprecated Use the function <code>runExperiment(String,List<WorkflowInput>,ExperimentAdvanceOptions)</code> instead. <br />
* Run an experiment containing single workflow
* @param workflowTemplateId
* @param inputs
@@ -86,6 +100,7 @@ public interface ExecutionManager {
public String runExperiment(String workflowTemplateId,List<WorkflowInput> inputs, String user, String metadata, String workflowInstanceName, WorkflowContextHeaderBuilder builder)throws AiravataAPIInvocationException;
/**
+ * @deprecated Use the function <code>runExperiment(String,List<WorkflowInput>,ExperimentAdvanceOptions)</code> instead. <br />
* Run an experiment containing single workflow
* @param workflow
* @param inputs
@@ -114,6 +129,7 @@ public interface ExecutionManager {
public Monitor getExperimentMonitor(String experimentId, MonitorEventListener listener) throws AiravataAPIInvocationException;
/**
+ * @deprecated
* Creates a WorkflowContextHeaderBuilder object that can be used to customize the scheduling of a workflow execution.
* Once configured this object run the workflow using
* <code>runWorkflow(String workflowTemplateId,List<WorkflowInput> inputs, String user, String metadata, String workflowInstanceName, WorkflowContextHeaderBuilder builder)</code>
@@ -123,11 +139,6 @@ public interface ExecutionManager {
public WorkflowContextHeaderBuilder createWorkflowContextHeader() throws AiravataAPIInvocationException;
- /**
- * Creates a DefaultExecutionContext.
- * @return DefaultExecutionContext
- * @throws AiravataAPIInvocationException AiravataAPIInvocationException
- */
-// public DefaultExecutionContext createDefaultExecutionContext() throws AiravataAPIInvocationException;
+ public ExperimentAdvanceOptions createExperimentAdvanceOptions() throws AiravataAPIInvocationException;
}
Modified: airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/ExperimentAdvanceOptions.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/ExperimentAdvanceOptions.java?rev=1424502&r1=1424501&r2=1424502&view=diff
==============================================================================
--- airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/ExperimentAdvanceOptions.java (original)
+++ airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/ExperimentAdvanceOptions.java Thu Dec 20 14:53:00 2012
@@ -100,8 +100,9 @@ public interface ExperimentAdvanceOption
* Users should use the function </i><code><b>setCustomWorkflowContext(...)</b></code><i> to do
* so</i>.
* @return A WorkflowContextHeaderBuilder object.
+ * @throws AiravataAPIInvocationException
*/
- public WorkflowContextHeaderBuilder newCustomWorkflowContext();
+ public WorkflowContextHeaderBuilder newCustomWorkflowContext() throws AiravataAPIInvocationException;
/**
* Create a unique experiment Id.<br />
Modified: airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/impl/ExecutionManagerImpl.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/impl/ExecutionManagerImpl.java?rev=1424502&r1=1424501&r2=1424502&view=diff
==============================================================================
--- airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/impl/ExecutionManagerImpl.java (original)
+++ airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/impl/ExecutionManagerImpl.java Thu Dec 20 14:53:00 2012
@@ -21,18 +21,32 @@
package org.apache.airavata.client.impl;
+import java.rmi.RemoteException;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.List;
+import java.util.UUID;
+
+import javax.xml.stream.XMLStreamException;
+
import org.apache.airavata.client.AiravataClient;
import org.apache.airavata.client.AiravataClientConfiguration;
import org.apache.airavata.client.api.AiravataAPIInvocationException;
import org.apache.airavata.client.api.ExecutionManager;
+import org.apache.airavata.client.api.ExperimentAdvanceOptions;
+import org.apache.airavata.client.stub.interpretor.NameValue;
+import org.apache.airavata.client.stub.interpretor.WorkflowInterpretorStub;
+import org.apache.airavata.common.utils.XMLUtil;
import org.apache.airavata.common.workflow.execution.context.WorkflowContextHeaderBuilder;
+import org.apache.airavata.workflow.model.component.ComponentException;
+import org.apache.airavata.workflow.model.component.ws.WSComponentPort;
+import org.apache.airavata.workflow.model.graph.GraphException;
import org.apache.airavata.workflow.model.wf.Workflow;
import org.apache.airavata.workflow.model.wf.WorkflowInput;
import org.apache.airavata.ws.monitor.Monitor;
import org.apache.airavata.ws.monitor.MonitorEventListener;
-
-import java.util.Calendar;
-import java.util.List;
+import org.apache.axiom.om.impl.llom.util.AXIOMUtil;
+import org.apache.axis2.AxisFault;
public class ExecutionManagerImpl implements ExecutionManager {
private AiravataClient client;
@@ -120,19 +134,6 @@ public class ExecutionManagerImpl implem
}
}
-// @Override
-// public DefaultExecutionContext createDefaultExecutionContext() throws AiravataAPIInvocationException {
-// DefaultExecutionContext ec = new DefaultExecutionContext();
-//// ec.addNotifiable(new LoggingNotification());
-//// try {
-// // TODO : Fix me
-//// ec.setRegistryService(getClient().getRegistry());
-//// } catch (RegistryException e) {
-//// throw new AiravataAPIInvocationException(e);
-//// }
-// return ec;
-// }
-
@Override
public String runExperiment(String workflowName,
List<WorkflowInput> inputs, String user, String metadata,
@@ -145,4 +146,141 @@ public class ExecutionManagerImpl implem
}
}
+ @Override
+ public String runExperiment(String workflow,
+ List<WorkflowInput> inputs, ExperimentAdvanceOptions options)
+ throws AiravataAPIInvocationException {
+ return runWorkflow(workflow, inputs, options);
+ }
+
+ private String runWorkflow(String workflowName, List<WorkflowInput> inputs, ExperimentAdvanceOptions options) throws AiravataAPIInvocationException {
+ Workflow workflowObj = extractWorkflow(workflowName);
+ return runWorkflow(workflowName, workflowObj, inputs, options);
+ }
+
+ private String runWorkflow(String workflowName, Workflow workflowObj, List<WorkflowInput> inputs, ExperimentAdvanceOptions options) throws AiravataAPIInvocationException {
+ try {
+
+ String workflowString = XMLUtil.xmlElementToString(workflowObj.toXML());
+ List<WSComponentPort> ports = getWSComponentPortInputs(workflowObj);
+ for (WorkflowInput input : inputs) {
+ WSComponentPort port = getWSComponentPort(input.getName(),
+ ports);
+ if (port != null) {
+ port.setValue(input.getValue());
+ }
+ }
+ List<NameValue> inputValues = new ArrayList<NameValue>();
+ for (WSComponentPort port : ports) {
+ NameValue nameValue = new NameValue();
+ nameValue.setName(port.getName());
+ if (port.getValue() == null) {
+ nameValue.setValue(port.getDefaultValue());
+ } else {
+ nameValue.setValue(port.getValue().toString());
+ }
+ inputValues.add(nameValue);
+ }
+ String experimentID=options.getCustomExperimentId();
+ String workflowTemplateName = workflowObj.getName();
+ if (experimentID == null || experimentID.isEmpty()) {
+ experimentID = workflowTemplateName + "_" + UUID.randomUUID();
+ }
+ getClient().getProvenanceManager().setWorkflowInstanceTemplateName(experimentID,workflowTemplateName);
+
+ WorkflowContextHeaderBuilder builder=options.getCustomWorkflowContext();
+ if (builder==null){
+ builder=options.newCustomWorkflowContext();
+ }
+
+ //TODO - fix user passing
+ String submissionUser = getClient().getUserManager().getAiravataUser();
+ builder.setUserIdentifier(submissionUser);
+ String executionUser=options.getExperimentExecutionUser();
+ if (executionUser==null){
+ executionUser=submissionUser;
+ }
+ runPreWorkflowExecutionTasks(experimentID, executionUser, options.getExperimentMetadata(), options.getExperimentName());
+ NameValue[] inputVals = inputValues.toArray(new NameValue[] {});
+ launchWorkflow(experimentID, workflowString, inputVals, builder);
+ return experimentID;
+
+ } catch (GraphException e) {
+ throw new AiravataAPIInvocationException(e);
+ } catch (ComponentException e) {
+ throw new AiravataAPIInvocationException(e);
+ } catch (Exception e) {
+ throw new AiravataAPIInvocationException("Error working with Airavata Registry: " + e.getLocalizedMessage(), e);
+ }
+ }
+ private Workflow extractWorkflow(String workflowName) throws AiravataAPIInvocationException {
+ Workflow workflowObj = null;
+ if(getClient().getWorkflowManager().isWorkflowExists(workflowName)) {
+ workflowObj = getClient().getWorkflowManager().getWorkflow(workflowName);
+ }else {
+ try{
+ workflowObj = getClient().getWorkflowManager().getWorkflowFromString(workflowName);
+ }catch (AiravataAPIInvocationException e){
+ getClient().getWorkflowManager().getWorkflow(workflowName);
+ }
+
+ }
+ return workflowObj;
+ }
+
+ private List<WSComponentPort> getWSComponentPortInputs(Workflow workflow)
+ throws GraphException, ComponentException {
+ workflow.createScript();
+ List<WSComponentPort> inputs = workflow.getInputs();
+ return inputs;
+ }
+
+ private WSComponentPort getWSComponentPort(String name,
+ List<WSComponentPort> ports) {
+ for (WSComponentPort port : ports) {
+ if (port.getName().equals(name)) {
+ return port;
+ }
+ }
+ return null;
+ }
+
+ private void launchWorkflow(String experimentId, String workflowGraph, NameValue[] inputs,
+ WorkflowContextHeaderBuilder builder) throws AiravataAPIInvocationException {
+ try {
+ builder.getWorkflowMonitoringContext().setExperimentId(experimentId);
+ WorkflowInterpretorStub stub = new WorkflowInterpretorStub(getClient().getAiravataManager().getWorkflowInterpreterServiceURL().toString());
+ stub._getServiceClient().addHeader(
+ AXIOMUtil.stringToOM(XMLUtil.xmlElementToString(builder
+ .getXml())));
+ stub.launchWorkflow(workflowGraph, experimentId, inputs);
+ } catch (AxisFault e) {
+ e.printStackTrace();
+ } catch (XMLStreamException e) {
+ e.printStackTrace();
+ } catch (RemoteException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private void runPreWorkflowExecutionTasks(String experimentId, String user,
+ String metadata, String experimentName) throws AiravataAPIInvocationException {
+ if (user != null) {
+ getClient().getProvenanceManager().setExperimentUser(experimentId, user);
+ }
+ if (metadata != null) {
+ getClient().getProvenanceManager().setExperimentMetadata(experimentId, metadata);
+ }
+ if (experimentName == null) {
+ experimentName = experimentId;
+ }
+ getClient().getProvenanceManager().setExperimentName(experimentId, experimentName);
+ }
+
+ @Override
+ public ExperimentAdvanceOptions createExperimentAdvanceOptions()
+ throws AiravataAPIInvocationException {
+ return new ExperimentAdavanceOptionsImpl(getClient());
+ }
+
}
Added: airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/impl/ExperimentAdavanceOptionsImpl.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/impl/ExperimentAdavanceOptionsImpl.java?rev=1424502&view=auto
==============================================================================
--- airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/impl/ExperimentAdavanceOptionsImpl.java (added)
+++ airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/impl/ExperimentAdavanceOptionsImpl.java Thu Dec 20 14:53:00 2012
@@ -0,0 +1,106 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.airavata.client.impl;
+
+import java.util.UUID;
+
+import org.apache.airavata.client.api.AiravataAPI;
+import org.apache.airavata.client.api.AiravataAPIInvocationException;
+import org.apache.airavata.client.api.ExperimentAdvanceOptions;
+import org.apache.airavata.common.workflow.execution.context.WorkflowContextHeaderBuilder;
+
+public class ExperimentAdavanceOptionsImpl implements ExperimentAdvanceOptions {
+ private String executionUser;
+ private String metadata;
+ private String experimentName;
+ private String customExperimentId;
+ private WorkflowContextHeaderBuilder workflowContext;
+
+ private AiravataAPI api;
+
+ public ExperimentAdavanceOptionsImpl(AiravataAPI api) {
+ this.api=api;
+ }
+
+ @Override
+ public String getExperimentExecutionUser() {
+ return executionUser;
+ }
+
+ @Override
+ public String getExperimentMetadata() {
+ return metadata;
+ }
+
+ @Override
+ public String getExperimentName() {
+ return experimentName;
+ }
+
+ @Override
+ public String getCustomExperimentId() {
+ return customExperimentId;
+ }
+
+ @Override
+ public WorkflowContextHeaderBuilder getCustomWorkflowContext() {
+ return workflowContext;
+ }
+
+ @Override
+ public void setExperimentExecutioUser(String experimentExecutionUser) {
+ this.executionUser=experimentExecutionUser;
+
+ }
+
+ @Override
+ public void setExperimentCustomMetadata(String experimentMetadata) {
+ this.metadata=experimentMetadata;
+ }
+
+ @Override
+ public void setExperimentName(String experimentName) {
+ this.experimentName=experimentName;
+ }
+
+ @Override
+ public void setCustomExperimentId(String customExperimentId) {
+ this.customExperimentId=customExperimentId;
+ }
+
+ @Override
+ public void setCustomWorkflowContext(
+ WorkflowContextHeaderBuilder workflowContext) {
+ this.workflowContext=workflowContext;
+ }
+
+ @Override
+ public WorkflowContextHeaderBuilder newCustomWorkflowContext() throws AiravataAPIInvocationException {
+ return api.getExecutionManager().createWorkflowContextHeader();
+ }
+
+ @Override
+ public String generatExperimentId() {
+ return UUID.randomUUID().toString();
+ }
+
+}
Propchange: airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/impl/ExperimentAdavanceOptionsImpl.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: airavata/trunk/modules/distribution/airavata-server/src/main/resources/conf/airavata-server.properties
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/distribution/airavata-server/src/main/resources/conf/airavata-server.properties?rev=1424502&r1=1424501&r2=1424502&view=diff
==============================================================================
--- airavata/trunk/modules/distribution/airavata-server/src/main/resources/conf/airavata-server.properties (original)
+++ airavata/trunk/modules/distribution/airavata-server/src/main/resources/conf/airavata-server.properties Thu Dec 20 14:53:00 2012
@@ -67,7 +67,7 @@ system.password=admin
# Airavata Workflow Interpreter Configurations
###########################################################################
-runInThread=false
+runInThread=true
provenance=true
provenanceWriterThreadPoolSize=20
gfac.embedded=false