From 2d7ff9bc3349b7d80bf82303056033106fc20247 Mon Sep 17 00:00:00 2001 From: jakubs <jakubs> Date: Mon, 21 May 2012 08:48:16 +0000 Subject: [PATCH] SP-45, BIS-21 add a new directory where the recovery marker files will be stored SVN: 25302 --- ...TopLevelDataSetRegistratorGlobalState.java | 35 +++++++++++-------- .../DataSetStorageRecoveryManager.java | 22 ++++++------ .../IDataSetStorageRecoveryManager.java | 2 ++ .../AbstractJythonDataSetHandlerTest.java | 9 ++--- 4 files changed, 40 insertions(+), 28 deletions(-) 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 93d19f4a31f..b0bd6e575ac 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/TopLevelDataSetRegistratorGlobalState.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/TopLevelDataSetRegistratorGlobalState.java @@ -55,8 +55,6 @@ public class TopLevelDataSetRegistratorGlobalState private final File dssRegistrationLogDir; - private final File dropboxRecoveryStateDir; - private final File preStagingDir; private final File stagingDir; @@ -125,8 +123,6 @@ public class TopLevelDataSetRegistratorGlobalState this.storeRootDir = storeRootDir; this.dssInternalTempDir = dssInternalTempDir; this.dssRegistrationLogDir = dssRegistrationLogDir; - this.dropboxRecoveryStateDir = - new File(dssRecoveryStateDir, threadParameters.getThreadName()); this.preStagingDir = getPreStagingDir(storeRootDir, shareId, threadParameters.getThreadProperties()); this.stagingDir = @@ -145,12 +141,22 @@ public class TopLevelDataSetRegistratorGlobalState this.preRegistrationScriptOrNull = preRegistrationScriptOrNull; this.postRegistrationScriptOrNull = postRegistrationScriptOrNull; this.validationScriptsOrNull = validationScriptsOrNull; + + File dropboxRecoveryStateDir = + new File(dssRecoveryStateDir, threadParameters.getThreadName()); + File recoveryMarkerFilesDirectory = + new File(getRecoveryMarkerDir(storeRootDir, shareId, + threadParameters.getThreadProperties()), threadParameters.getThreadName()); + + dropboxRecoveryStateDir.mkdirs(); + recoveryMarkerFilesDirectory.mkdirs(); + this.storageRecoveryManager = storageRecoveryManager; - this.storageRecoveryManager.setDropboxRecoveryStateDir(this.dropboxRecoveryStateDir); + this.storageRecoveryManager.setDropboxRecoveryStateDir(dropboxRecoveryStateDir); + this.storageRecoveryManager.setRecoveryMarkerFilesDir(recoveryMarkerFilesDirectory); // Initialize the DSS Registration Log Directory new DssRegistrationLogDirectoryHelper(dssRegistrationLogDir).initializeSubdirectories(); - dropboxRecoveryStateDir.mkdirs(); } public String getDssCode() @@ -184,14 +190,6 @@ public class TopLevelDataSetRegistratorGlobalState return dssRegistrationLogDir; } - /** - * Get the directory that holds the recovery state for this dropbox. - */ - public File getDropboxRecoveryStateDir() - { - return dropboxRecoveryStateDir; - } - /** * Get the directory used for pre-staging. This holds a hardlink copy of the incoming data. */ @@ -306,6 +304,8 @@ public class TopLevelDataSetRegistratorGlobalState public static final String PRE_COMMIT_DIR = "pre-commit-dir"; + public static final String RECOVERY_MARKER_DIR = "recovery-marker-dir"; + private static File getStagingDir(File storeRoot, String shareId, Properties threadProperties) { return getShareLocalDir(storeRoot, shareId, threadProperties, STAGING_DIR, "staging"); @@ -322,6 +322,13 @@ public class TopLevelDataSetRegistratorGlobalState return getShareLocalDir(storeRoot, shareId, threadProperties, PRE_COMMIT_DIR, "pre-commit"); } + private static File getRecoveryMarkerDir(File storeRoot, String shareId, + Properties threadProperties) + { + return getShareLocalDir(storeRoot, shareId, threadProperties, RECOVERY_MARKER_DIR, + "recovery-marker"); + } + /** * Get a directory local to the share, respecting the user override, if one is specified, and * defaulting to the defaultDirName. diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetStorageRecoveryManager.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetStorageRecoveryManager.java index 12e4005d141..07a0930a33e 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetStorageRecoveryManager.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetStorageRecoveryManager.java @@ -36,12 +36,14 @@ public class DataSetStorageRecoveryManager implements IDataSetStorageRecoveryMan private static final String PRECOMMIT_SERIALIZED = ".PRECOMMIT_SERIALIZED"; private static final String PROCESSING_MARKER = ".PROCESSING_MARKER"; - + static final Logger operationLog = LogFactory.getLogger(LogCategory.OPERATION, DataSetStorageRecoveryManager.class); private File dropboxRecoveryStateDir; + private File recoveryMarkerFilesDir; + public <T extends DataSetInformation> void checkpointPrecommittedState( DataSetStorageAlgorithmRunner<T> runner) { @@ -81,9 +83,9 @@ public class DataSetStorageRecoveryManager implements IDataSetStorageRecoveryMan */ public File getProcessingMarkerFile(File incoming) { - return new File(incoming.getParentFile(), incoming.getName() + PROCESSING_MARKER); + return new File(recoveryMarkerFilesDir, incoming.getName() + PROCESSING_MARKER); } - + private <T extends DataSetInformation> File getSerializedFile( DataSetStorageAlgorithmRunner<T> runner) { @@ -118,9 +120,9 @@ public class DataSetStorageRecoveryManager implements IDataSetStorageRecoveryMan { File markerFile = getProcessingMarkerFile(runner); File recoveryState = getSerializedFile(runner); - - operationLog.info("Cleanup recovery with marker file "+ markerFile); - + + operationLog.info("Cleanup recovery with marker file " + markerFile); + runner.getRollbackStack().setLockedState(false); // Cleanup the state we have accumulated FileUtilities.delete(markerFile); @@ -136,14 +138,14 @@ public class DataSetStorageRecoveryManager implements IDataSetStorageRecoveryMan return true; } - public static boolean isRecoveryFile(File file) + public void setDropboxRecoveryStateDir(File dropboxRecoveryStateDir) { - return file.getName().endsWith(PROCESSING_MARKER); + this.dropboxRecoveryStateDir = dropboxRecoveryStateDir; } - public void setDropboxRecoveryStateDir(File dropboxRecoveryStateDir) + public void setRecoveryMarkerFilesDir(File recoveryMarkerFileDir) { - this.dropboxRecoveryStateDir = dropboxRecoveryStateDir; + this.recoveryMarkerFilesDir = recoveryMarkerFileDir; } } diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/IDataSetStorageRecoveryManager.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/IDataSetStorageRecoveryManager.java index 25a55409e69..5ce38dd5de0 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/IDataSetStorageRecoveryManager.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/IDataSetStorageRecoveryManager.java @@ -68,4 +68,6 @@ public interface IDataSetStorageRecoveryManager boolean canRecoverFromError(Throwable ex); void setDropboxRecoveryStateDir(File dropboxRecoveryStateDir); + + void setRecoveryMarkerFilesDir(File recoveryMarkerFileDir); } \ No newline at end of file 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 da2c9418b77..fc7b653941c 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 @@ -115,7 +115,6 @@ public abstract class AbstractJythonDataSetHandlerTest extends AbstractFileSyste protected static final String SAMPLE_PERM_ID = "sample-perm-id"; - @BeforeTest public void init() { @@ -179,9 +178,9 @@ public abstract class AbstractJythonDataSetHandlerTest extends AbstractFileSyste shouldReThrowException); } } - + protected TopLevelDataSetRegistratorGlobalState createGlobalState(Properties threadProperties) - { + { ThreadParameters threadParameters = new ThreadParameters(threadProperties, "jython-handler-test"); @@ -212,6 +211,8 @@ public abstract class AbstractJythonDataSetHandlerTest extends AbstractFileSyste { one(storageRecoveryManager).setDropboxRecoveryStateDir( new File(workingDirectory, "jython-handler-test")); + one(storageRecoveryManager).setRecoveryMarkerFilesDir(new File( + new File(workingDirectory, "recovery-marker"), "jython-handler-test")); } }); } @@ -402,7 +403,7 @@ public abstract class AbstractJythonDataSetHandlerTest extends AbstractFileSyste }; } } - + protected void assertStorageProcess(AtomicEntityOperationDetails recordedObject, String dataSetCode, String dataSetDirectory, int testId) { -- GitLab