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