diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/v2/DataSetStorageAlgorithm.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/v2/DataSetStorageAlgorithm.java index 03bf1773a156abf549a3cabeef9d40f26c0e84b4..64c45cd1acd9d36598e18d0f468605bfae7a1325 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/v2/DataSetStorageAlgorithm.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/v2/DataSetStorageAlgorithm.java @@ -304,6 +304,12 @@ public class DataSetStorageAlgorithm<T extends DataSetInformation> */ public void transitionToRolledbackState(Throwable throwable) { + // Rollback in initialized state means that preparation has failed. + if (state instanceof InitializedState) + { + return; + } + // Rollback may be called on in the precommit state or in the prepared state. if (state instanceof PreparedState) { @@ -328,8 +334,14 @@ public class DataSetStorageAlgorithm<T extends DataSetInformation> public void transitionToUndoneState() { - // Rollback may be called on in the stored state or in the prepared state. In the prepared - // state, there is nothing to do. + // Rollback may be called on in the stored state or in the prepared/initialized state. In + // the prepared state, there is nothing to do. + + if (state instanceof InitializedState) + { + state = new PreparedState<T>((InitializedState<T>) state); + } + if (state instanceof PreparedState) { state = new UndoneState<T>((PreparedState<T>) state); @@ -690,10 +702,13 @@ public class DataSetStorageAlgorithm<T extends DataSetInformation> */ private void cleanUpMarkerFile() { - getFileOperations().delete(markerFile); - if (markerFile.exists()) + if (markerFile != null && markerFile.exists()) { - operationLog.error("Marker file '" + markerFile + "' could not be deleted."); + getFileOperations().delete(markerFile); + if (markerFile.exists()) + { + operationLog.error("Marker file '" + markerFile + "' could not be deleted."); + } } } }