diff --git a/server-original-data-store/source/java/ch/systemsx/cisd/etlserver/plugins/DataSetArchiverOrphanFinderTask.java b/server-original-data-store/source/java/ch/systemsx/cisd/etlserver/plugins/DataSetArchiverOrphanFinderTask.java index 3c05bd64c3a6fc9a94c9607a4993c8449ddea594..88aa61e1a90210090026ea3b5d27c04aa5e1ca5c 100644 --- a/server-original-data-store/source/java/ch/systemsx/cisd/etlserver/plugins/DataSetArchiverOrphanFinderTask.java +++ b/server-original-data-store/source/java/ch/systemsx/cisd/etlserver/plugins/DataSetArchiverOrphanFinderTask.java @@ -16,12 +16,16 @@ package ch.systemsx.cisd.etlserver.plugins; import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Properties; import java.util.Set; +import java.util.stream.Collectors; import org.apache.log4j.Logger; import org.springframework.transaction.annotation.Transactional; @@ -130,14 +134,25 @@ public class DataSetArchiverOrphanFinderTask implements IMaintenanceTask } } - File[] filesOnDisk = destinationFolder.listFiles(); - operationLog.info("3. Verify if the " + filesOnDisk.length + List<File> filesOnDisk = null; + + try + { + filesOnDisk = Files.find(destinationFolder.toPath(), Integer.MAX_VALUE, (path, basicFileAttributes) -> !Files.isDirectory(path)) + .map(Path::toFile).collect(Collectors.toList()); + } catch (IOException e) + { + throw new RuntimeException("Couldn't list files in folder: " + destinationFolder.getAbsolutePath(), e); + } + + operationLog.info("3. Verify if the " + filesOnDisk.size() + " files on destination are on multi dataset archiver containers or a normal archived dataset."); + Set<String> presentInArchiveFS = new HashSet<String>(); List<File> onFSandNotDB = new ArrayList<File>(); for (File file : filesOnDisk) { - String fileName = file.getName().toLowerCase(); + String fileName = destinationFolder.toPath().relativize(file.toPath()).toString(); presentInArchiveFS.add(fileName); // To be used in step 4 if (multiDatasetsContainersOnDB.contains(fileName)) { @@ -189,7 +204,7 @@ public class DataSetArchiverOrphanFinderTask implements IMaintenanceTask if (onFSandNotDB.isEmpty() == false || multiOnDBandNotFS.isEmpty() == false || singleOnDBandNotFS.isEmpty() == false) { operationLog.info("5. Send email with not found files."); - String subject = "openBIS Data Set Archiv Orphan Finder report"; + String subject = "openBIS Data Set Archive Orphan Finder report"; String content = ""; Collections.sort(onFSandNotDB); for (File notFound : onFSandNotDB)