Repository: airavata Updated Branches: refs/heads/master 719d1a7eb -> e2132b680
Check output or input value is valid before do actual file staging Project: http://git-wip-us.apache.org/repos/asf/airavata/repo Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/270ff237 Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/270ff237 Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/270ff237 Branch: refs/heads/master Commit: 270ff23782dae07ddb9e417de0d1e33653ebf155 Parents: 3d0dd11 Author: Shameera Rathanyaka <[email protected]> Authored: Wed Sep 16 15:41:07 2015 -0400 Committer: Shameera Rathanyaka <[email protected]> Committed: Wed Sep 16 15:41:07 2015 -0400 ---------------------------------------------------------------------- .../impl/task/AdvancedSCPDataStageTask.java | 54 +++++++++++++++----- 1 file changed, 40 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/airavata/blob/270ff237/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/AdvancedSCPDataStageTask.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/AdvancedSCPDataStageTask.java b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/AdvancedSCPDataStageTask.java index 3640455..f94a8ed 100644 --- a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/AdvancedSCPDataStageTask.java +++ b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/AdvancedSCPDataStageTask.java @@ -42,6 +42,7 @@ import org.apache.airavata.gfac.core.task.Task; import org.apache.airavata.gfac.core.task.TaskException; import org.apache.airavata.gfac.impl.Factory; import org.apache.airavata.gfac.impl.SSHUtils; +import org.apache.airavata.model.application.io.InputDataObjectType; import org.apache.airavata.model.application.io.OutputDataObjectType; import org.apache.airavata.model.commons.ErrorModel; import org.apache.airavata.model.status.ProcessState; @@ -63,6 +64,10 @@ import java.net.URISyntaxException; import java.util.List; import java.util.Map; +/** + * This will be used for both Input file staging and output file staging, hence if you do any changes to a part of logic + * in this class please consider that will works with both input and output cases. + */ public class AdvancedSCPDataStageTask implements Task{ private static final Logger log = LoggerFactory.getLogger(AdvancedSCPDataStageTask.class); private static final int DEFAULT_SSH_PORT = 22; @@ -86,15 +91,41 @@ public class AdvancedSCPDataStageTask implements Task{ TaskStatus status = new TaskStatus(TaskState.CREATED); AuthenticationInfo authenticationInfo = null; DataStagingTaskModel subTaskModel = null; - - OutputDataObjectType processOutput = taskContext.getProcessOutput(); - if (processOutput != null && processOutput.getValue() == null) { - log.error("expId: {}, processId:{} :- Couldn't stage file {} , file name shouldn't be null", - taskContext.getExperimentId(), taskContext.getProcessId(), processOutput.getName ()); - status = new TaskStatus(TaskState.FAILED); - status.setReason("File name is null"); - return status; + ProcessState processState = taskContext.getParentProcessContext().getProcessState(); + if (processState == ProcessState.OUTPUT_DATA_STAGING) { + OutputDataObjectType processOutput = taskContext.getProcessOutput(); + if (processOutput != null && processOutput.getValue() == null) { + log.error("expId: {}, processId:{}, taskId: {}:- Couldn't stage file {} , file name shouldn't be null", + taskContext.getExperimentId(), taskContext.getProcessId(), taskContext.getTaskId(), + processOutput.getName()); + status = new TaskStatus(TaskState.FAILED); + if (processOutput.isIsRequired()) { + status.setReason("File name is null, but this output's isRequired bit is not set"); + } else { + status.setReason("File name is null"); + } + return status; + } + } else if (processState == ProcessState.INPUT_DATA_STAGING) { + InputDataObjectType processInput = taskContext.getProcessInput(); + if (processInput != null && processInput.getValue() == null) { + log.error("expId: {}, processId:{}, taskId: {}:- Couldn't stage file {} , file name shouldn't be null", + taskContext.getExperimentId(), taskContext.getProcessId(), taskContext.getTaskId(), + processInput.getName()); + status = new TaskStatus(TaskState.FAILED); + if (processInput.isIsRequired()) { + status.setReason("File name is null, but this input's isRequired bit is not set"); + } else { + status.setReason("File name is null"); + } + return status; + } + } else { + status.setState(TaskState.FAILED); + status.setReason("Invalid task invocation, Support " + ProcessState.INPUT_DATA_STAGING.name() + " and " + + "" + ProcessState.OUTPUT_DATA_STAGING.name() + " process phases. found " + processState.name()); } + try { String tokenId = taskContext.getParentProcessContext().getTokenId(); CredentialReader credentialReader = GFacUtils.getCredentialReader(); @@ -137,7 +168,6 @@ public class AdvancedSCPDataStageTask implements Task{ ServerInfo serverInfo = new ServerInfo(userName, hostName, DEFAULT_SSH_PORT); Session sshSession = Factory.getSSHSession(authenticationInfo, serverInfo); - ProcessState processState = taskContext.getParentProcessContext().getProcessState(); URI destinationURI = null; if (processState == ProcessState.INPUT_DATA_STAGING) { destinationURI = new URI(subTaskModel.getDestination()); @@ -153,11 +183,7 @@ public class AdvancedSCPDataStageTask implements Task{ // TODO - save updated subtask model with new destination outputDataStaging(taskContext, sshSession, sourceURI, destinationURI, filePath); status.setReason("Successfully staged output data"); - } else { - status.setState(TaskState.FAILED); - status.setReason("Invalid task invocation, Support " + ProcessState.INPUT_DATA_STAGING.name() + " and " + - "" + ProcessState.OUTPUT_DATA_STAGING.name() + " process phases. found " + processState.name()); - } + } } catch (TException e) { String msg = "Couldn't create subTask model thrift model"; log.error(msg, e);
