From 1b3f37eb780e5c7388991cdd373b800d57719153 Mon Sep 17 00:00:00 2001 From: CalDescent Date: Sat, 2 Oct 2021 15:37:06 +0100 Subject: [PATCH] Delete the "archive" folder when in top-only mode This allows a block archive node to be switched into top-only mode. --- .../controller/repository/PruneManager.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/main/java/org/qortal/controller/repository/PruneManager.java b/src/main/java/org/qortal/controller/repository/PruneManager.java index 685f0eea..89f11644 100644 --- a/src/main/java/org/qortal/controller/repository/PruneManager.java +++ b/src/main/java/org/qortal/controller/repository/PruneManager.java @@ -1,5 +1,8 @@ package org.qortal.controller.repository; +import org.apache.commons.io.FileUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.qortal.controller.Controller; import org.qortal.data.block.BlockData; @@ -8,12 +11,17 @@ import org.qortal.repository.Repository; import org.qortal.settings.Settings; import org.qortal.utils.DaemonThreadFactory; +import java.io.IOException; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; public class PruneManager { + private static final Logger LOGGER = LogManager.getLogger(PruneManager.class); + private static PruneManager instance; private boolean isTopOnly = Settings.getInstance().isTopOnly(); @@ -58,6 +66,9 @@ public class PruneManager { */ private void startTopOnlySyncMode() { this.startPruning(); + + // We don't need the block archive in top-only mode + this.deleteArchive(); } /** @@ -98,6 +109,23 @@ public class PruneManager { this.executorService.execute(new BlockArchiver()); } + private void deleteArchive() { + if (!Settings.getInstance().isTopOnly()) { + LOGGER.error("Refusing to delete archive when not in top-only mode"); + } + + try { + Path archivePath = Paths.get(Settings.getInstance().getRepositoryPath(), "archive"); + if (archivePath.toFile().exists()) { + LOGGER.info("Deleting block archive because we are in top-only mode..."); + FileUtils.deleteDirectory(archivePath.toFile()); + } + + } catch (IOException e) { + LOGGER.info("Couldn't delete archive: {}", e.getMessage()); + } + } + public void stop() { this.executorService.shutdownNow();