diff --git a/common/source/java/ch/systemsx/cisd/common/time/DateTimeUtils.java b/common/source/java/ch/systemsx/cisd/common/time/DateTimeUtils.java index 291dce5414d30388004973ccc910cc01add5b23b..7793b7dc97d1889707862b241b9fe10c6a54aa96 100644 --- a/common/source/java/ch/systemsx/cisd/common/time/DateTimeUtils.java +++ b/common/source/java/ch/systemsx/cisd/common/time/DateTimeUtils.java @@ -19,6 +19,7 @@ package ch.systemsx.cisd.common.time; import java.text.DateFormat; import java.util.Calendar; import java.util.Date; +import java.util.Properties; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -113,6 +114,19 @@ public final class DateTimeUtils { return value + unit; } + + /** + * Gets from specified properties the specified property as a duration time in milliseconds. The + * duration can be specified with time unit as explained in the method + * {@link #parseDurationToMillis(String)}. + * + * @return <code>defaultValue</code> if property doesn't exist + */ + public static long getDurationInMillis(Properties properties, String key, long defaultValue) + { + String value = properties.getProperty(key); + return value == null ? defaultValue : parseDurationToMillis(value); + } /** * Parses a time duration to milli-seconds. The string will be trimmed and white spaces in diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/content/ContentCache.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/content/ContentCache.java index df8eb335db20d1397fb37d379e8f150b96e843e6..901206ab67c7c03b4734d057b64cff8b23cc3a9a 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/content/ContentCache.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/content/ContentCache.java @@ -56,6 +56,7 @@ import ch.systemsx.cisd.common.filesystem.IFileOperations; import ch.systemsx.cisd.common.logging.LogCategory; import ch.systemsx.cisd.common.logging.LogFactory; import ch.systemsx.cisd.common.properties.PropertyUtils; +import ch.systemsx.cisd.common.time.DateTimeUtils; import ch.systemsx.cisd.common.utilities.ITimeProvider; import ch.systemsx.cisd.common.utilities.SystemTimeProvider; import ch.systemsx.cisd.openbis.dss.generic.shared.api.v1.IDssServiceRpcGeneric; @@ -74,13 +75,13 @@ public class ContentCache implements IContentCache, InitializingBean private static final String DEFAULT_CACHE_WORKSPACE_FOLDER = "../../data/dss-cache"; - private static final long DEFAULT_MINIMUM_KEEPING_TIME_IN_MINUTES = 60 * 24; + private static final long DEFAULT_MINIMUM_KEEPING_TIME = DateUtils.MILLIS_PER_DAY; public static final String CACHE_WORKSPACE_FOLDER_KEY = "cache-workspace-folder"; public static final String CACHE_WORKSPACE_MAX_SIZE_KEY = "cache-workspace-max-size"; - public static final String CACHE_WORKSPACE_MIN_KEEPING_TIME_IN_MINUTES_KEY = + public static final String CACHE_WORKSPACE_MIN_KEEPING_TIME_KEY = "cache-workspace-min-keeping-time"; private final static Logger operationLog = LogFactory.getLogger(LogCategory.OPERATION, @@ -230,16 +231,15 @@ public class ContentCache implements IContentCache, InitializingBean long maxWorkspaceSize = PropertyUtils.getInt(properties, CACHE_WORKSPACE_MAX_SIZE_KEY, DEFAULT_MAX_WORKSPACE_SIZE) * FileUtils.ONE_MB; - long minimumKeepingTimeInMinutes = - PropertyUtils.getLong(properties, CACHE_WORKSPACE_MIN_KEEPING_TIME_IN_MINUTES_KEY, - DEFAULT_MINIMUM_KEEPING_TIME_IN_MINUTES); - if (minimumKeepingTimeInMinutes <= 0) + long minimumKeepingTimeInMillis = + DateTimeUtils.getDurationInMillis(properties, CACHE_WORKSPACE_MIN_KEEPING_TIME_KEY, + DEFAULT_MINIMUM_KEEPING_TIME); + if (minimumKeepingTimeInMillis <= DateUtils.MILLIS_PER_MINUTE) { throw new EnvironmentFailureException( - "Minimum keeping time has to be a positive number: " - + minimumKeepingTimeInMinutes); + "Minimum keeping time has to be a larger than a minute: " + + minimumKeepingTimeInMillis); } - long minimumKeepingTimeInMillis = minimumKeepingTimeInMinutes * DateUtils.MILLIS_PER_MINUTE; File cacheWorkspace = new File(workspacePath); File dataSetInfosFile = new File(cacheWorkspace, DATA_SET_INFOS_FILE);