summaryrefslogtreecommitdiffstats
path: root/filedistribution
diff options
context:
space:
mode:
authorHarald Musum <musum@verizonmedia.com>2022-10-11 14:38:23 +0200
committerGitHub <noreply@github.com>2022-10-11 14:38:23 +0200
commit309a3095298d16abd8a969cbc61abadc7fa0c6ea (patch)
treee651854c8043791ac6579461d3a01f9205a8b540 /filedistribution
parentbb5da39551fd0380146c4cf04eff16968f099c03 (diff)
Revert "Refactor cleanup of file references"
Diffstat (limited to 'filedistribution')
-rw-r--r--filedistribution/src/main/java/com/yahoo/vespa/filedistribution/maintenance/FileDistributionCleanup.java107
1 files changed, 0 insertions, 107 deletions
diff --git a/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/maintenance/FileDistributionCleanup.java b/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/maintenance/FileDistributionCleanup.java
deleted file mode 100644
index 9c04e7253bb..00000000000
--- a/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/maintenance/FileDistributionCleanup.java
+++ /dev/null
@@ -1,107 +0,0 @@
-// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.filedistribution.maintenance;
-
-import com.yahoo.io.IOUtils;
-import java.io.File;
-import java.io.IOException;
-import java.io.UncheckedIOException;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.attribute.BasicFileAttributes;
-import java.time.Clock;
-import java.time.Duration;
-import java.time.Instant;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Set;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import java.util.stream.Stream;
-
-import static java.nio.file.Files.readAttributes;
-
-/**
- * Removes file references not used since a configured time, but always keeps a certain number of file references
- * even when they are unused (unused is based on last access time for the file).
- *
- * @author hmusum
- */
-public class FileDistributionCleanup {
-
- private static final Logger log = Logger.getLogger(FileDistributionCleanup.class.getName());
- private static final int numberToAlwaysKeep = 20;
-
- private final Clock clock;
-
- public FileDistributionCleanup(Clock clock) {
- this.clock = clock;
- }
-
- public List<String> deleteUnusedFileReferences(File fileReferencesPath,
- Duration keepFileReferencesDuration,
- Set<String> fileReferencesInUse) {
- return deleteUnusedFileReferences(fileReferencesPath,
- keepFileReferencesDuration,
- numberToAlwaysKeep,
- fileReferencesInUse);
- }
-
- public List<String> deleteUnusedFileReferences(File fileReferencesDir,
- Duration keepFileReferencesDuration,
- int numberToAlwaysKeep,
- Set<String> fileReferencesInUse) {
- if (!fileReferencesDir.isDirectory()) throw new RuntimeException(fileReferencesDir + " is not a directory");
-
- log.log(Level.FINE, () -> "Keep unused file references for " + keepFileReferencesDuration +
- ", file references in use : " + fileReferencesInUse);
- List<String> fileReferencesDeleted = new ArrayList<>();
- Path fileReferencesPath = fileReferencesDir.toPath();
- try (Stream<String> candidates = sortedUnusedFileReferences(fileReferencesPath, fileReferencesInUse, keepFileReferencesDuration)) {
- final AtomicInteger i = new AtomicInteger(0);
- candidates.forEach(fileReference -> {
- // Do not delete the newest ones
- if (i.incrementAndGet() > numberToAlwaysKeep) {
- fileReferencesDeleted.add(fileReference);
- File file = new File(fileReferencesDir, fileReference);
- if (!IOUtils.recursiveDeleteDir(file))
- log.log(Level.WARNING, "Could not delete " + file.getAbsolutePath());
- }
- });
- }
- return fileReferencesDeleted;
- }
-
- // Sorted, newest first
- private Stream<String> sortedUnusedFileReferences(Path fileReferencesPath, Set<String> fileReferencesInUse, Duration keepFileReferences) {
- Instant instant = clock.instant().minus(keepFileReferences);
- return getFileReferencesOnDisk(fileReferencesPath)
- .filter(fileReference -> !fileReferencesInUse.contains(fileReference))
- .filter(fileReference -> isLastFileAccessBefore(new File(fileReferencesPath.toFile(), fileReference), instant))
- .sorted(Comparator.comparing(a -> lastAccessed(new File(fileReferencesPath.toFile(), (String) a))).reversed());
- }
-
- private boolean isLastFileAccessBefore(File fileReference, Instant instant) {
- return lastAccessed(fileReference).isBefore(instant);
- }
-
- private Instant lastAccessed(File fileReference) {
- BasicFileAttributes fileAttributes;
- try {
- fileAttributes = readAttributes(fileReference.toPath(), BasicFileAttributes.class);
- return fileAttributes.lastAccessTime().toInstant();
- } catch (IOException e) {
- throw new UncheckedIOException(e);
- }
- }
-
- public static Stream<String> getFileReferencesOnDisk(Path directory) {
- try {
- return Files.list(directory).map(path -> path.toFile().getName());
- } catch (IOException e) {
- throw new UncheckedIOException(e);
- }
- }
-
-}