diff --git a/src/main/java/org/qortal/controller/Controller.java b/src/main/java/org/qortal/controller/Controller.java index 33c49bde..17d2fcbf 100644 --- a/src/main/java/org/qortal/controller/Controller.java +++ b/src/main/java/org/qortal/controller/Controller.java @@ -46,6 +46,7 @@ import org.qortal.utils.*; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; + import java.awt.TrayIcon.MessageType; import java.io.File; import java.io.FileNotFoundException; @@ -53,6 +54,7 @@ import java.io.IOException; import java.io.InputStream; import java.net.InetSocketAddress; import java.net.UnknownHostException; +import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.security.SecureRandom; @@ -70,6 +72,7 @@ import java.util.concurrent.locks.ReentrantLock; import java.util.function.Function; import java.util.function.Predicate; import java.util.stream.Collectors; +import java.util.stream.Stream; public class Controller extends Thread { @@ -396,6 +399,9 @@ public class Controller extends Thread { Controller.newInstance(args); + + cleanChunkUploadTempDir(); // cleanup leftover chunks from streaming to disk + LOGGER.info("Starting NTP"); Long ntpOffset = Settings.getInstance().getTestNtpOffset(); if (ntpOffset != null) @@ -2174,6 +2180,24 @@ public class Controller extends Thread { return now - offset; } + private static void cleanChunkUploadTempDir() { + Path uploadsTemp = Paths.get("uploads-temp"); + if (!Files.exists(uploadsTemp)) { + return; + } + + try (Stream paths = Files.walk(uploadsTemp)) { + paths.sorted(Comparator.reverseOrder()) + .map(Path::toFile) + .forEach(File::delete); + + LOGGER.info("Cleaned up all temporary uploads in {}", uploadsTemp); + } catch (IOException e) { + LOGGER.warn("Failed to clean up uploads-temp directory", e); + } + } + + public StatsSnapshot getStatsSnapshot() { return this.stats; }