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