From 94f8b5140806db7da70c1734f9921e83f2a2c545 Mon Sep 17 00:00:00 2001 From: cramakri <cramakri> Date: Tue, 10 Jan 2012 15:45:51 +0000 Subject: [PATCH] LMS-2738 Added support for registration log directory to properties. SVN: 24139 --- .../ch/systemsx/cisd/etlserver/ETLDaemon.java | 59 +++++++++++++------ .../dss/generic/server/ConfigParameters.java | 7 ++- .../utils/DssPropertyParametersUtil.java | 25 ++++++++ .../systemtests/DssComponentTest.java | 16 ++++- 4 files changed, 86 insertions(+), 21 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 b47743aedc7..7c14ee2ce0f 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/ETLDaemon.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/ETLDaemon.java @@ -233,8 +233,8 @@ public final class ETLDaemon File incomingDataDirectory = threadParameters.getIncomingDataDirectory(); ITopLevelDataSetRegistrator topLevelRegistrator = createProcessingThread(parameters, threadParameters, openBISService, - highwaterMarkWatcher, mailClient, dataSetValidator, dataSourceQueryService, - notifySuccessfulRegistration); + highwaterMarkWatcher, mailClient, dataSetValidator, dataSourceQueryService, + notifySuccessfulRegistration); operationLog.info("[" + threadParameters.getThreadName() + "]: Data sets drop into '" + incomingDataDirectory + "' will be stored in share " + topLevelRegistrator.getGlobalState().getShareId() + "."); @@ -302,7 +302,7 @@ public final class ETLDaemon private final static ITopLevelDataSetRegistrator createProcessingThread( final Parameters parameters, - final ThreadParameters threadParameters, + final ThreadParameters threadParameters, final IEncapsulatedOpenBISService authorizedLimsService, final HighwaterMarkWatcher highwaterMarkWatcher, final IMailClient mailClient, final IDataSetValidator dataSetValidator, @@ -333,6 +333,36 @@ public final class ETLDaemon return pathHandler; } + /** + * Utility class for initializing top level data set registrators. + * + * @author Chandrasekhar Ramakrishnan + */ + private static class TopLevelDataSetRegistratorInititializationData + { + private final File storeRootDir; + + private final File dssInternalTempDir; + + private final File dssRegistrationLogDir; + + private final String dssCode; + + private final String shareId; + + public TopLevelDataSetRegistratorInititializationData( + final Properties properties, final ThreadParameters threadParameters, final IEncapsulatedOpenBISService openBISService) + { + storeRootDir = DssPropertyParametersUtil.getStoreRootDir(properties); + migrateStoreRootDir(storeRootDir, openBISService.getHomeDatabaseInstance()); + + dssInternalTempDir = DssPropertyParametersUtil.getDssInternalTempDir(properties); + dssRegistrationLogDir = DssPropertyParametersUtil.getDssRegistrationLogDir(properties); + dssCode = DssPropertyParametersUtil.getDataStoreCode(properties); + shareId = getShareId(threadParameters, storeRootDir); + } + } + public static ITopLevelDataSetRegistrator createTopLevelDataSetRegistrator( final Properties properties, final ThreadParameters threadParameters, final IEncapsulatedOpenBISService openBISService, final IMailClient mailClient, @@ -340,14 +370,11 @@ public final class ETLDaemon IDataSourceQueryService dataSourceQueryService, final boolean notifySuccessfulRegistration) { - final File storeRootDir = DssPropertyParametersUtil.getStoreRootDir(properties); - File dssInternalTempDir = DssPropertyParametersUtil.getDssInternalTempDir(properties); - migrateStoreRootDir(storeRootDir, openBISService.getHomeDatabaseInstance()); - String dssCode = DssPropertyParametersUtil.getDataStoreCode(properties); - String shareId = getShareId(threadParameters, storeRootDir); + TopLevelDataSetRegistratorInititializationData initializationData = new TopLevelDataSetRegistratorInititializationData(properties, threadParameters, openBISService); + TopLevelDataSetRegistratorGlobalState globalState = - new TopLevelDataSetRegistratorGlobalState(dssCode, shareId, storeRootDir, - dssInternalTempDir, openBISService, mailClient, dataSetValidator, + new TopLevelDataSetRegistratorGlobalState(initializationData.dssCode, initializationData.shareId, initializationData.storeRootDir, + initializationData.dssInternalTempDir, openBISService, mailClient, dataSetValidator, dataSourceQueryService, new DynamicTransactionQueryFactory(), notifySuccessfulRegistration, threadParameters); @@ -372,15 +399,11 @@ public final class ETLDaemon String postRegistrationScriptOrNull, String[] validationScriptsOrNull, Class<?> defaultTopLevelDataSetRegistratorClass) { - final File storeRootDir = DssPropertyParametersUtil.getStoreRootDir(properties); - File dssInternalTempDir = DssPropertyParametersUtil.getDssInternalTempDir(properties); - migrateStoreRootDir(storeRootDir, openBISService.getHomeDatabaseInstance()); - String dssCode = DssPropertyParametersUtil.getDataStoreCode(properties); - String shareId = getShareId(threadParameters, storeRootDir); + TopLevelDataSetRegistratorInititializationData initializationData = new TopLevelDataSetRegistratorInititializationData(properties, threadParameters, openBISService); TopLevelDataSetRegistratorGlobalState globalState = - new TopLevelDataSetRegistratorGlobalState(dssCode, shareId, storeRootDir, - dssInternalTempDir, openBISService, mailClient, dataSetValidator, + new TopLevelDataSetRegistratorGlobalState(initializationData.dssCode, initializationData.shareId, initializationData.storeRootDir, + initializationData.dssInternalTempDir, openBISService, mailClient, dataSetValidator, dataSourceQueryService, new DynamicTransactionQueryFactory(), notifySuccessfulRegistration, threadParameters, useIsFinishedMarkerFile, deleteUnidentified, preRegistrationScriptOrNull, @@ -400,7 +423,7 @@ public final class ETLDaemon { File incomingDirectory = threadParams.getIncomingDataDirectory(); return SegmentedStoreUtils.findIncomingShare(incomingDirectory, storeRoot, - new Log4jSimpleLogger(operationLog)); + new Log4jSimpleLogger(operationLog)); } private static FileFilter createFileFilter(File incomingDataDirectory, 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 6a3fd289fd0..64d2b4f5d2c 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 @@ -100,6 +100,8 @@ public final class ConfigParameters implements IServletPropertiesManager private final File dssInternalTempDir; + private final File dssRegistrationLogDir; + private final int port; private final String serverURL; @@ -142,6 +144,7 @@ public final class ConfigParameters implements IServletPropertiesManager PropertyUtils.getMandatoryProperty(properties, STOREROOT_DIR_KEY); storePath = new File(storeRootDir); dssInternalTempDir = getInternalTempDirectory(properties); + dssRegistrationLogDir = DssPropertyParametersUtil.getDssRegistrationLogDir(properties); port = getMandatoryIntegerProperty(properties, PORT_KEY); serverURL = PropertyUtils.getMandatoryProperty(properties, SERVER_URL_KEY); downloadURL = PropertyUtils.getMandatoryProperty(properties, DOWNLOAD_URL); @@ -314,13 +317,13 @@ public final class ConfigParameters implements IServletPropertiesManager { operationLog.info(String.format("Store root directory: '%s'.", storePath)); operationLog.info(String.format("Temp file directory: '%s'.", dssInternalTempDir)); + operationLog.info(String.format("DSS registration log directory: '%s'.", dssRegistrationLogDir)); operationLog.info(String.format("Port number: %d.", port)); operationLog.info(String.format("URL of openBIS server: '%s'.", serverURL)); operationLog.info(String.format("Session timeout (seconds): %d.", sessionTimeout)); operationLog.info(String.format("Use SSL: %s.", useSSL)); operationLog.info(String.format("Use NIO sockets: %s", useNIO)); - operationLog.info(String.format("Authorization cache expiration time (minutes): %s", - authCacheExpirationTimeMins)); + operationLog.info(String.format("Authorization cache expiration time (minutes): %s", authCacheExpirationTimeMins)); operationLog.info(String.format( "Authorization cache cleanup timer period (minutes): %s", authCacheCleanupTimerPeriodMins)); 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 3ccafcc7435..10873ff3251 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 @@ -49,6 +49,11 @@ public class DssPropertyParametersUtil */ static final String DSS_TEMP_DIR_PATH = "dss-temp-dir"; + /** + * Directory for registration log files. + */ + static final String DSS_REGISTRATION_LOG_DIR_PATH = "dss-registration-log-dir"; + /** Location of service properties file. */ public static final String SERVICE_PROPERTIES_FILE = "etc/service.properties"; @@ -112,4 +117,24 @@ public class DssPropertyParametersUtil } return tempDir; } + + public static File getDssRegistrationLogDir(final Properties properties) + { + String defaultRegistrationLogDirPath = + new File(System.getProperty("user.dir"), "log-registrations").getAbsolutePath(); + String registrationLogDirPath = + PropertyUtils.getProperty(properties, DSS_REGISTRATION_LOG_DIR_PATH, + defaultRegistrationLogDirPath); + File registrationLogDir = new File(registrationLogDirPath); + registrationLogDir.mkdirs(); + if (false == registrationLogDir.exists()) + { + throw new ConfigurationFailureException( + "Could not create a directory for storing for registration logs at path: " + + registrationLogDir.getPath() + + ". Please make sure this directory exists and is writable by the data store server or provide an alternate using directory for the " + + DSS_REGISTRATION_LOG_DIR_PATH + " configuration setting"); + } + return registrationLogDir; + } } diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/datastoreserver/systemtests/DssComponentTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/datastoreserver/systemtests/DssComponentTest.java index b0d1f9d1561..630609ab050 100644 --- a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/datastoreserver/systemtests/DssComponentTest.java +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/datastoreserver/systemtests/DssComponentTest.java @@ -25,6 +25,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; +import java.util.Properties; import org.apache.commons.io.IOUtils; import org.apache.commons.lang.time.DateUtils; @@ -44,6 +45,7 @@ import ch.systemsx.cisd.openbis.dss.generic.shared.api.v1.NewDataSetDTO; import ch.systemsx.cisd.openbis.dss.generic.shared.api.v1.NewDataSetDTO.DataSetOwner; import ch.systemsx.cisd.openbis.dss.generic.shared.api.v1.NewDataSetDTO.DataSetOwnerType; import ch.systemsx.cisd.openbis.dss.generic.shared.api.v1.validation.ValidationError; +import ch.systemsx.cisd.openbis.dss.generic.shared.utils.DssPropertyParametersUtil; import ch.systemsx.cisd.openbis.generic.shared.dto.SimpleDataSetInformationDTO; /** @@ -84,6 +86,14 @@ public class DssComponentTest extends SystemTestCase checkDataSet(dataSet); } + @Test(dependsOnMethods = "testPutDataSet") + public void testRegistrationLog() throws Exception + { + File registrationLogDir = getRegistrationLogDir(); + assertTrue(registrationLogDir.exists()); + + } + @Test public void testValidateDataSet() throws Exception { @@ -133,7 +143,7 @@ public class DssComponentTest extends SystemTestCase assertEquals(fileInfoString("original/my-data/data/1.data", 5), files[5].toString()); assertEquals(fileInfoString("original/my-data/data/2.data", 7), files[6].toString()); } - + private static String fileInfoString(String startPath, String pathInListing, long length) { return String.format("FileInfoDssDTO[%s/%s,%s,%d]", startPath, pathInListing, @@ -265,4 +275,8 @@ public class DssComponentTest extends SystemTestCase return output.toString(); } + private File getRegistrationLogDir() + { + return DssPropertyParametersUtil.getDssRegistrationLogDir(new Properties()); + } } -- GitLab