From 6191ef7c5c48a0b005f26023f86d2ad5136c732d Mon Sep 17 00:00:00 2001
From: kaloyane <kaloyane>
Date: Fri, 14 Oct 2011 16:25:56 +0000
Subject: [PATCH] [LMS-2598] staging dir must be deleted after commit, test
 fixed

SVN: 23332
---
 .../registrator/DataSetStorageAlgorithm.java   | 18 +++++++++++++++---
 .../DataSetStorageAlgorithmRunner.java         |  1 -
 .../AbstractJythonDataSetHandlerTest.java      | 10 +++++++++-
 3 files changed, 24 insertions(+), 5 deletions(-)

diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetStorageAlgorithm.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetStorageAlgorithm.java
index 6ae10a5abb1..8b5f8081d21 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetStorageAlgorithm.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetStorageAlgorithm.java
@@ -207,7 +207,7 @@ public class DataSetStorageAlgorithm<T extends DataSetInformation>
         }
 
         StoredState<T> storedState = (StoredState<T>) state;
-        storedState.cleanUp();
+        storedState.cleanUpMarkerFile();
 
         state = new RolledbackState<T>(storedState, UnstoreDataAction.LEAVE_UNTOUCHED, throwable);
     }
@@ -501,12 +501,15 @@ public class DataSetStorageAlgorithm<T extends DataSetInformation>
 
         protected final File markerFile;
 
+        protected final BaseDirectoryHolder stagingBaseDirectoryHolder;
+
         protected final File storedDirectory;
 
         public StoredState(PreparedState<T> oldState)
         {
             super(oldState.storageAlgorithm);
             this.transaction = oldState.transaction;
+            this.stagingBaseDirectoryHolder = oldState.stagingBaseDirectoryHolder;
             this.markerFile = oldState.markerFile;
             this.storedDirectory = oldState.storedDirectory;
         }
@@ -518,7 +521,7 @@ public class DataSetStorageAlgorithm<T extends DataSetInformation>
         {
             transaction.setStoredDataDirectory(storedDirectory);
             transaction.commit();
-            cleanUp();
+            cleanUpMarkerFile();
         }
 
         /**
@@ -532,7 +535,7 @@ public class DataSetStorageAlgorithm<T extends DataSetInformation>
         /**
          * Cleanup from the processing -- done after a commit or rollback
          */
-        private void cleanUp()
+        private void cleanUpMarkerFile()
         {
             getFileOperations().delete(markerFile);
         }
@@ -542,9 +545,18 @@ public class DataSetStorageAlgorithm<T extends DataSetInformation>
             DataSetStorageAlgorithmState<T>
     {
 
+        protected final File stagingDirectory;
+
         CommittedState(StoredState<T> oldState)
         {
             super(oldState.storageAlgorithm);
+            this.stagingDirectory = oldState.stagingBaseDirectoryHolder.getBaseDirectory();
+            cleanUpStagingDirectory();
+        }
+
+        private void cleanUpStagingDirectory()
+        {
+            getFileOperations().delete(stagingDirectory);
         }
 
     }
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetStorageAlgorithmRunner.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetStorageAlgorithmRunner.java
index 472cdbcc82a..bab3be9dcdf 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetStorageAlgorithmRunner.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetStorageAlgorithmRunner.java
@@ -137,7 +137,6 @@ public class DataSetStorageAlgorithmRunner<T extends DataSetInformation>
 
         public void rollback()
         {
-            // execute rollback after server restart
             transaction.rollback(null);
         }
 
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 7b42518394d..6719a9a2220 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
@@ -39,6 +39,7 @@ import ch.systemsx.cisd.base.exceptions.CheckedExceptionTunnel;
 import ch.systemsx.cisd.base.exceptions.IOExceptionUnchecked;
 import ch.systemsx.cisd.base.tests.AbstractFileSystemTestCase;
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
+import ch.systemsx.cisd.common.filesystem.FileOperations;
 import ch.systemsx.cisd.common.filesystem.QueueingPathRemoverService;
 import ch.systemsx.cisd.common.mail.IMailClient;
 import ch.systemsx.cisd.common.utilities.ExtendedProperties;
@@ -289,13 +290,16 @@ public abstract class AbstractJythonDataSetHandlerTest extends AbstractFileSyste
                 StorageProcessorTransactionParameters parameters)
         {
             final File rootDir = parameters.getRootDir();
+            final File incomingDir = parameters.getIncomingDataSetDirectory();
             dataSetInfoString = parameters.getDataSetInformation().toString();
             return new IStorageProcessorTransaction()
                 {
 
                     private static final long serialVersionUID = 1L;
 
-                    private File storedFolder;
+                    private File incoming = incomingDir;
+
+                    private File storedFolder = rootDir;
 
                     public void storeData(ITypeExtractor typeExtractor, IMailClient mailClient,
                             File incomingDataSetFile)
@@ -321,6 +325,10 @@ public abstract class AbstractJythonDataSetHandlerTest extends AbstractFileSyste
 
                     public UnstoreDataAction rollback(Throwable exception)
                     {
+                        if (storedFolder != null && storedFolder.exists())
+                        {
+                            FileOperations.getInstance().move(storedFolder, incoming);
+                        }
                         return null;
                     }
 
-- 
GitLab