This is an automated email from the ASF dual-hosted git repository.
dimuthuupe pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/airavata.git
The following commit(s) were added to refs/heads/develop by this push:
new 1a00507107 Handling special characters in output staging
1a00507107 is described below
commit 1a005071079e76063f02b4686ae2d7b7ead06c13
Author: Dimuthu Wannipurage <[email protected]>
AuthorDate: Thu Jun 9 13:18:38 2022 -0400
Handling special characters in output staging
---
.../helix/impl/task/staging/DataStagingTask.java | 17 ++++++++++++++++-
.../helix/impl/task/staging/OutputDataStagingTask.java | 11 +++++++----
2 files changed, 23 insertions(+), 5 deletions(-)
diff --git
a/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/staging/DataStagingTask.java
b/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/staging/DataStagingTask.java
index 89f2dfff84..d220ca0c57 100644
---
a/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/staging/DataStagingTask.java
+++
b/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/staging/DataStagingTask.java
@@ -151,12 +151,27 @@ public abstract class DataStagingTask extends
AiravataTask {
return filePath;
}
+ protected String escapeSpecialCharacters(String inputString){
+ final String[] metaCharacters =
{"\\","^","$","{","}","[","]","(",")","?","&","%"};
+
+ for (String metaCharacter : metaCharacters) {
+ if (inputString.contains(metaCharacter)) {
+ inputString = inputString.replace(metaCharacter, "\\" +
metaCharacter);
+ }
+ }
+ return inputString;
+ }
+
public void naiveTransfer(AgentAdaptor srcAdaptor, String sourceFile,
AgentAdaptor destAdaptor, String destFile,
String tempFile) throws TaskOnFailException {
+
+ sourceFile = escapeSpecialCharacters(sourceFile);
+ destFile = escapeSpecialCharacters(destFile);
+
logger.info("Using naive transfer to transfer " + sourceFile + " to "
+ destFile);
try {
try {
- logger.info("Downloading file " + sourceFile + " to loacl temp
file " + tempFile);
+ logger.info("Downloading file " + sourceFile + " to local temp
file " + tempFile);
srcAdaptor.downloadFile(sourceFile, tempFile);
} catch (AgentException e) {
throw new TaskOnFailException("Failed downloading file " +
sourceFile + " to the local path " +
diff --git
a/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/staging/OutputDataStagingTask.java
b/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/staging/OutputDataStagingTask.java
index e9ec4d3d68..ba06618f98 100644
---
a/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/staging/OutputDataStagingTask.java
+++
b/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/staging/OutputDataStagingTask.java
@@ -171,9 +171,11 @@ public class OutputDataStagingTask extends DataStagingTask
{
}
if (!destinationURIs.isEmpty()) {
if (processOutput.getType() == DataType.URI) {
- saveExperimentOutput(processOutput.getName(),
destinationURIs.get(0).toString());
+ saveExperimentOutput(processOutput.getName(),
escapeSpecialCharacters(destinationURIs.get(0).toString()));
} else if (processOutput.getType() ==
DataType.URI_COLLECTION) {
-
saveExperimentOutputCollection(processOutput.getName(),
destinationURIs.stream().map(URI::toString).collect(Collectors.toList()));
+
saveExperimentOutputCollection(processOutput.getName(), destinationURIs.stream()
+ .map(URI::toString)
+
.map(this::escapeSpecialCharacters).collect(Collectors.toList()));
}
}
return onSuccess("Output data staging task " + getTaskId() + "
successfully completed");
@@ -181,9 +183,10 @@ public class OutputDataStagingTask extends DataStagingTask
{
} else {
// Uploading output file to the storage resource
assert processOutput != null;
- boolean transferred =
transferFileToStorage(sourceURI.getPath(), destinationURI.getPath(),
sourceFileName, adaptor, storageResourceAdaptor);
+ boolean transferred =
transferFileToStorage(sourceURI.getPath(), destinationURI.getPath(),
+ sourceFileName, adaptor, storageResourceAdaptor);
if (transferred) {
- saveExperimentOutput(processOutput.getName(),
destinationURI.toString());
+ saveExperimentOutput(processOutput.getName(),
escapeSpecialCharacters(destinationURI.toString()));
} else {
logger.warn("File " + sourceFileName + " did not
transfer");
}