From cd27fb5de946de44ccf4842cb5883c0f50db9c80 Mon Sep 17 00:00:00 2001
From: felmer <franz-josef.elmer@id.ethz.ch>
Date: Tue, 27 Dec 2022 07:20:04 +0100
Subject: [PATCH] SSDM-11605: deleting empty sharding folders in store
 implemented and tested

---
 .../DataSetRegistrationCleanUpTask.java       | 35 +++++++++++++------
 .../DataSetRegistrationCleanUpTaskTest.java   | 21 +++++++----
 2 files changed, 39 insertions(+), 17 deletions(-)

diff --git a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/DataSetRegistrationCleanUpTask.java b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/DataSetRegistrationCleanUpTask.java
index 480ce203c80..a71e7e2d416 100644
--- a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/DataSetRegistrationCleanUpTask.java
+++ b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/DataSetRegistrationCleanUpTask.java
@@ -22,6 +22,7 @@ import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.LinkOption;
 import java.nio.file.Path;
+import java.nio.file.attribute.FileTime;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Collection;
@@ -199,17 +200,7 @@ public class DataSetRegistrationCleanUpTask implements IMaintenanceTask
         {
             if (knownDataSets.contains(path.getFileName().toString()) == false)
             {
-                String postfix = "";
-                try
-                {
-                    postfix = " (last modified: "
-                            + dateFormat.format(new Date(Files.getLastModifiedTime(path).toMillis())) + ")";
-                } catch (IOException e)
-                {
-                    // can not show last modified date
-                }
-                FileUtilities.deleteRecursively(path.toFile(), simpleLogger);
-                operationLog.info("Stale data set folder deleted: " + path.toAbsolutePath() + postfix);
+                deleteFolder(path, "Stale data set folder");
             }
         }
     }
@@ -221,6 +212,28 @@ public class DataSetRegistrationCleanUpTask implements IMaintenanceTask
             return;
         }
         operationLog.info(emptyFolders.size() + " empty sharding folders found in share " + shareId + ": " + emptyFolders);
+        for (Path path : emptyFolders)
+        {
+            deleteFolder(path, "Empty sharding folder");
+        }
+    }
+
+    private void deleteFolder(Path path, String folderType)
+    {
+        String info = createLastModifiedInfo(path);
+        FileUtilities.deleteRecursively(path.toFile(), simpleLogger);
+        operationLog.info(folderType + " deleted: " + path.toAbsolutePath() + info);
+    }
+
+    private String createLastModifiedInfo(Path path)
+    {
+        try
+        {
+            return " (last modified: " + Files.getLastModifiedTime(path) + ")";
+        } catch (IOException e)
+        {
+            return "";
+        }
     }
 
     private ThreadParameters[] getThreadParameters()
diff --git a/datastore_server/sourceTest/java/ch/ethz/sis/openbis/generic/server/dss/plugins/DataSetRegistrationCleanUpTaskTest.java b/datastore_server/sourceTest/java/ch/ethz/sis/openbis/generic/server/dss/plugins/DataSetRegistrationCleanUpTaskTest.java
index 4ecb23e29c2..241ec3ed0a4 100644
--- a/datastore_server/sourceTest/java/ch/ethz/sis/openbis/generic/server/dss/plugins/DataSetRegistrationCleanUpTaskTest.java
+++ b/datastore_server/sourceTest/java/ch/ethz/sis/openbis/generic/server/dss/plugins/DataSetRegistrationCleanUpTaskTest.java
@@ -254,13 +254,22 @@ public class DataSetRegistrationCleanUpTaskTest extends AbstractFileSystemTestCa
         assertEquals("2 old empty data set folders found in share 3: [" + dir5 + ", " + dir7 + "]\n"
                 + "Deleting directory '" + dir5 + "'\n"
                 + "Stale data set folder deleted: " + dir5.getAbsolutePath()
-                + " (last modified: 1970-01-01 01:00:00)\n"
-                + "3 empty sharding folders found in share 3: [" + dir1 + ", " + dir4 + ", " + dir3 + "]",
+                + " (last modified: 1970-01-01T00:00:00Z)\n"
+                + "3 empty sharding folders found in share 3: [" + dir1 + ", " + dir4 + ", " + dir3 + "]\n"
+                + "Deleting directory '" + dir1 + "'\n"
+                + "Empty sharding folder deleted: " + dir1.getAbsolutePath()
+                + " (last modified: 1970-01-01T00:00:00Z)\n"
+                + "Deleting directory '" + dir4 + "'\n"
+                + "Empty sharding folder deleted: " + dir4.getAbsolutePath()
+                + " (last modified: 1970-01-01T00:00:00Z)\n"
+                + "Deleting directory '" + dir3 + "'\n"
+                + "Empty sharding folder deleted: " + dir3.getAbsolutePath()
+                + " (last modified: 1970-01-01T00:00:00Z)",
                 logRecorder.getLogContent());
-//        assertEquals(false, dir1.exists());
-//        assertEquals(true, dir2.exists());
-//        assertEquals(false, dir3.exists());
-//        assertEquals(false, dir4.exists());
+        assertEquals(false, dir1.exists());
+        assertEquals(true, dir2.exists());
+        assertEquals(false, dir3.exists());
+        assertEquals(false, dir4.exists());
         assertEquals(false, dir5.exists());
         assertEquals(true, dir6.exists());
         assertEquals(true, dir7.exists());
-- 
GitLab