Skip to content
Snippets Groups Projects
Commit e3403411 authored by tpylak's avatar tpylak
Browse files

LMS-986 1) allow storage processor to say, what should happen with a dataset...

LMS-986 1) allow storage processor to say, what should happen with a dataset after unstore() has been called. The data can be moved to error directory or stay untouched. 2) pass the exception which has caused the rollback to the unstore() method

SVN: 11583
parent 015e5abf
No related branches found
No related tags found
No related merge requests found
......@@ -101,9 +101,10 @@ abstract public class AbstractDelegatingStorageProcessor implements IStorageProc
incomingDataSetDirectory, rootDir);
}
public void unstoreData(final File incomingDataSetDirectory, final File storedDataDirectory)
public UnstoreDataAction unstoreData(final File incomingDataSetDirectory,
final File storedDataDirectory, Throwable exception)
{
delegate.unstoreData(incomingDataSetDirectory, storedDataDirectory);
return delegate.unstoreData(incomingDataSetDirectory, storedDataDirectory, exception);
}
public StorageFormat getStorageFormat()
......
......@@ -147,14 +147,14 @@ abstract public class AbstractDelegatingStorageProcessorWithDropbox extends
}
@Override
public final void unstoreData(final File incomingDataSetDirectory,
final File storedDataDirectory)
public UnstoreDataAction unstoreData(final File incomingDataSetDirectory,
final File storedDataDirectory, Throwable exception)
{
if (recentlyStoredDropboxDataset != null && recentlyStoredDropboxDataset.exists())
{
fileOperations.deleteRecursively(recentlyStoredDropboxDataset);
}
recentlyStoredDropboxDataset = null;
super.unstoreData(incomingDataSetDirectory, storedDataDirectory);
return super.unstoreData(incomingDataSetDirectory, storedDataDirectory, exception);
}
}
......@@ -478,7 +478,14 @@ public final class BDSStorageProcessor extends AbstractStorageProcessor implemen
return dataStructureDir;
}
public final void unstoreData(final File incomingDataSetDirectory,
public UnstoreDataAction unstoreData(File incomingDataSetDirectory, File storedDataDirectory,
Throwable exception)
{
unstoreData(incomingDataSetDirectory, storedDataDirectory);
return UnstoreDataAction.MOVE_TO_ERROR;
}
private final void unstoreData(final File incomingDataSetDirectory,
final File storedDataDirectory)
{
checkParameters(incomingDataSetDirectory, storedDataDirectory);
......
......@@ -68,8 +68,8 @@ public class DefaultStorageProcessor extends AbstractStorageProcessor
return rootDir;
}
public final void unstoreData(final File incomingDataSetDirectory,
final File storedDataDirectory)
public UnstoreDataAction unstoreData(final File incomingDataSetDirectory,
final File storedDataDirectory, Throwable exception)
{
checkParameters(incomingDataSetDirectory, storedDataDirectory);
File targetFile =
......@@ -79,6 +79,7 @@ public class DefaultStorageProcessor extends AbstractStorageProcessor
// directory structure will persist. Right now, we consider this is fine as these empty
// directories will not disturb the running application.
FileRenamer.renameAndLog(targetFile, incomingDataSetDirectory);
return UnstoreDataAction.MOVE_TO_ERROR;
}
private static File getOriginalDirectory(final File storedDataDirectory)
......
......@@ -62,6 +62,22 @@ public interface IStorageProcessor extends IStoreRootDirectoryHolder
final ITypeExtractor typeExtractor, final IMailClient mailClient,
final File incomingDataSetDirectory, final File rootDir);
/**
* Instructs the dataset handler what to do with the data in incoming directory if there was an
* error during registration in openbis.
*/
public enum UnstoreDataAction
{
/**
* moved the data to the error directory
*/
MOVE_TO_ERROR,
/**
* leave the data in the incoming directory
*/
LEAVE_UNTOUCH
}
/**
* Performs a rollback of
* {@link #storeData(SamplePE, DataSetInformation, ITypeExtractor, IMailClient, File, File)} The
......@@ -73,8 +89,11 @@ public interface IStorageProcessor extends IStoreRootDirectoryHolder
*
* @param incomingDataSetDirectory original folder to be restored.
* @param storedDataDirectory directory which contains the data to be restored.
* @param exception an exception which has caused that the unstore operation has to be performed
* @return an instruction what to do with the data in incoming directory
*/
public void unstoreData(final File incomingDataSetDirectory, final File storedDataDirectory);
public UnstoreDataAction unstoreData(final File incomingDataSetDirectory,
final File storedDataDirectory, Throwable exception);
/**
* Returns the format that this storage processor is storing data sets in.
......
......@@ -55,6 +55,7 @@ import ch.systemsx.cisd.common.types.BooleanOrUnknown;
import ch.systemsx.cisd.common.utilities.BeanUtils;
import ch.systemsx.cisd.common.utilities.IDelegatedActionWithResult;
import ch.systemsx.cisd.common.utilities.ISelfTestable;
import ch.systemsx.cisd.etlserver.IStorageProcessor.UnstoreDataAction;
import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService;
import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation;
import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetType;
......@@ -466,9 +467,10 @@ public final class TransferredDataSetHandler implements IPathHandler, ISelfTesta
{
throw (Error) throwable;
}
storageProcessor.unstoreData(incomingDataSetFile, baseDirectoryHolder
.getBaseDirectory());
if (stopped == false)
UnstoreDataAction action =
storageProcessor.unstoreData(incomingDataSetFile, baseDirectoryHolder
.getBaseDirectory(), throwable);
if (stopped == false && action == UnstoreDataAction.MOVE_TO_ERROR)
{
final File baseDirectory =
createBaseDirectory(ERROR_DATA_STRATEGY, storeRoot, dataSetInformation);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment