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 ff5e88c18031cdc73a2702701f4f4d10e7747f11..90979af5e8c0ec46edf44817b79817da2217ab2e 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 f4cb625a755f7ca22d7dc1a8a315636f5980ac84..7f824941232b0372fb6d09a194cea68ab72d2e69 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) {