diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/RsyncArchiver.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/RsyncArchiver.java index 37593f2b42166fc76c28c46169ae27e62d70eb62..59833a8c79c5ff8594c049118a580aafc4113baa 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/RsyncArchiver.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/RsyncArchiver.java @@ -173,6 +173,7 @@ public class RsyncArchiver extends AbstractArchiverProcessingPlugin ArchiverTaskContext context) throws UserFailureException { DatasetProcessingStatuses statuses = new DatasetProcessingStatuses(); + DefaultFileBasedHierarchicalContentFactory contentFactory = new DefaultFileBasedHierarchicalContentFactory(); for (DatasetDescription dataset : datasets) { File originalData = getDatasetDirectory(context, dataset); @@ -180,15 +181,14 @@ public class RsyncArchiver extends AbstractArchiverProcessingPlugin String dataSetCode = dataset.getDataSetCode(); if (status.isOK()) { - IHierarchicalContent content = - context.getHierarchicalContentProvider().asContentWithoutModifyingAccessTimestamp(dataSetCode); - File temp = - new File(context.getDirectoryProvider().getStoreRoot(), STAGING_FOLDER - + "/" + dataSetCode); - temp.mkdirs(); + IHierarchicalContent content = null; + File temp = null; IHierarchicalContent archivedContent = null; try { + content = context.getHierarchicalContentProvider().asContentWithoutModifyingAccessTimestamp(dataSetCode); + temp = new File(storeRoot, STAGING_FOLDER + "/" + dataSetCode); + temp.mkdirs(); // We want to perform the check if the archived content is correct // (filesizes/checksums) // For this we want to have the archived content locally. If it is not available @@ -196,9 +196,7 @@ public class RsyncArchiver extends AbstractArchiverProcessingPlugin if (fileOperationsManager.isHosted()) { fileOperationsManager.retrieveFromDestination(temp, dataset); - archivedContent = - new DefaultFileBasedHierarchicalContentFactory() - .asHierarchicalContent(temp, null); + archivedContent = contentFactory.asHierarchicalContent(temp, null); } else { archivedContent = fileOperationsManager.getAsHierarchicalContent(dataset); @@ -208,9 +206,15 @@ public class RsyncArchiver extends AbstractArchiverProcessingPlugin IHierarchicalContentNode archivedRoot = archivedContent.getRootNode(); status = checkHierarchySizeAndChecksums(root, archivedRoot, checksumVerificationCondition); + } catch (Throwable t) + { + status = Status.createError("Sanity check for data set " + dataSetCode + " failed: " + t); } finally { - content.close(); + if (content != null) + { + content.close(); + } if (archivedContent != null) { archivedContent.close();