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