From fe90422dc2a3f361a7ae8d7fcff54d3c321e3be1 Mon Sep 17 00:00:00 2001
From: buczekp <buczekp>
Date: Wed, 16 Mar 2011 10:58:31 +0000
Subject: [PATCH] [LMS-2106] added creation of destination/location directory
 in remote archiver; removed unnecessary deletion (datasets are immutable and
 framework doesn't invoke archiving on an archived dataset)

SVN: 20362
---
 .../RemoteDataSetFileOperationsExecutor.java  | 27 +++++++++++++++++++
 .../plugins/standard/RsyncDataSetCopier.java  | 17 ++++++------
 2 files changed, 35 insertions(+), 9 deletions(-)

diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/RemoteDataSetFileOperationsExecutor.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/RemoteDataSetFileOperationsExecutor.java
index ff5e88c1803..90979af5e8c 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/RemoteDataSetFileOperationsExecutor.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/RemoteDataSetFileOperationsExecutor.java
@@ -84,8 +84,35 @@ public final class RemoteDataSetFileOperationsExecutor implements IDataSetFileOp
         }
     }
 
+    private void createFolder(File folder)
+    {
+        ProcessResult result =
+                executor.executeCommandRemotely("mkdir -p " + folder.getPath(),
+                        DataSetCopier.SSH_TIMEOUT_MILLIS);
+        if (result.isOK() == false)
+        {
+            operationLog.error("Remote creation of '" + folder + "' failed with exit value: "
+                    + result.getExitValue());
+            throw new ExceptionWithStatus(
+                    Status.createError("couldn't create destination directory"));
+        }
+        List<String> output = result.getOutput();
+        if (output.isEmpty() == false)
+        {
+            operationLog.error("Remote creation of '" + folder
+                    + "' seemed to be successful but produced following output:\n"
+                    + StringUtilities.concatenateWithNewLine(output));
+            throw new ExceptionWithStatus(
+                    Status.createError("creation of destination directory leads to a problem"));
+        }
+    }
+
     public void copyDataSetToDestination(File dataSet, File destination)
     {
+        if (exists(destination).isSuccess() == false)
+        {
+            createFolder(destination);
+        }
         Status result =
                 copier.copyToRemote(dataSet, destination, host, rsyncModuleNameOrNull,
                         rsyncPasswordFileOrNull);
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/RsyncDataSetCopier.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/RsyncDataSetCopier.java
index f4cb625a755..7f824941232 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/RsyncDataSetCopier.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/RsyncDataSetCopier.java
@@ -118,7 +118,6 @@ public class RsyncDataSetCopier // TODO rename to DataSetFileOperationsManager
         try
         {
             File destinationFolder = new File(destination, dataset.getDataSetLocation());
-            deleteDestinationFolder(destinationFolder); // cleanup needed for local executor
             operationLog.info("Copy dataset '" + dataset.getDatasetCode() + "' from '"
                     + originalData.getPath() + "' to '" + destinationFolder.getParentFile());
             executor.copyDataSetToDestination(originalData, destinationFolder.getParentFile());
@@ -196,14 +195,14 @@ public class RsyncDataSetCopier // TODO rename to DataSetFileOperationsManager
         }
     }
 
-    private void deleteDestinationFolder(File destinationFolder)
-    {
-        BooleanStatus destinationExists = destinationExists(destinationFolder);
-        if (destinationExists.isSuccess())
-        {
-            executor.deleteFolder(destinationFolder);
-        }
-    }
+    // private void createDestinationFolder(File destinationFolder)
+    // {
+    // BooleanStatus destinationExists = destinationExists(destinationFolder);
+    // if (destinationExists.isSuccess() == false)
+    // {
+    // executor.createFolder(destinationFolder);
+    // }
+    // }
 
     private BooleanStatus destinationExists(File destinationFolder)
     {
-- 
GitLab