From c50ee40f0027c142d3742bd104e8695ecaf9fcfa Mon Sep 17 00:00:00 2001 From: felmer <franz-josef.elmer@id.ethz.ch> Date: Tue, 27 Dec 2022 08:12:49 +0100 Subject: [PATCH] SSDM-11605: bug (caused by empty shares) fixed and tested. Log messages improved --- .../DataSetRegistrationCleanUpTask.java | 19 ++++++++++++++----- .../DataSetRegistrationCleanUpTaskTest.java | 16 +++++++++++----- 2 files changed, 25 insertions(+), 10 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 a71e7e2d416..da97d23a103 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 @@ -95,6 +95,8 @@ public class DataSetRegistrationCleanUpTask implements IMaintenanceTask private SimpleDateFormat dateFormat; + private int minimumAgeInDays; + public DataSetRegistrationCleanUpTask() { } @@ -111,7 +113,8 @@ public class DataSetRegistrationCleanUpTask implements IMaintenanceTask @Override public void setUp(String pluginName, Properties properties) { - minimumAge = PropertyUtils.getInt(properties, MINIMUM_AGE_IN_DAYS, DEFAULT_MINIMUM_AGE_IN_DAYS) * DateUtils.MILLIS_PER_DAY; + minimumAgeInDays = PropertyUtils.getInt(properties, MINIMUM_AGE_IN_DAYS, DEFAULT_MINIMUM_AGE_IN_DAYS); + minimumAge = minimumAgeInDays * DateUtils.MILLIS_PER_DAY; preStagingDirectories = new MonitoredDirectories("pre-staging"); stagingDirectories = new MonitoredDirectories("staging"); preCommitDirectories = new MonitoredDirectories("pre-commit"); @@ -147,8 +150,8 @@ public class DataSetRegistrationCleanUpTask implements IMaintenanceTask File[] files = dir.listFiles(filter); if (files != null && files.length > 0) { - operationLog.info(dirs.getName() + " directory " + dir.getAbsolutePath() - + " has " + files.length + " files"); + operationLog.info(dirs.getName() + " directory " + dir.getAbsolutePath() + " has " + + files.length + " files which are older than " + minimumAgeInDays + " days:"); for (File file : files) { operationLog.info(file.getName() + " (last modified: " @@ -168,6 +171,10 @@ public class DataSetRegistrationCleanUpTask implements IMaintenanceTask for (File share : shares) { Path shareCore = new File(share, instanceHome).toPath(); + if (Files.isDirectory(shareCore) == false) + { + continue; + } int shareCorePathLevels = shareCore.getNameCount(); EmptyFoldersGatherer gatherer = new EmptyFoldersGatherer(shareCorePathLevels, fileFilter); try (Stream<Path> paths = Files.walk(shareCore, SHARDING_LEVELS + 2)) @@ -191,7 +198,8 @@ public class DataSetRegistrationCleanUpTask implements IMaintenanceTask { return; } - operationLog.info(emptyDataSets.size() + " old empty data set folders found in share " + shareId + ": " + emptyDataSets); + operationLog.info(emptyDataSets.size() + " empty data set folders found in share " + shareId + + " which are older than " + minimumAgeInDays + " days: " + emptyDataSets); List<String> dataSetCodes = emptyDataSets.stream().map(path -> path.getFileName().toString()) .collect(Collectors.toList()); List<AbstractExternalData> dataSets = getOpenBisService().listDataSetsByCode(dataSetCodes); @@ -211,7 +219,8 @@ public class DataSetRegistrationCleanUpTask implements IMaintenanceTask { return; } - operationLog.info(emptyFolders.size() + " empty sharding folders found in share " + shareId + ": " + emptyFolders); + operationLog.info(emptyFolders.size() + " empty sharding folders found in share " + shareId + + " which are older than " + minimumAgeInDays + " days: " + emptyFolders); for (Path path : emptyFolders) { deleteFolder(path, "Empty sharding folder"); 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 241ec3ed0a4..d0e2d5124ac 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 @@ -102,6 +102,7 @@ public class DataSetRegistrationCleanUpTaskTest extends AbstractFileSystemTestCa File incoming2 = new File(storeRoot, "2/in"); incoming2.mkdirs(); new File(incoming2.getParent(), databaseInstance.getUuid()).mkdirs(); + new File(storeRoot, "9").mkdirs(); thread2Properties.setProperty(ThreadParameters.INCOMING_DIR, incoming2.getAbsolutePath()); threadParameters = new ThreadParameters[] { new ThreadParameters(thread1Properties, "t1"), @@ -140,7 +141,8 @@ public class DataSetRegistrationCleanUpTaskTest extends AbstractFileSystemTestCa task.execute(); // Then - assertEquals("pre-staging directory " + storeRoot.getAbsolutePath() + "/1/pre-staging has 1 files\n" + assertEquals("pre-staging directory " + storeRoot.getAbsolutePath() + + "/1/pre-staging has 1 files which are older than 70 days:\n" + "1970-01-01_01-00-00-000_test_test (last modified: 1970-01-01 01:00:50)\n" + "Deleting directory '" + storeRoot + "/1/pre-staging/1970-01-01_01-00-00-000_test_test'\n" + "Stale folder deleted: " + storeRoot.getAbsolutePath() @@ -174,7 +176,8 @@ public class DataSetRegistrationCleanUpTaskTest extends AbstractFileSystemTestCa task.execute(); // Then - assertEquals("staging directory " + storeRoot.getAbsolutePath() + "/1/staging has 1 files\n" + assertEquals("staging directory " + storeRoot.getAbsolutePath() + + "/1/staging has 1 files which are older than 70 days:\n" + "19700101010000000-0 (last modified: 1970-01-01 01:00:00)\n" + "Deleting directory '" + storeRoot + "/1/staging/19700101010000000-0'\n" + "Stale folder deleted: " + storeRoot.getAbsolutePath() @@ -215,7 +218,8 @@ public class DataSetRegistrationCleanUpTaskTest extends AbstractFileSystemTestCa task.execute(); // Then - assertEquals("pre-commit directory " + storeRoot.getAbsolutePath() + "/1/pre-commit has 1 files\n" + assertEquals("pre-commit directory " + storeRoot.getAbsolutePath() + + "/1/pre-commit has 1 files which are older than 70 days:\n" + "19700101010000000-0 (last modified: 1970-01-01 01:00:00)\n" + "Deleting directory '" + storeRoot + "/1/pre-commit/19700101010000000-0'\n" + "Stale folder deleted: " + storeRoot.getAbsolutePath() @@ -251,11 +255,13 @@ public class DataSetRegistrationCleanUpTaskTest extends AbstractFileSystemTestCa task.execute(); // Then - assertEquals("2 old empty data set folders found in share 3: [" + dir5 + ", " + dir7 + "]\n" + assertEquals("2 empty data set folders found in share 3 which are older than 30 days: [" + + dir5 + ", " + dir7 + "]\n" + "Deleting directory '" + dir5 + "'\n" + "Stale data set folder deleted: " + dir5.getAbsolutePath() + " (last modified: 1970-01-01T00:00:00Z)\n" - + "3 empty sharding folders found in share 3: [" + dir1 + ", " + dir4 + ", " + dir3 + "]\n" + + "3 empty sharding folders found in share 3 which are older than 30 days: [" + + dir1 + ", " + dir4 + ", " + dir3 + "]\n" + "Deleting directory '" + dir1 + "'\n" + "Empty sharding folder deleted: " + dir1.getAbsolutePath() + " (last modified: 1970-01-01T00:00:00Z)\n" -- GitLab