From 40d25811978cb22eeb879c2bb381a563ec6e8e47 Mon Sep 17 00:00:00 2001 From: cramakri <cramakri> Date: Mon, 19 Sep 2011 08:44:20 +0000 Subject: [PATCH] LMS-2515 Make the DSS temp file location configurable, default to the [DSS Folder]/tmp SVN: 22979 --- .../ch/systemsx/cisd/etlserver/ETLDaemon.java | 18 ++++++------ ...TopLevelDataSetRegistratorGlobalState.java | 25 +++++++++++++---- ...tOmniscientTopLevelDataSetRegistrator.java | 3 +- .../DataSetRegistrationService.java | 2 +- .../dss/generic/server/ConfigParameters.java | 19 +++++++++++-- .../utils/DssPropertyParametersUtil.java | 28 ++++++++++++++++++- .../TransferredDataSetHandlerTest.java | 10 ++++--- .../AbstractJythonDataSetHandlerTest.java | 4 +-- .../DataSetStorageRollbackerTest.java | 5 ++-- .../DataSetRegistrationTransactionTest.java | 5 ++-- 10 files changed, 90 insertions(+), 29 deletions(-) diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/ETLDaemon.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/ETLDaemon.java index d48f91516d1..3d2237fb099 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/ETLDaemon.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/ETLDaemon.java @@ -326,13 +326,14 @@ public final class ETLDaemon final boolean notifySuccessfulRegistration) { final File storeRootDir = DssPropertyParametersUtil.getStoreRootDir(properties); + File dssInternalTempDir = DssPropertyParametersUtil.getDssInternalTempDir(properties); migrateStoreRootDir(storeRootDir, openBISService.getHomeDatabaseInstance()); String dssCode = DssPropertyParametersUtil.getDataStoreCode(properties); TopLevelDataSetRegistratorGlobalState globalState = new TopLevelDataSetRegistratorGlobalState(dssCode, shareId, storeRootDir, - openBISService, mailClient, dataSetValidator, dataSourceQueryService, - new DynamicTransactionQueryFactory(), notifySuccessfulRegistration, - threadParameters); + dssInternalTempDir, openBISService, mailClient, dataSetValidator, + dataSourceQueryService, new DynamicTransactionQueryFactory(), + notifySuccessfulRegistration, threadParameters); ITopLevelDataSetRegistrator registrator = ClassUtils.create(ITopLevelDataSetRegistrator.class, threadParameters @@ -356,15 +357,16 @@ public final class ETLDaemon Class<?> defaultTopLevelDataSetRegistratorClass) { final File storeRootDir = DssPropertyParametersUtil.getStoreRootDir(properties); + File dssInternalTempDir = DssPropertyParametersUtil.getDssInternalTempDir(properties); migrateStoreRootDir(storeRootDir, openBISService.getHomeDatabaseInstance()); String dssCode = DssPropertyParametersUtil.getDataStoreCode(properties); TopLevelDataSetRegistratorGlobalState globalState = new TopLevelDataSetRegistratorGlobalState(dssCode, shareId, storeRootDir, - openBISService, mailClient, dataSetValidator, dataSourceQueryService, - new DynamicTransactionQueryFactory(), notifySuccessfulRegistration, - threadParameters, useIsFinishedMarkerFile, deleteUnidentified, - preRegistrationScriptOrNull, postRegistrationScriptOrNull, - validationScriptsOrNull); + dssInternalTempDir, openBISService, mailClient, dataSetValidator, + dataSourceQueryService, new DynamicTransactionQueryFactory(), + notifySuccessfulRegistration, threadParameters, useIsFinishedMarkerFile, + deleteUnidentified, preRegistrationScriptOrNull, + postRegistrationScriptOrNull, validationScriptsOrNull); ITopLevelDataSetRegistrator registrator = ClassUtils diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/TopLevelDataSetRegistratorGlobalState.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/TopLevelDataSetRegistratorGlobalState.java index 59c86bd84d9..4eea2ca4164 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/TopLevelDataSetRegistratorGlobalState.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/TopLevelDataSetRegistratorGlobalState.java @@ -48,6 +48,8 @@ public class TopLevelDataSetRegistratorGlobalState private final File storeRootDir; + private final File dssInternalTempDir; + private final IEncapsulatedOpenBISService openBisService; private final IMailClient mailClient; @@ -85,13 +87,14 @@ public class TopLevelDataSetRegistratorGlobalState * @param threadParameters */ public TopLevelDataSetRegistratorGlobalState(String dssCode, String shareId, File storeRootDir, - IEncapsulatedOpenBISService openBisService, IMailClient mailClient, - IDataSetValidator dataSetValidator, IDataSourceQueryService dataSourceQueryService, + File dssInternalTempDir, IEncapsulatedOpenBISService openBisService, + IMailClient mailClient, IDataSetValidator dataSetValidator, + IDataSourceQueryService dataSourceQueryService, DynamicTransactionQueryFactory dynamicTransactionQueryFactory, boolean notifySuccessfulRegistration, ThreadParameters threadParameters) { - this(dssCode, shareId, storeRootDir, openBisService, mailClient, dataSetValidator, - dataSourceQueryService, dynamicTransactionQueryFactory, + this(dssCode, shareId, storeRootDir, dssInternalTempDir, openBisService, mailClient, + dataSetValidator, dataSourceQueryService, dynamicTransactionQueryFactory, notifySuccessfulRegistration, threadParameters, threadParameters .useIsFinishedMarkerFile(), threadParameters.deleteUnidentified(), threadParameters.tryGetPreRegistrationScript(), threadParameters @@ -99,8 +102,9 @@ public class TopLevelDataSetRegistratorGlobalState } public TopLevelDataSetRegistratorGlobalState(String dssCode, String shareId, File storeRootDir, - IEncapsulatedOpenBISService openBisService, IMailClient mailClient, - IDataSetValidator dataSetValidator, IDataSourceQueryService dataSourceQueryService, + File dssInternalTempDir, IEncapsulatedOpenBISService openBisService, + IMailClient mailClient, IDataSetValidator dataSetValidator, + IDataSourceQueryService dataSourceQueryService, DynamicTransactionQueryFactory dynamicTransactionQueryFactory, boolean notifySuccessfulRegistration, ThreadParameters threadParameters, boolean useIsFinishedMarkerFile, boolean deleteUnidentified, @@ -111,6 +115,7 @@ public class TopLevelDataSetRegistratorGlobalState this.dssCode = dssCode; this.shareId = shareId; this.storeRootDir = storeRootDir; + this.dssInternalTempDir = dssInternalTempDir; this.openBisService = openBisService; this.mailClient = mailClient; this.dataSetValidator = dataSetValidator; @@ -140,6 +145,14 @@ public class TopLevelDataSetRegistratorGlobalState return storeRootDir; } + /** + * Get a directory that can be used for temporary files, and is local to the server. + */ + public File getDssInternalTempDir() + { + return dssInternalTempDir; + } + public IEncapsulatedOpenBISService getOpenBisService() { return openBisService; diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/AbstractOmniscientTopLevelDataSetRegistrator.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/AbstractOmniscientTopLevelDataSetRegistrator.java index 1760346d142..3ba071c406d 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/AbstractOmniscientTopLevelDataSetRegistrator.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/AbstractOmniscientTopLevelDataSetRegistrator.java @@ -236,7 +236,8 @@ public abstract class AbstractOmniscientTopLevelDataSetRegistrator<T extends Dat new ReentrantLock(), FileOperations.getMonitoredInstanceForCurrentThread(), onErrorDecision); - DataSetRegistrationTransaction.rollbackDeadTransactions(globalState.getStoreRootDir()); + DataSetRegistrationTransaction.rollbackDeadTransactions(globalState + .getDssInternalTempDir()); } diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetRegistrationService.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetRegistrationService.java index c32f960d40c..ab8862d86ab 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetRegistrationService.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetRegistrationService.java @@ -147,7 +147,7 @@ public class DataSetRegistrationService<T extends DataSetInformation> implements // Clone this service for the transaction to keep them independent DataSetRegistrationTransaction<T> transaction = new DataSetRegistrationTransaction<T>(registrator.getGlobalState() - .getStoreRootDir(), workingDirectory, stagingDirectory, this, + .getDssInternalTempDir(), workingDirectory, stagingDirectory, this, detailsFactory); transactions.add(transaction); diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ConfigParameters.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ConfigParameters.java index 63f06d1e1a4..d568b8039e3 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ConfigParameters.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ConfigParameters.java @@ -32,6 +32,7 @@ import ch.systemsx.cisd.common.utilities.PropertyParametersUtil; import ch.systemsx.cisd.common.utilities.PropertyParametersUtil.SectionProperties; import ch.systemsx.cisd.common.utilities.PropertyUtils; import ch.systemsx.cisd.openbis.dss.generic.shared.dto.PluginServletConfig; +import ch.systemsx.cisd.openbis.dss.generic.shared.utils.DssPropertyParametersUtil; /** * Configuration parameters for the Data Set Download Server. @@ -97,6 +98,8 @@ public final class ConfigParameters implements IServletPropertiesManager private final File storePath; + private final File dssInternalTempDir; + private final File rpcIncomingDirectory; private final int port; @@ -136,6 +139,7 @@ public final class ConfigParameters implements IServletPropertiesManager { this.properties = properties; storePath = new File(PropertyUtils.getMandatoryProperty(properties, STOREROOT_DIR_KEY)); + dssInternalTempDir = getInternalTempDirectory(properties); rpcIncomingDirectory = getRpcIncomingDirectory(properties); port = getMandatoryIntegerProperty(properties, PORT_KEY); serverURL = PropertyUtils.getMandatoryProperty(properties, SERVER_URL_KEY); @@ -162,14 +166,19 @@ public final class ConfigParameters implements IServletPropertiesManager DEFAULT_AUTH_CACHE_CLEANUP_TIMER_PERIOD_MINS); pluginServlets = new LinkedHashMap<String, PluginServletConfig>(); SectionProperties[] pluginServicesProperties = - PropertyParametersUtil.extractSectionProperties(properties, - PLUGIN_SERVICES_LIST_KEY, false); + PropertyParametersUtil.extractSectionProperties(properties, + PLUGIN_SERVICES_LIST_KEY, false); addServletsProperties("", pluginServicesProperties); webstartJarPath = PropertyUtils.getProperty(properties, WEBSTART_JAR_PATH, WEBSTART_JAR_PATH_DEFAULT); } + private File getInternalTempDirectory(Properties properties) + { + return DssPropertyParametersUtil.getDssInternalTempDir(properties); + } + private static File getRpcIncomingDirectory(final Properties properties) { String incomingDirPath = PropertyUtils.getProperty(properties, RPC_INCOMING_DIR); @@ -233,6 +242,11 @@ public final class ConfigParameters implements IServletPropertiesManager return rpcIncomingDirectory; } + public File getDssInternalTempDir() + { + return dssInternalTempDir; + } + public final int getPort() { return port; @@ -308,6 +322,7 @@ public final class ConfigParameters implements IServletPropertiesManager if (operationLog.isInfoEnabled()) { operationLog.info(String.format("Store root directory: '%s'.", storePath)); + operationLog.info(String.format("Temp file directory: '%s'.", dssInternalTempDir)); operationLog.info(String.format("RPC incoming directory: '%s'.", rpcIncomingDirectory)); operationLog.info(String.format("Port number: %d.", port)); operationLog.info(String.format("URL of openBIS server: '%s'.", serverURL)); diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/DssPropertyParametersUtil.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/DssPropertyParametersUtil.java index eb0b16594c5..5f5640d3c1a 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/DssPropertyParametersUtil.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/DssPropertyParametersUtil.java @@ -21,6 +21,7 @@ import java.util.Map.Entry; import java.util.Properties; import java.util.Set; +import ch.systemsx.cisd.common.exceptions.ConfigurationFailureException; import ch.systemsx.cisd.common.filesystem.FileUtilities; import ch.systemsx.cisd.common.utilities.ExtendedProperties; import ch.systemsx.cisd.common.utilities.PropertyUtils; @@ -43,6 +44,11 @@ public class DssPropertyParametersUtil public static final String SERVER_URL_KEY = "server-url"; + /** + * Temp directory for dss usage. + */ + static final String DSS_TEMP_DIR_PATH = "dss-temp-dir"; + /** Location of service properties file. */ public static final String SERVICE_PROPERTIES_FILE = "etc/service.properties"; @@ -57,7 +63,8 @@ public class DssPropertyParametersUtil Properties properties = PropertyUtils.loadProperties(filePath); Properties systemProperties = System.getProperties(); ExtendedProperties dssSystemProperties = - ExtendedProperties.getSubset(systemProperties, OPENBIS_DSS_SYSTEM_PROPERTIES_PREFIX, true); + ExtendedProperties.getSubset(systemProperties, + OPENBIS_DSS_SYSTEM_PROPERTIES_PREFIX, true); Set<Entry<Object, Object>> entrySet = dssSystemProperties.entrySet(); for (Entry<Object, Object> entry : entrySet) { @@ -81,4 +88,23 @@ public class DssPropertyParametersUtil { return PropertyUtils.getMandatoryProperty(serviceProperties, SERVER_URL_KEY); } + + public static File getDssInternalTempDir(final Properties properties) + { + String defaultTempDirPath = + new File(System.getProperty("user.dir"), "dss-tmp").getAbsolutePath(); + String tempDirPath = + PropertyUtils.getProperty(properties, DSS_TEMP_DIR_PATH, defaultTempDirPath); + File tempDir = new File(tempDirPath); + tempDir.mkdirs(); + if (false == tempDir.exists()) + { + throw new ConfigurationFailureException( + "Could not create an internal temp directory for the data store server at path: " + + tempDir.getPath() + + ". Please make sure this directory exists and is writable by the data store server or provide an alternate using directory for the " + + DSS_TEMP_DIR_PATH + " configuration setting"); + } + return tempDir; + } } diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/TransferredDataSetHandlerTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/TransferredDataSetHandlerTest.java index 826dcb9c39f..b7caa65e228 100644 --- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/TransferredDataSetHandlerTest.java +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/TransferredDataSetHandlerTest.java @@ -287,8 +287,9 @@ public final class TransferredDataSetHandlerTest extends AbstractFileSystemTestC TopLevelDataSetRegistratorGlobalState globalState = new TopLevelDataSetRegistratorGlobalState("dss", ch.systemsx.cisd.openbis.dss.generic.shared.Constants.DEFAULT_SHARE_ID, - workingDirectory, authorizedLimsService, mailClient, dataSetValidator, - null, new DynamicTransactionQueryFactory(), true, threadParameters); + workingDirectory, workingDirectory, authorizedLimsService, mailClient, + dataSetValidator, null, new DynamicTransactionQueryFactory(), true, + threadParameters); context.checking(new Expectations() { @@ -806,8 +807,9 @@ public final class TransferredDataSetHandlerTest extends AbstractFileSystemTestC TopLevelDataSetRegistratorGlobalState globalState = new TopLevelDataSetRegistratorGlobalState("dss", ch.systemsx.cisd.openbis.dss.generic.shared.Constants.DEFAULT_SHARE_ID, - workingDirectory, authorizedLimsService, mailClient, dataSetValidator, - null, new DynamicTransactionQueryFactory(), true, threadParameters); + workingDirectory, workingDirectory, authorizedLimsService, mailClient, + dataSetValidator, null, new DynamicTransactionQueryFactory(), true, + threadParameters); context.checking(new Expectations() { { diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/AbstractJythonDataSetHandlerTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/AbstractJythonDataSetHandlerTest.java index 44047956024..6034333437f 100644 --- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/AbstractJythonDataSetHandlerTest.java +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/AbstractJythonDataSetHandlerTest.java @@ -173,8 +173,8 @@ public abstract class AbstractJythonDataSetHandlerTest extends AbstractFileSyste TopLevelDataSetRegistratorGlobalState globalState = new TopLevelDataSetRegistratorGlobalState("dss", ch.systemsx.cisd.openbis.dss.generic.shared.Constants.DEFAULT_SHARE_ID, - workingDirectory, openBisService, mailClient, dataSetValidator, - dataSourceQueryService, myFactory, true, threadParameters); + workingDirectory, workingDirectory, openBisService, mailClient, + dataSetValidator, dataSourceQueryService, myFactory, true, threadParameters); return globalState; } diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/DataSetStorageRollbackerTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/DataSetStorageRollbackerTest.java index f3e1832298b..43dffe1af82 100644 --- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/DataSetStorageRollbackerTest.java +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/DataSetStorageRollbackerTest.java @@ -111,8 +111,9 @@ public class DataSetStorageRollbackerTest extends AbstractFileSystemTestCase TopLevelDataSetRegistratorGlobalState globalState = new TopLevelDataSetRegistratorGlobalState("dss", ch.systemsx.cisd.openbis.dss.generic.shared.Constants.DEFAULT_SHARE_ID, - workingDirectory, openBisService, mailClient, dataSetValidator, null, - new DynamicTransactionQueryFactory(), true, threadParameters); + workingDirectory, workingDirectory, openBisService, mailClient, + dataSetValidator, null, new DynamicTransactionQueryFactory(), true, + threadParameters); return globalState; } diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransactionTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransactionTest.java index 4df92f78de4..130a17d29ba 100644 --- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransactionTest.java +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransactionTest.java @@ -421,8 +421,9 @@ public class DataSetRegistrationTransactionTest extends AbstractFileSystemTestCa TopLevelDataSetRegistratorGlobalState globalState = new TopLevelDataSetRegistratorGlobalState("dss", ch.systemsx.cisd.openbis.dss.generic.shared.Constants.DEFAULT_SHARE_ID, - workingDirectory, openBisService, mailClient, dataSetValidator, null, - new DynamicTransactionQueryFactory(), true, threadParameters); + workingDirectory, workingDirectory, openBisService, mailClient, + dataSetValidator, null, new DynamicTransactionQueryFactory(), true, + threadParameters); return globalState; } -- GitLab