Repository: airavata Updated Branches: refs/heads/master 7a8838fdb -> 0a46c0cba
Fixed output data reading. AIRAVATA-1077 Project: http://git-wip-us.apache.org/repos/asf/airavata/repo Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/96431980 Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/96431980 Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/96431980 Branch: refs/heads/master Commit: 964319800e6f5b7570d5c8be916976bb76954c44 Parents: 0b6de06 Author: raminder <[email protected]> Authored: Wed Mar 12 17:36:03 2014 -0400 Committer: raminder <[email protected]> Committed: Wed Mar 12 17:36:03 2014 -0400 ---------------------------------------------------------------------- .../airavata/gfac/handler/SCPOutputHandler.java | 24 +++++++++++++- .../apache/airavata/gfac/utils/GFacUtils.java | 2 ++ .../apache/airavata/gsi/ssh/api/Cluster.java | 9 +++++ .../gsi/ssh/impl/GSISSHAbstractCluster.java | 14 ++++++++ .../apache/airavata/gsi/ssh/util/SSHUtils.java | 35 ++++++++++++++++++++ 5 files changed, 83 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/airavata/blob/96431980/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/handler/SCPOutputHandler.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/handler/SCPOutputHandler.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/handler/SCPOutputHandler.java index 07b869c..dc267be 100644 --- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/handler/SCPOutputHandler.java +++ b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/handler/SCPOutputHandler.java @@ -22,8 +22,11 @@ package org.apache.airavata.gfac.handler; import java.io.File; import java.io.IOException; +import java.net.URI; import java.util.HashMap; +import java.util.List; import java.util.Map; +import java.util.Set; import net.schmizz.sshj.connection.ConnectionException; import net.schmizz.sshj.transport.TransportException; @@ -37,10 +40,12 @@ import org.apache.airavata.gfac.provider.GFacProviderException; import org.apache.airavata.gfac.utils.GFacUtils; import org.apache.airavata.gfac.utils.OutputUtils; import org.apache.airavata.gsi.ssh.api.Cluster; +import org.apache.airavata.gsi.ssh.util.SSHUtils; import org.apache.airavata.model.workspace.experiment.*; import org.apache.airavata.persistance.registry.jpa.model.DataTransferDetail; import org.apache.airavata.registry.cpi.ChildDataType; import org.apache.airavata.schemas.gfac.ApplicationDeploymentDescriptionType; +import org.apache.airavata.schemas.gfac.URIParameterType; import org.apache.xmlbeans.XmlException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -107,7 +112,24 @@ public class SCPOutputHandler extends AbstractHandler{ Map<String, ActualParameter> stringMap = new HashMap<String, ActualParameter>(); Map<String, Object> output = jobExecutionContext.getOutMessageContext().getParameters(); - stringMap = OutputUtils.fillOutputFromStdout(output, stdOutStr, stdErrStr); + Set<String> keys = output.keySet(); + for (String paramName : keys) { + ActualParameter actualParameter = (ActualParameter) output.get(paramName); + if ("URI".equals(actualParameter.getType().getType().toString())) { + + List<String> outputList = cluster.listDirectory(app.getOutputDataDirectory()); + if (outputList.size() == 0 || outputList.get(0).isEmpty()) { + stringMap = OutputUtils.fillOutputFromStdout(output, stdOutStr, stdErrStr); + } else { + String valueList = outputList.get(0); + ((URIParameterType) actualParameter.getType()).setValue(valueList); + stringMap = new HashMap<String, ActualParameter>(); + stringMap.put(paramName, actualParameter); + } + }else{ + stringMap = OutputUtils.fillOutputFromStdout(output, stdOutStr, stdErrStr); + } + } if (stringMap == null || stringMap.isEmpty()) { throw new GFacHandlerException( "Empty Output returned from the Application, Double check the application" http://git-wip-us.apache.org/repos/asf/airavata/blob/96431980/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/utils/GFacUtils.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/utils/GFacUtils.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/utils/GFacUtils.java index 0ea841f..9f1e32d 100644 --- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/utils/GFacUtils.java +++ b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/utils/GFacUtils.java @@ -38,6 +38,7 @@ import org.apache.airavata.commons.gfac.type.ActualParameter; import org.apache.airavata.gfac.Constants; import org.apache.airavata.gfac.GFacException; import org.apache.airavata.gfac.context.JobExecutionContext; +import org.apache.airavata.model.workspace.experiment.ActionableGroup; import org.apache.airavata.model.workspace.experiment.CorrectiveAction; import org.apache.airavata.model.workspace.experiment.DataObjectType; import org.apache.airavata.model.workspace.experiment.ErrorCategory; @@ -734,6 +735,7 @@ public class GFacUtils { ErrorDetails details = new ErrorDetails(); details.setActualErrorMessage(errorMessage); details.setCorrectiveAction(action); + details.setActionableGroup(ActionableGroup.GATEWAYS_ADMINS); details.setCreationTime(Calendar.getInstance().getTimeInMillis()); details.setErrorCategory(errorCatogory); registry.add(ChildDataType.ERROR_DETAIL, details, id); http://git-wip-us.apache.org/repos/asf/airavata/blob/96431980/tools/gsissh/src/main/java/org/apache/airavata/gsi/ssh/api/Cluster.java ---------------------------------------------------------------------- diff --git a/tools/gsissh/src/main/java/org/apache/airavata/gsi/ssh/api/Cluster.java b/tools/gsissh/src/main/java/org/apache/airavata/gsi/ssh/api/Cluster.java index ee5dcf7..f8cd543 100644 --- a/tools/gsissh/src/main/java/org/apache/airavata/gsi/ssh/api/Cluster.java +++ b/tools/gsissh/src/main/java/org/apache/airavata/gsi/ssh/api/Cluster.java @@ -20,6 +20,8 @@ */ package org.apache.airavata.gsi.ssh.api; +import java.util.List; + import org.apache.airavata.gsi.ssh.api.job.JobDescriptor; import org.apache.airavata.gsi.ssh.impl.JobStatus; @@ -100,6 +102,13 @@ public interface Cluster { * @throws SSHApiException throws exception during error */ public JobStatus getJobStatus(String jobID) throws SSHApiException; + + /** + * This will list directories in computing resources + * @param directoryPath the full qualified path for the directory user wants to create + * @throws SSHApiException throws during error + */ + public List<String> listDirectory(String directoryPath) throws SSHApiException; /** http://git-wip-us.apache.org/repos/asf/airavata/blob/96431980/tools/gsissh/src/main/java/org/apache/airavata/gsi/ssh/impl/GSISSHAbstractCluster.java ---------------------------------------------------------------------- diff --git a/tools/gsissh/src/main/java/org/apache/airavata/gsi/ssh/impl/GSISSHAbstractCluster.java b/tools/gsissh/src/main/java/org/apache/airavata/gsi/ssh/impl/GSISSHAbstractCluster.java index c6866c0..5c24478 100644 --- a/tools/gsissh/src/main/java/org/apache/airavata/gsi/ssh/impl/GSISSHAbstractCluster.java +++ b/tools/gsissh/src/main/java/org/apache/airavata/gsi/ssh/impl/GSISSHAbstractCluster.java @@ -21,6 +21,7 @@ package org.apache.airavata.gsi.ssh.impl; import com.jcraft.jsch.*; + import org.apache.airavata.gsi.ssh.api.*; import org.apache.airavata.gsi.ssh.api.authentication.*; import org.apache.airavata.gsi.ssh.api.job.JobDescriptor; @@ -39,12 +40,14 @@ import org.slf4j.LoggerFactory; import javax.xml.transform.*; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; + import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; import java.io.StringWriter; import java.net.URL; import java.security.SecureRandom; +import java.util.List; public class GSISSHAbstractCluster implements Cluster { static { @@ -376,6 +379,17 @@ public class GSISSHAbstractCluster implements Cluster { } } + public List<String> listDirectory(String directoryPath) throws SSHApiException { + try { + return SSHUtils.listDirectory(directoryPath, session); + } catch (IOException e) { + throw new SSHApiException("Failed during creating directory:" + directoryPath + " to remote file " + + serverInfo.getHost() + ":rFile", e); + } catch (JSchException e) { + throw new SSHApiException("Failed during creating directory :" + directoryPath + " to remote file " + + serverInfo.getHost() + ":rFile", e); + } + } public ServerInfo getServerInfo() { return serverInfo; http://git-wip-us.apache.org/repos/asf/airavata/blob/96431980/tools/gsissh/src/main/java/org/apache/airavata/gsi/ssh/util/SSHUtils.java ---------------------------------------------------------------------- diff --git a/tools/gsissh/src/main/java/org/apache/airavata/gsi/ssh/util/SSHUtils.java b/tools/gsissh/src/main/java/org/apache/airavata/gsi/ssh/util/SSHUtils.java index 5e92c43..02547a0 100644 --- a/tools/gsissh/src/main/java/org/apache/airavata/gsi/ssh/util/SSHUtils.java +++ b/tools/gsissh/src/main/java/org/apache/airavata/gsi/ssh/util/SSHUtils.java @@ -21,6 +21,7 @@ package org.apache.airavata.gsi.ssh.util; import com.jcraft.jsch.*; + import org.apache.airavata.gsi.ssh.api.authentication.GSIAuthenticationInfo; import org.apache.airavata.gsi.ssh.api.SSHApiException; import org.apache.airavata.gsi.ssh.api.ServerInfo; @@ -30,6 +31,8 @@ import org.apache.airavata.gsi.ssh.jsch.ExtendedJSch; import org.slf4j.*; import java.io.*; +import java.util.Arrays; +import java.util.List; /** * This class is going to be useful to SCP a file to a remote grid machine using my proxy credentials @@ -611,6 +614,38 @@ public class SSHUtils { channel.disconnect(); } + public static List<String> listDirectory(String path, Session session) throws IOException, JSchException, SSHApiException { + + // exec 'scp -t rfile' remotely + String command = "ls " + path; + Channel channel = session.openChannel("exec"); + StandardOutReader stdOutReader = new StandardOutReader(); + + ((ChannelExec) channel).setCommand(command); + + + ((ChannelExec) channel).setErrStream(stdOutReader.getStandardError()); + try { + channel.connect(); + } catch (JSchException e) { + + channel.disconnect(); + session.disconnect(); + + throw new SSHApiException("Unable to retrieve command output. Command - " + command + + " on server - " + session.getHost() + ":" + session.getPort() + + " connecting user name - " + + session.getUserName(), e); + } + stdOutReader.onOutput(channel); + stdOutReader.getStdOutputString(); + if (!stdOutReader.getStdErrorString().equals("")) { + throw new SSHApiException(stdOutReader.getStdErrorString()); + } + channel.disconnect(); + return Arrays.asList(stdOutReader.getStdOutputString().split("\n")); + } + static int checkAck(InputStream in) throws IOException { int b = in.read(); if (b == 0) return b;
