From a5b996d5b3368f397780971d9c63e5b16d0e56e0 Mon Sep 17 00:00:00 2001 From: jakubs <jakubs> Date: Thu, 21 Mar 2013 13:49:46 +0000 Subject: [PATCH] BIS-376 SP-574 Add error during prepare phase should also trigger rollback_pre_registration SVN: 28666 --- .../v2/DataSetStorageAlgorithm.java | 25 +++++++++++++++---- 1 file changed, 20 insertions(+), 5 deletions(-) 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 03bf1773a15..64c45cd1acd 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."); + } } } } -- GitLab