Skip to content
Snippets Groups Projects
Commit 930ddc6b authored by jakubs's avatar jakubs
Browse files

SSDM-1081 Improve behavior of multi dataset archiver in case of archiving of...

SSDM-1081 Improve behavior of multi dataset archiver in case of archiving of already archived datasets

SVN: 32681
parent 08f7ab04
No related branches found
No related tags found
No related merge requests found
...@@ -18,6 +18,7 @@ package ch.systemsx.cisd.openbis.dss.generic.server.plugins.standard.archiver; ...@@ -18,6 +18,7 @@ package ch.systemsx.cisd.openbis.dss.generic.server.plugins.standard.archiver;
import java.io.File; import java.io.File;
import java.io.Serializable; import java.io.Serializable;
import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Properties; import java.util.Properties;
...@@ -92,9 +93,10 @@ public class MultiDatasetArchiver extends AbstractArchiverProcessingPlugin ...@@ -92,9 +93,10 @@ public class MultiDatasetArchiver extends AbstractArchiverProcessingPlugin
verifyDataSetsSize(dataSets); verifyDataSetsSize(dataSets);
DatasetProcessingStatuses result = new DatasetProcessingStatuses(); DatasetProcessingStatuses result = new DatasetProcessingStatuses();
MultiDatasetArchiverDBTransaction transaction = new MultiDatasetArchiverDBTransaction(); MultiDatasetArchiverDBTransaction transaction = new MultiDatasetArchiverDBTransaction();
filterAlreadyPresentInArchive(dataSets, result, transaction);
try try
{ {
result = doArchive(dataSets, transaction, context); result = doArchive(dataSets, transaction, context);
...@@ -117,6 +119,21 @@ public class MultiDatasetArchiver extends AbstractArchiverProcessingPlugin ...@@ -117,6 +119,21 @@ public class MultiDatasetArchiver extends AbstractArchiverProcessingPlugin
return result; return result;
} }
private void filterAlreadyPresentInArchive(List<DatasetDescription> dataSets, DatasetProcessingStatuses result,
MultiDatasetArchiverDBTransaction transaction)
{
Iterator<DatasetDescription> it = dataSets.iterator();
while (it.hasNext())
{
DatasetDescription dataSet = it.next();
if (transaction.getDataSetByCode(dataSet.getDataSetCode()) != null)
{
result.addResult(dataSet.getDataSetCode(), Status.OK, Operation.ARCHIVE);
it.remove();
}
}
}
private void verifyDataSetsSize(List<DatasetDescription> dataSets) private void verifyDataSetsSize(List<DatasetDescription> dataSets)
{ {
long datasetSize = getDataSetsSize(dataSets); long datasetSize = getDataSetsSize(dataSets);
...@@ -125,8 +142,8 @@ public class MultiDatasetArchiver extends AbstractArchiverProcessingPlugin ...@@ -125,8 +142,8 @@ public class MultiDatasetArchiver extends AbstractArchiverProcessingPlugin
if (datasetSize < minimumContainerSize) if (datasetSize < minimumContainerSize)
{ {
throw new IllegalArgumentException("Dataset " + dataSets.get(0).getDataSetCode() throw new IllegalArgumentException("Dataset " + dataSets.get(0).getDataSetCode()
+ " is too small (" + FileUtilities.byteCountToDisplaySize(datasetSize) + " is too small (" + FileUtilities.byteCountToDisplaySize(datasetSize)
+ ") to be archived with multi dataset archiver because minimum size is " + ") to be archived with multi dataset archiver because minimum size is "
+ FileUtilities.byteCountToDisplaySize(minimumContainerSize) + "."); + FileUtilities.byteCountToDisplaySize(minimumContainerSize) + ".");
} }
// if single dataset is bigger than specified maximum, we should still allow it being // if single dataset is bigger than specified maximum, we should still allow it being
...@@ -136,15 +153,15 @@ public class MultiDatasetArchiver extends AbstractArchiverProcessingPlugin ...@@ -136,15 +153,15 @@ public class MultiDatasetArchiver extends AbstractArchiverProcessingPlugin
if (datasetSize < minimumContainerSize) if (datasetSize < minimumContainerSize)
{ {
throw new IllegalArgumentException("Set of data sets specified for archiving is too small (" throw new IllegalArgumentException("Set of data sets specified for archiving is too small ("
+ FileUtilities.byteCountToDisplaySize(datasetSize) + FileUtilities.byteCountToDisplaySize(datasetSize)
+ ") to be archived with multi dataset archiver because minimum size is " + ") to be archived with multi dataset archiver because minimum size is "
+ FileUtilities.byteCountToDisplaySize(minimumContainerSize) + "."); + FileUtilities.byteCountToDisplaySize(minimumContainerSize) + ".");
} }
else if (datasetSize > maximumContainerSize) else if (datasetSize > maximumContainerSize)
{ {
throw new IllegalArgumentException("Set of data sets specified for archiving is too big (" throw new IllegalArgumentException("Set of data sets specified for archiving is too big ("
+ FileUtilities.byteCountToDisplaySize(datasetSize) + FileUtilities.byteCountToDisplaySize(datasetSize)
+ ") to be archived with multi dataset archiver because maximum size is " + ") to be archived with multi dataset archiver because maximum size is "
+ FileUtilities.byteCountToDisplaySize(maximumContainerSize) + "."); + FileUtilities.byteCountToDisplaySize(maximumContainerSize) + ".");
} }
} }
...@@ -207,7 +224,7 @@ public class MultiDatasetArchiver extends AbstractArchiverProcessingPlugin ...@@ -207,7 +224,7 @@ public class MultiDatasetArchiver extends AbstractArchiverProcessingPlugin
} }
private void checkArchivedDataSets(IHierarchicalContent archivedContent, List<DatasetDescription> dataSets, private void checkArchivedDataSets(IHierarchicalContent archivedContent, List<DatasetDescription> dataSets,
ArchiverTaskContext context, DatasetProcessingStatuses statuses) ArchiverTaskContext context, DatasetProcessingStatuses statuses)
{ {
Status status; Status status;
......
...@@ -65,6 +65,14 @@ public class MultiDatasetArchiverDBTransaction ...@@ -65,6 +65,14 @@ public class MultiDatasetArchiverDBTransaction
return container; return container;
} }
/**
* Returns null if no data set found
*/
public MultiDataSetArchiverDataSetDTO getDataSetByCode(String dataSetCode)
{
return transaction.getDataSetForCode(dataSetCode);
}
public MultiDataSetArchiverDataSetDTO insertDataset(DatasetDescription dataSet, public MultiDataSetArchiverDataSetDTO insertDataset(DatasetDescription dataSet,
MultiDataSetArchiverContainerDTO container) MultiDataSetArchiverContainerDTO container)
{ {
...@@ -74,7 +82,7 @@ public class MultiDatasetArchiverDBTransaction ...@@ -74,7 +82,7 @@ public class MultiDatasetArchiverDBTransaction
if (mads != null) if (mads != null)
{ {
throw new IllegalStateException("Trying to add dataset that has already been added."); throw new IllegalStateException("Dataset " + dataSet.getDataSetCode() + "is already archived in other container");
} }
mads = new MultiDataSetArchiverDataSetDTO(0, code, container.getId(), dataSet.getDataSetSize()); mads = new MultiDataSetArchiverDataSetDTO(0, code, container.getId(), dataSet.getDataSetSize());
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment