From 5083c1ae36d46c569aef00ad78e3687a82c74307 Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Wed, 12 Sep 2012 07:00:03 +0000
Subject: [PATCH] BIS-183 shuffling a data set which doesn't exist in the store
 will be logged but doesn't stops shuffling the next data set.

SVN: 26603
---
 .../etlserver/plugins/SimpleShuffling.java    |  2 +-
 .../postregistration/EagerShufflingTask.java  | 45 +++++++++++--------
 .../shared/utils/SegmentedStoreUtils.java     |  6 +++
 3 files changed, 33 insertions(+), 20 deletions(-)

diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/SimpleShuffling.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/SimpleShuffling.java
index 0a9ae19b938..95f69b42dcc 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/SimpleShuffling.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/SimpleShuffling.java
@@ -142,7 +142,7 @@ public class SimpleShuffling implements ISegmentedStoreShuffling
                     taskExecutor.execute(shufflingTask, "shuffling", dataSet.getDataSetCode(), false);
                 } catch (Throwable ex)
                 {
-                    throw CheckedExceptionTunnel.wrapIfNecessary(ex);
+                    // ignore because it has already been logged. Try the next data set.
                 }
             }
         }
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/postregistration/EagerShufflingTask.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/postregistration/EagerShufflingTask.java
index 64178116cd3..d7733489f58 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/postregistration/EagerShufflingTask.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/postregistration/EagerShufflingTask.java
@@ -232,26 +232,33 @@ public class EagerShufflingTask extends AbstractPostRegistrationTask
         {
             if (shareWithMostFreeOrNull != null)
             {
-                long freeSpaceBefore = shareWithMostFreeOrNull.calculateFreeSpace();
-                File share = new File(storeRoot, shareIdManager.getShareId(dataSetCode));
-                dataSetMover.moveDataSetToAnotherShare(
-                        new File(share, dataSet.getDataSetLocation()),
-                        shareWithMostFreeOrNull.getShare(), getChecksumProvider(), logger);
-
-                String shareId = shareWithMostFreeOrNull.getShareId();
-                logger.log(LogLevel.INFO, "Data set " + dataSetCode
-                        + " successfully moved from share " + dataSet.getDataSetShareId() + " to "
-                        + shareId + ".");
-                long freeSpaceAfter = shareWithMostFreeOrNull.calculateFreeSpace();
-                if (freeSpaceBefore > freeSpaceLimitTriggeringNotification
-                        && freeSpaceAfter < freeSpaceLimitTriggeringNotification)
+                try
                 {
-                    notifyer.log(
-                            LogLevel.WARN,
-                            "After moving data set " + dataSetCode + " to share " + shareId
-                                    + " that share has only "
-                                    + FileUtilities.byteCountToDisplaySize(freeSpaceAfter)
-                                    + " free space. It might be necessary to add a new share.");
+                    long freeSpaceBefore = shareWithMostFreeOrNull.calculateFreeSpace();
+                    File share = new File(storeRoot, shareIdManager.getShareId(dataSetCode));
+                    dataSetMover.moveDataSetToAnotherShare(
+                            new File(share, dataSet.getDataSetLocation()),
+                            shareWithMostFreeOrNull.getShare(), getChecksumProvider(), logger);
+
+                    String shareId = shareWithMostFreeOrNull.getShareId();
+                    logger.log(LogLevel.INFO, "Data set " + dataSetCode
+                            + " successfully moved from share " + dataSet.getDataSetShareId()
+                            + " to " + shareId + ".");
+                    long freeSpaceAfter = shareWithMostFreeOrNull.calculateFreeSpace();
+                    if (freeSpaceBefore > freeSpaceLimitTriggeringNotification
+                            && freeSpaceAfter < freeSpaceLimitTriggeringNotification)
+                    {
+                        notifyer.log(
+                                LogLevel.WARN,
+                                "After moving data set " + dataSetCode + " to share " + shareId
+                                        + " that share has only "
+                                        + FileUtilities.byteCountToDisplaySize(freeSpaceAfter)
+                                        + " free space. It might be necessary to add a new share.");
+                    }
+                } catch (Throwable t)
+                {
+                    logger.log(LogLevel.ERROR, "Couldn't move data set " + dataSetCode
+                            + " to share " + shareWithMostFreeOrNull.getShareId() + ".", t);
                 }
             }
         }
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/SegmentedStoreUtils.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/SegmentedStoreUtils.java
index 76b810729c6..4039dd3ebc2 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/SegmentedStoreUtils.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/SegmentedStoreUtils.java
@@ -250,6 +250,12 @@ public class SegmentedStoreUtils
             IEncapsulatedOpenBISService service, final IShareIdManager shareIdManager,
             IChecksumProvider checksumProvider, final ISimpleLogger logger)
     {
+        if (FileOperations.getMonitoredInstanceForCurrentThread().exists(dataSetDirInStore) == false)
+        {
+            logger.log(LogLevel.ERROR, "Data set '" + dataSetDirInStore
+                    + "' no longer exist in the data store.");
+            return;
+        }
         final String dataSetCode = dataSetDirInStore.getName();
         ExternalData dataSet = service.tryGetDataSet(dataSetCode);
         if (dataSet == null)
-- 
GitLab