From 77a7d278601945089c3c5aae1f6d2b4021166c0c Mon Sep 17 00:00:00 2001 From: felmer <felmer> Date: Wed, 5 Nov 2014 11:00:39 +0000 Subject: [PATCH] SSDM-1010: better log message, UserFailureException instead of IllegalArgumentException if chosen data sets from different containers. SVN: 32737 --- .../standard/archiver/MultiDataSetArchiver.java | 7 ++++--- .../generic/shared/utils/SegmentedStoreUtils.java | 13 ++++++++++--- .../standard/archiver/MultiDataSetArchiverTest.java | 5 +++-- .../shared/utils/SegmentedStoreUtilsTest.java | 8 ++++---- 4 files changed, 21 insertions(+), 12 deletions(-) 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 c40c59c755b..f6a49f885eb 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 @@ -31,6 +31,7 @@ import ch.rinn.restrictions.Private; import ch.systemsx.cisd.common.exceptions.ConfigurationFailureException; import ch.systemsx.cisd.common.exceptions.NotImplementedException; import ch.systemsx.cisd.common.exceptions.Status; +import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.common.filesystem.BooleanStatus; import ch.systemsx.cisd.common.filesystem.FileUtilities; import ch.systemsx.cisd.common.filesystem.IFreeSpaceProvider; @@ -430,7 +431,7 @@ public class MultiDataSetArchiver extends AbstractArchiverProcessingPlugin { if (physicalDataSet.isAvailable()) { - throw new IllegalArgumentException("Dataset '" + physicalDataSet.getCode() + "'specified for unarchiving is available"); + throw new UserFailureException("Dataset '" + physicalDataSet.getCode() + "'specified for unarchiving is available"); } } } @@ -491,7 +492,7 @@ public class MultiDataSetArchiver extends AbstractArchiverProcessingPlugin MultiDataSetArchiverDataSetDTO dataSet = getReadonlyQuery().getDataSetForCode(code); if (dataSet == null) { - throw new IllegalArgumentException("Dataset " + code + throw new UserFailureException("Dataset " + code + " was selected for unarchiving, but is not present in the archive"); } List<String> list = containers.get(dataSet.getContainerId()); @@ -505,7 +506,7 @@ public class MultiDataSetArchiver extends AbstractArchiverProcessingPlugin } if (containers.size() > 1) { - throw new IllegalArgumentException("Datasets selected for unarchiving do not all belong to one container, " + throw new UserFailureException("Datasets selected for unarchiving do not all belong to one container, " + "but to " + containers.size() + " different containers: " + containers); } return containerId; 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 c0db481291a..fae77c173a5 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 @@ -293,7 +293,8 @@ public class SegmentedStoreUtils actualFreeSpace = unarchivingScratchShare.calculateFreeSpace(); } logger.log(LogLevel.INFO, "Free space on unarchiving scratch share '" - + unarchivingScratchShare.getShareId() + "': " + FileUtilities.byteCountToDisplaySize(actualFreeSpace) + + unarchivingScratchShare.getShareId() + "': " + + FileUtilities.byteCountToDisplaySize(calculateNominalFreeSpace(actualFreeSpace)) + ", requested space for unarchiving " + filteredDataSets.size() + " data sets: " + FileUtilities.byteCountToDisplaySize(requestedSpace)); } @@ -376,7 +377,8 @@ public class SegmentedStoreUtils if (isNotEnoughFreeSpace(requestedSpace, freeSpace)) { throw new EnvironmentFailureException("Even after removing all removable data sets from share '" - + share.getShareId() + "' there would be still only " + FileUtilities.byteCountToDisplaySize(freeSpace) + + share.getShareId() + "' there would be still only " + + FileUtilities.byteCountToDisplaySize(calculateNominalFreeSpace(freeSpace)) + " free space which is not enough as " + FileUtilities.byteCountToDisplaySize(requestedSpace) + " is requested."); } @@ -385,7 +387,12 @@ public class SegmentedStoreUtils private static boolean isNotEnoughFreeSpace(long requestedSpace, long freeSpace) { - return requestedSpace + MINIMUM_FREE_SCRATCH_SPACE >= freeSpace; + return requestedSpace >= calculateNominalFreeSpace(freeSpace); + } + + private static long calculateNominalFreeSpace(long freeSpace) + { + return freeSpace - MINIMUM_FREE_SCRATCH_SPACE; } static List<Share> getSharesWithDataSets(File storeRoot, String dataStoreCode, diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/archiver/MultiDataSetArchiverTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/archiver/MultiDataSetArchiverTest.java index 405a77c8e21..0aaf89ad76e 100644 --- a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/archiver/MultiDataSetArchiverTest.java +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/archiver/MultiDataSetArchiverTest.java @@ -51,6 +51,7 @@ import ch.rinn.restrictions.Friend; import ch.systemsx.cisd.base.exceptions.CheckedExceptionTunnel; import ch.systemsx.cisd.base.tests.AbstractFileSystemTestCase; import ch.systemsx.cisd.common.exceptions.Status; +import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.common.filesystem.FileUtilities; import ch.systemsx.cisd.common.filesystem.HostAwareFile; import ch.systemsx.cisd.common.filesystem.IFreeSpaceProvider; @@ -834,8 +835,8 @@ public class MultiDataSetArchiverTest extends AbstractFileSystemTestCase try { archiver.getDataSetCodesForUnarchiving(Arrays.asList(ds1.getDataSetCode(), ds2.getDataSetCode())); - fail("IllegalArgumentException expected"); - } catch (IllegalArgumentException ex) + fail("UserFailureException expected"); + } catch (UserFailureException ex) { assertEquals("Datasets selected for unarchiving do not all belong to one container, " + "but to 2 different containers: {0=[ds1], 1=[ds2]}", ex.getMessage()); 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 8e455027ca7..b3fcd5f5608 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 @@ -169,7 +169,7 @@ public class SegmentedStoreUtilsTest extends AbstractFileSystemTestCase shareIdManager, log); assertEquals(shareFolder.getPath(), recordingFileMatcher.recordedObject().getPath()); - assertEquals("INFO: Free space on unarchiving scratch share '1': 13.00 GB, " + assertEquals("INFO: Free space on unarchiving scratch share '1': 12.00 GB, " + "requested space for unarchiving 1 data sets: 11.00 GB\n", log.toString()); } @@ -206,7 +206,7 @@ public class SegmentedStoreUtilsTest extends AbstractFileSystemTestCase + "INFO: Data set ds-1 at " + shareFolder + "/abc/ds-1 has been successfully deleted.\n" + "INFO: The following data sets have been successfully removed from share '1' " + "and their archiving status has been successfully set back to ARCHIVED: [ds-1]\n" - + "INFO: Free space on unarchiving scratch share '1': 23.00 GB, requested space for " + + "INFO: Free space on unarchiving scratch share '1': 22.00 GB, requested space for " + "unarchiving 2 data sets: 21.00 GB\n", log.toString()); } @@ -245,7 +245,7 @@ public class SegmentedStoreUtilsTest extends AbstractFileSystemTestCase + "INFO: Data set ds-3 at " + shareFolder + "/abc/ds-3 has been successfully deleted.\n" + "INFO: The following data sets have been successfully removed from share '1' " + "and their archiving status has been successfully set back to ARCHIVED: [ds-3]\n" - + "INFO: Free space on unarchiving scratch share '1': 25.00 GB, requested space for " + + "INFO: Free space on unarchiving scratch share '1': 24.00 GB, requested space for " + "unarchiving 2 data sets: 21.00 GB\n", log.toString()); } @@ -272,7 +272,7 @@ public class SegmentedStoreUtilsTest extends AbstractFileSystemTestCase } catch (EnvironmentFailureException ex) { assertEquals("Even after removing all removable data sets from share '1' there would be " - + "still only 25.00 GB free space which is not enough as 25.00 GB is requested.", ex.getMessage()); + + "still only 24.00 GB free space which is not enough as 25.00 GB is requested.", ex.getMessage()); } assertEquals(shareFolder.getPath(), recordingFileMatcher.recordedObject().getPath()); -- GitLab