diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/SegmentedStoreUtils.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/SegmentedStoreUtils.java index 8efadece0529b9a36d1376b756c5319c6c6df66d..bb592225000ec3cfbfe67d7ce63b9a43709228b2 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/SegmentedStoreUtils.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/SegmentedStoreUtils.java @@ -269,7 +269,7 @@ public class SegmentedStoreUtils } List<DatasetDescription> filteredDataSets = new ArrayList<DatasetDescription>(dataSets); List<SimpleDataSetInformationDTO> filteredDataSetsInShare = - new ArrayList<SimpleDataSetInformationDTO>(unarchivingScratchShare.getDataSetsOrderedBySize()); + getAvailableDataSetsInUnarchivingScratchShare(unarchivingScratchShare); removeCommonDataSets(filteredDataSets, filteredDataSetsInShare); long requestedSpace = calculateTotalSizeOfDataSetsToKeep(filteredDataSets); @@ -299,6 +299,20 @@ public class SegmentedStoreUtils + FileUtilities.byteCountToDisplaySize(requestedSpace)); } + private static List<SimpleDataSetInformationDTO> getAvailableDataSetsInUnarchivingScratchShare(Share unarchivingScratchShare) + { + List<SimpleDataSetInformationDTO> availableDataSets = new ArrayList<SimpleDataSetInformationDTO>(); + List<SimpleDataSetInformationDTO> dataSets = unarchivingScratchShare.getDataSetsOrderedBySize(); + for (SimpleDataSetInformationDTO dataSet : dataSets) + { + if (dataSet.getStatus().isAvailable()) + { + availableDataSets.add(dataSet); + } + } + return availableDataSets; + } + /** * Remove common data sets from both lists */ diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/SegmentedStoreUtilsTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/SegmentedStoreUtilsTest.java index c710c1d4ead3d591133b976129088d8115cf6df6..8e455027ca702c2bc90a1067c36d613130b279ce 100644 --- a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/SegmentedStoreUtilsTest.java +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/SegmentedStoreUtilsTest.java @@ -16,6 +16,9 @@ package ch.systemsx.cisd.openbis.dss.generic.shared.utils; +import static ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetArchivingStatus.ARCHIVED; +import static ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetArchivingStatus.AVAILABLE; + import java.io.File; import java.io.IOException; import java.lang.reflect.Method; @@ -137,7 +140,7 @@ public class SegmentedStoreUtilsTest extends AbstractFileSystemTestCase @Test public void testFreeSpaceForAShareWhichIsNotAnUnarchivingScratchShare() { - SimpleDataSetInformationDTO ds1 = dataSet(1, 11 * FileUtils.ONE_GB); + SimpleDataSetInformationDTO ds1 = dataSet(1, 11 * FileUtils.ONE_GB, AVAILABLE); Share share = new Share(shareFolder, 0, freeSpaceProvider); try @@ -157,7 +160,7 @@ public class SegmentedStoreUtilsTest extends AbstractFileSystemTestCase @Test public void testFreeSpaceNothingToDo() { - SimpleDataSetInformationDTO ds1 = dataSet(1, 11 * FileUtils.ONE_GB); + SimpleDataSetInformationDTO ds1 = dataSet(1, 11 * FileUtils.ONE_GB, AVAILABLE); Share share = new Share(shareFolder, 0, freeSpaceProvider); share.setUnarchivingScratchShare(true); RecordingMatcher<HostAwareFile> recordingFileMatcher = prepareFreeSpace(12 * FileUtils.ONE_GB); @@ -173,11 +176,11 @@ public class SegmentedStoreUtilsTest extends AbstractFileSystemTestCase @Test public void testFreeSpaceRemovingOneDataSet() { - SimpleDataSetInformationDTO ds1 = dataSet(1, 10 * FileUtils.ONE_GB); - SimpleDataSetInformationDTO ds2 = dataSet(2, 10 * FileUtils.ONE_GB); - SimpleDataSetInformationDTO ds3 = dataSet(3, 12 * FileUtils.ONE_GB); - SimpleDataSetInformationDTO ds4 = dataSet(4, 11 * FileUtils.ONE_GB); - SimpleDataSetInformationDTO ds5 = dataSet(5, 14 * FileUtils.ONE_GB); + SimpleDataSetInformationDTO ds1 = dataSet(1, 10 * FileUtils.ONE_GB, AVAILABLE); + SimpleDataSetInformationDTO ds2 = dataSet(2, 10 * FileUtils.ONE_GB, AVAILABLE); + SimpleDataSetInformationDTO ds3 = dataSet(3, 12 * FileUtils.ONE_GB, AVAILABLE); + SimpleDataSetInformationDTO ds4 = dataSet(4, 11 * FileUtils.ONE_GB, AVAILABLE); + SimpleDataSetInformationDTO ds5 = dataSet(5, 14 * FileUtils.ONE_GB, AVAILABLE); Share share = new Share(shareFolder, 0, freeSpaceProvider); share.setUnarchivingScratchShare(true); share.addDataSet(ds5); @@ -210,13 +213,15 @@ public class SegmentedStoreUtilsTest extends AbstractFileSystemTestCase @Test public void testFreeSpaceForThreeDataSetsOneAlreadyInShare() { - SimpleDataSetInformationDTO ds1 = dataSet(1, 10 * FileUtils.ONE_GB); - SimpleDataSetInformationDTO ds2 = dataSet(2, 10 * FileUtils.ONE_GB); - SimpleDataSetInformationDTO ds3 = dataSet(3, 12 * FileUtils.ONE_GB); - SimpleDataSetInformationDTO ds4 = dataSet(4, 11 * FileUtils.ONE_GB); - SimpleDataSetInformationDTO ds5 = dataSet(5, 14 * FileUtils.ONE_GB); + SimpleDataSetInformationDTO ds0 = dataSet(0, 19 * FileUtils.ONE_GB, ARCHIVED); + SimpleDataSetInformationDTO ds1 = dataSet(1, 10 * FileUtils.ONE_GB, AVAILABLE); + SimpleDataSetInformationDTO ds2 = dataSet(2, 10 * FileUtils.ONE_GB, AVAILABLE); + SimpleDataSetInformationDTO ds3 = dataSet(3, 12 * FileUtils.ONE_GB, AVAILABLE); + SimpleDataSetInformationDTO ds4 = dataSet(4, 11 * FileUtils.ONE_GB, AVAILABLE); + SimpleDataSetInformationDTO ds5 = dataSet(5, 14 * FileUtils.ONE_GB, AVAILABLE); Share share = new Share(shareFolder, 0, freeSpaceProvider); share.setUnarchivingScratchShare(true); + share.addDataSet(ds0); share.addDataSet(ds5); share.addDataSet(ds3); share.addDataSet(ds1); @@ -247,11 +252,11 @@ public class SegmentedStoreUtilsTest extends AbstractFileSystemTestCase @Test public void testFreeSpaceRemovingDataSetsButStillNotEnoughFreeSpace() { - SimpleDataSetInformationDTO ds1 = dataSet(1, 10 * FileUtils.ONE_GB); - SimpleDataSetInformationDTO ds2 = dataSet(2, 10 * FileUtils.ONE_GB); - SimpleDataSetInformationDTO ds3 = dataSet(3, 12 * FileUtils.ONE_GB); - SimpleDataSetInformationDTO ds4 = dataSet(4, 11 * FileUtils.ONE_GB); - SimpleDataSetInformationDTO ds5 = dataSet(5, 14 * FileUtils.ONE_GB); + SimpleDataSetInformationDTO ds1 = dataSet(1, 10 * FileUtils.ONE_GB, AVAILABLE); + SimpleDataSetInformationDTO ds2 = dataSet(2, 10 * FileUtils.ONE_GB, AVAILABLE); + SimpleDataSetInformationDTO ds3 = dataSet(3, 12 * FileUtils.ONE_GB, AVAILABLE); + SimpleDataSetInformationDTO ds4 = dataSet(4, 11 * FileUtils.ONE_GB, AVAILABLE); + SimpleDataSetInformationDTO ds5 = dataSet(5, 14 * FileUtils.ONE_GB, AVAILABLE); Share share = new Share(shareFolder, 0, freeSpaceProvider); share.setUnarchivingScratchShare(true); share.addDataSet(ds3); @@ -841,12 +846,14 @@ public class SegmentedStoreUtilsTest extends AbstractFileSystemTestCase return result; } - private SimpleDataSetInformationDTO dataSet(int id, long size) + private SimpleDataSetInformationDTO dataSet(int id, long size, DataSetArchivingStatus status) { File dsFile = new File(shareFolder, "abc/ds-" + id); dsFile.mkdirs(); FileUtilities.writeToFile(new File(dsFile, "read.me"), id + " nice works!"); - return dataSet(dsFile, DATA_STORE_CODE, size); + SimpleDataSetInformationDTO dataSet = dataSet(dsFile, DATA_STORE_CODE, size); + dataSet.setStatus(status); + return dataSet; } private SimpleDataSetInformationDTO dataSet(File dataSetFile, String dataStoreCode, Long size) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SimpleDataSetInformationDTO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SimpleDataSetInformationDTO.java index 9a1aad195b4734b379989bba9c6534adf981a236..42c31e37d2b18c00edd13576e19177fbe426f0cf 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SimpleDataSetInformationDTO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SimpleDataSetInformationDTO.java @@ -21,6 +21,7 @@ import java.util.Date; import java.util.HashMap; import java.util.Map; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetArchivingStatus; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IDatasetLocation; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ServiceVersionHolder; @@ -40,6 +41,8 @@ public class SimpleDataSetInformationDTO implements Serializable, IDatasetLocati private String dataSetShareId; private String dataSetLocation; + + private DataSetArchivingStatus status; private Date registrationTimestamp; @@ -128,6 +131,16 @@ public class SimpleDataSetInformationDTO implements Serializable, IDatasetLocati this.dataSetLocation = dataSetLocation; } + public DataSetArchivingStatus getStatus() + { + return status; + } + + public void setStatus(DataSetArchivingStatus status) + { + this.status = status; + } + public Date getRegistrationTimestamp() { return registrationTimestamp; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SimpleDataSetHelper.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SimpleDataSetHelper.java index 2e603cceee449fde165d59b89a7ab19e40161e69..13d627a256d6e7d57625b1c493297c6a531800a0 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SimpleDataSetHelper.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SimpleDataSetHelper.java @@ -64,6 +64,7 @@ public class SimpleDataSetHelper result.setSpeedHint(data.getSpeedHint()); result.setDataSetShareId(data.getShareId()); result.setDataSetLocation(data.getLocation()); + result.setStatus(data.getStatus()); result.setDataSetSize(data.getSize()); result.setDatabaseInstanceCode(data.getExperiment().getProject().getSpace().getInstance() .getCode());