diff --git a/datastore_server/resource/test-data/HierarchicalStorageUpdaterTest/store-root/1/ds1/original/f1.png b/datastore_server/resource/test-data/HierarchicalStorageUpdaterTest/store-root/1/ds1/f1.png similarity index 100% rename from datastore_server/resource/test-data/HierarchicalStorageUpdaterTest/store-root/1/ds1/original/f1.png rename to datastore_server/resource/test-data/HierarchicalStorageUpdaterTest/store-root/1/ds1/f1.png diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/HierarchicalStorageUpdater.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/HierarchicalStorageUpdater.java index 841594cee555164807df3ff777ed45bd876dc1d5..094cc2c3713fb53feb74b5be83be7b9942511b17 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/HierarchicalStorageUpdater.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/HierarchicalStorageUpdater.java @@ -315,7 +315,7 @@ public class HierarchicalStorageUpdater implements IDataStoreLockingMaintenanceT { toDelete = parent; parent = toDelete.getParentFile(); - toDelete.delete(); + delete(toDelete); } else { break; @@ -326,40 +326,38 @@ public class HierarchicalStorageUpdater implements IDataStoreLockingMaintenanceT private static void deleteWithSymbolicLinks(File toDelete) { - if (FileUtilities.isSymbolicLink(toDelete)) + if (toDelete.isDirectory()) { - toDelete.delete(); - return; + for (File file : toDelete.listFiles()) + { + // all these files should be symbolic links to a dataset directory. + // We cannot delete recursively here, it would remove the original files. + boolean ok = delete(file); + if (ok == false) + { + operationLog.error("Cannot delete the file: " + file.getPath()); + } + } } - if (toDelete.isDirectory() == false) - { - operationLog.error("Directory structure is different than expected. File '" - + toDelete.getPath() + "' should be a directory. It will not be cleared."); - return; - } + delete(toDelete); + } - for (File file : toDelete.listFiles()) + private static boolean delete(File file) + { + if (FileUtilities.isSymbolicLink(file) || file.isDirectory()) { - // all these files should be symbolic links to a dataset directory. - // We cannot delete recursively here, it would remove the original files. - if (false == FileUtilities.isSymbolicLink(file)) - { - operationLog.error(file.getPath() - + " is not a symbolic link and will not be deleted."); - return; - } - boolean ok = file.delete(); - if (ok == false) - { - operationLog.error("Cannot delete the file: " + file.getPath()); - } + operationLog.info("Deleting " + file.getAbsolutePath()); + return file.delete(); + } else + { + operationLog.error(file.getPath() + " is not a symbolic link and will not be deleted."); + return false; } - // delete the folder in the end - toDelete.delete(); } + /** * Creates the soft links for files with paths defined in <code>linkMappings</code> {@link Map}. */ diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/plugins/HierarchicalStorageUpdaterTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/plugins/HierarchicalStorageUpdaterTest.java index 1d7b15b4f0dd9af18f75ea98eb96597bcc3c1d25..ac9a216d38d3c9521987dc6daa54f41e6f1af1d1 100644 --- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/plugins/HierarchicalStorageUpdaterTest.java +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/plugins/HierarchicalStorageUpdaterTest.java @@ -143,7 +143,7 @@ public class HierarchicalStorageUpdaterTest extends AbstractFileSystemTestCase } - private HierarchicalStorageUpdater createUpdater(boolean linkFromFirstChild) + private HierarchicalStorageUpdater createUpdater(boolean reconfiguredExecution) { final String pluginName = "hierarchical-storage-updater"; final String pluginPrefix = pluginName + "."; @@ -156,10 +156,13 @@ public class HierarchicalStorageUpdaterTest extends AbstractFileSystemTestCase .getAbsolutePath()); Properties properties = new Properties(); - properties.put(HierarchicalStorageUpdater.LINK_SOURCE_SUBFOLDER + "." - + DATASET_TYPE, "original"); - properties.put(HierarchicalStorageUpdater.LINK_FROM_FIRST_CHILD + "." + DATASET_TYPE, "" - + linkFromFirstChild); + if (reconfiguredExecution) + { + properties.put(HierarchicalStorageUpdater.LINK_SOURCE_SUBFOLDER + "." + DATASET_TYPE, + "original"); + properties.put(HierarchicalStorageUpdater.LINK_FROM_FIRST_CHILD + "." + DATASET_TYPE, + "" + true); + } HierarchicalStorageUpdater updater = new HierarchicalStorageUpdater(); updater.setUp(pluginName, properties);