diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/archiver/MultiDatasetArchiver.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/archiver/MultiDatasetArchiver.java index fcf6723937a836a0010f750ad69794db1660bc4a..7effe7f8cea59fead1b6d94f80cae8c4a0bd7961 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/archiver/MultiDatasetArchiver.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/archiver/MultiDatasetArchiver.java @@ -33,6 +33,7 @@ import ch.systemsx.cisd.openbis.dss.generic.server.plugins.standard.AbstractArch import ch.systemsx.cisd.openbis.dss.generic.server.plugins.standard.RsyncArchiveCopierFactory; import ch.systemsx.cisd.openbis.dss.generic.server.plugins.standard.RsyncArchiver; import ch.systemsx.cisd.openbis.dss.generic.server.plugins.standard.SshCommandExecutorFactory; +import ch.systemsx.cisd.openbis.dss.generic.server.plugins.standard.archiver.dataaccess.IMultiDataSetArchiverReadonlyQueryDAO; import ch.systemsx.cisd.openbis.dss.generic.server.plugins.standard.archiver.dataaccess.MultiDataSetArchiverContainerDTO; import ch.systemsx.cisd.openbis.dss.generic.server.plugins.standard.archiver.dataaccess.MultiDatasetArchiverDBTransaction; import ch.systemsx.cisd.openbis.dss.generic.shared.ArchiverTaskContext; @@ -90,15 +91,21 @@ public class MultiDatasetArchiver extends AbstractArchiverProcessingPlugin @Override protected DatasetProcessingStatuses doArchive(List<DatasetDescription> dataSets, ArchiverTaskContext context) { - verifyDataSetsSize(dataSets); DatasetProcessingStatuses result = new DatasetProcessingStatuses(); - MultiDatasetArchiverDBTransaction transaction = new MultiDatasetArchiverDBTransaction(); - filterAlreadyPresentInArchive(dataSets, result, transaction); + filterAlreadyPresentInArchive(dataSets, result); + + if (dataSets.isEmpty()) + { + return result; + } + MultiDatasetArchiverDBTransaction transaction = new MultiDatasetArchiverDBTransaction(); try { + verifyDataSetsSize(dataSets); + result = doArchive(dataSets, transaction, context); transaction.commit(); @@ -119,14 +126,15 @@ public class MultiDatasetArchiver extends AbstractArchiverProcessingPlugin return result; } - private void filterAlreadyPresentInArchive(List<DatasetDescription> dataSets, DatasetProcessingStatuses result, - MultiDatasetArchiverDBTransaction transaction) + private void filterAlreadyPresentInArchive(List<DatasetDescription> dataSets, DatasetProcessingStatuses result) { + IMultiDataSetArchiverReadonlyQueryDAO query = MultiDatasetArchiverDBTransaction.getReadonlyQuery(); + Iterator<DatasetDescription> it = dataSets.iterator(); while (it.hasNext()) { DatasetDescription dataSet = it.next(); - if (transaction.getDataSetByCode(dataSet.getDataSetCode()) != null) + if (query.getDataSetForCode(dataSet.getDataSetCode()) != null) { result.addResult(dataSet.getDataSetCode(), Status.OK, Operation.ARCHIVE); it.remove(); diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/archiver/dataaccess/MultiDatasetArchiverDBTransaction.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/archiver/dataaccess/MultiDatasetArchiverDBTransaction.java index 9183ad560685b721086e88af48e9368f786ab050..06e3b78b5948c3f5dfbeac3f56bfad29b3d2409b 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/archiver/dataaccess/MultiDatasetArchiverDBTransaction.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/archiver/dataaccess/MultiDatasetArchiverDBTransaction.java @@ -40,6 +40,11 @@ public class MultiDatasetArchiverDBTransaction this.transaction = getTransactionalQuery(); } + public static IMultiDataSetArchiverReadonlyQueryDAO getReadonlyQuery() + { + return QueryTool.getQuery(dataSource, IMultiDataSetArchiverReadonlyQueryDAO.class); + } + private static IMultiDataSetArchiverQueryDAO getTransactionalQuery() { return QueryTool.getQuery(dataSource, IMultiDataSetArchiverQueryDAO.class); @@ -65,14 +70,6 @@ public class MultiDatasetArchiverDBTransaction return container; } - /** - * Returns null if no data set found - */ - public MultiDataSetArchiverDataSetDTO getDataSetByCode(String dataSetCode) - { - return transaction.getDataSetForCode(dataSetCode); - } - public MultiDataSetArchiverDataSetDTO insertDataset(DatasetDescription dataSet, MultiDataSetArchiverContainerDTO container) {