From ef72a5f823f29b9af267f7154a9579047a9fd526 Mon Sep 17 00:00:00 2001 From: jakubs <jakubs> Date: Fri, 28 Sep 2012 14:57:30 +0000 Subject: [PATCH] SP-278 BIS-200 Add a new server level property that can be used to specify a watermark for the recovery state directory SVN: 26852 --- .../ch/systemsx/cisd/etlserver/ETLDaemon.java | 40 +++++++++++++------ 1 file changed, 28 insertions(+), 12 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 7bf479f615a..ccff2a6a1bc 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/ETLDaemon.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/ETLDaemon.java @@ -46,6 +46,7 @@ import ch.systemsx.cisd.common.filesystem.DirectoryScanningTimerTask.IScannedSto import ch.systemsx.cisd.common.filesystem.FaultyPathDirectoryScanningHandler; import ch.systemsx.cisd.common.filesystem.FaultyPathDirectoryScanningHandler.IFaultyPathDirectoryScanningHandlerDelegate; import ch.systemsx.cisd.common.filesystem.FileUtilities; +import ch.systemsx.cisd.common.filesystem.HostAwareFile; import ch.systemsx.cisd.common.filesystem.IDirectoryScanningHandler; import ch.systemsx.cisd.common.filesystem.IStoreItemFilter; import ch.systemsx.cisd.common.filesystem.LastModificationChecker; @@ -104,6 +105,12 @@ public final class ETLDaemon static final String NOTIFY_SUCCESSFUL_REGISTRATION = "notify-successful-registration"; + /** + * The property name under which we specify a <code>long</code> for the high water mark for the + * recovery directory (in <i>kilobytes</i>). + */ + public static final String RECOVERY_HIGHWATER_MARK_PROPERTY_KEY = "recovery-highwater-mark"; + private static final Logger operationLog = LogFactory.getLogger(LogCategory.OPERATION, ETLDaemon.class); @@ -235,8 +242,7 @@ public final class ETLDaemon IEncapsulatedOpenBISService openBISService = ServiceProvider.getOpenBISService(); final Properties properties = parameters.getProperties(); final boolean notifySuccessfulRegistration = getNotifySuccessfulRegistration(properties); - final HighwaterMarkWatcher highwaterMarkWatcher = - new HighwaterMarkWatcher(getHighwaterMark(properties)); + IDataSetValidator dataSetValidator = new DataSetValidator(properties); final Properties mailProperties = Parameters.createMailProperties(properties); final IMailClient mailClient = new MailClient(mailProperties); @@ -246,8 +252,7 @@ public final class ETLDaemon File incomingDataDirectory = threadParameters.getIncomingDataDirectory(); ITopLevelDataSetRegistrator topLevelRegistrator = createProcessingThread(parameters, threadParameters, openBISService, - highwaterMarkWatcher, mailClient, dataSetValidator, - notifySuccessfulRegistration); + mailClient, dataSetValidator, notifySuccessfulRegistration); operationLog.info("[" + threadParameters.getThreadName() + "]: Data sets drop into '" + incomingDataDirectory + "' will be stored in share " + topLevelRegistrator.getGlobalState().getShareId() + "."); @@ -308,6 +313,11 @@ public final class ETLDaemon HostAwareFileWithHighwaterMark.HIGHWATER_MARK_PROPERTY_KEY, -1L); } + private final static long getRecoveryHighwaterMark(final Properties properties) + { + return PropertyUtils.getLong(properties, RECOVERY_HIGHWATER_MARK_PROPERTY_KEY, -1L); + } + private final static boolean getNotifySuccessfulRegistration(final Properties properties) { return PropertyUtils.getBoolean(properties, NOTIFY_SUCCESSFUL_REGISTRATION, false); @@ -315,22 +325,27 @@ public final class ETLDaemon private final static ITopLevelDataSetRegistrator createProcessingThread( final Parameters parameters, final ThreadParameters threadParameters, - final IEncapsulatedOpenBISService authorizedLimsService, - final HighwaterMarkWatcher highwaterMarkWatcher, final IMailClient mailClient, - final IDataSetValidator dataSetValidator, - final boolean notifySuccessfulRegistration) + final IEncapsulatedOpenBISService authorizedLimsService, final IMailClient mailClient, + final IDataSetValidator dataSetValidator, final boolean notifySuccessfulRegistration) { + final HighwaterMarkWatcher highwaterMarkWatcher = + new HighwaterMarkWatcher(getHighwaterMark(parameters.getProperties())); final File incomingDataDirectory = threadParameters.getIncomingDataDirectory(); final File recoveryStateDirectory = DssPropertyParametersUtil.getDssRecoveryStateDir(parameters.getProperties()); + HostAwareFile hostAwareIncomingDataDirectory = new HostAwareFile(incomingDataDirectory); + HostAwareFileWithHighwaterMark hostAwareRecoveryStateDirectory = + new HostAwareFileWithHighwaterMark(recoveryStateDirectory.getPath(), + getRecoveryHighwaterMark(parameters.getProperties())); + final ITopLevelDataSetRegistrator pathHandler = createTopLevelDataSetRegistrator(parameters.getProperties(), threadParameters, authorizedLimsService, mailClient, dataSetValidator, new DataSourceQueryService(), notifySuccessfulRegistration); final HighwaterMarkDirectoryScanningHandler directoryScanningHandler = createDirectoryScanningHandler(pathHandler, highwaterMarkWatcher, - incomingDataDirectory, recoveryStateDirectory, + hostAwareIncomingDataDirectory, hostAwareRecoveryStateDirectory, threadParameters.reprocessFaultyDatasets(), pathHandler); FileFilter fileFilter = createFileFilter(incomingDataDirectory, threadParameters.useIsFinishedMarkerFile(), @@ -560,15 +575,16 @@ public final class ETLDaemon private final static HighwaterMarkDirectoryScanningHandler createDirectoryScanningHandler( final IStopSignaler stopSignaler, final HighwaterMarkWatcher highwaterMarkWatcher, - final File incomingDataDirectory, final File recoveryStateDirectory, + final HostAwareFile incomingDataDirectory, final HostAwareFile recoveryStateDirectory, boolean reprocessFaultyDatasets, IFaultyPathDirectoryScanningHandlerDelegate faultyPathHandlerDelegate) { final IDirectoryScanningHandler faultyPathHandler = - createFaultyPathHandler(stopSignaler, incomingDataDirectory, + createFaultyPathHandler(stopSignaler, incomingDataDirectory.getLocalFile(), reprocessFaultyDatasets, faultyPathHandlerDelegate); return new HighwaterMarkDirectoryScanningHandler(faultyPathHandler, highwaterMarkWatcher, - incomingDataDirectory, recoveryStateDirectory); + new HostAwareFile[] + { incomingDataDirectory, recoveryStateDirectory }); } private static IDirectoryScanningHandler createFaultyPathHandler( -- GitLab