From 50e465fc173af3c1e79b7acd1a7b5bece47c2b59 Mon Sep 17 00:00:00 2001 From: Szum123321 Date: Sat, 27 Nov 2021 19:58:51 +0100 Subject: [PATCH] Added more accurate detection of insufficient /tmp --- src/main/java/net/szum123321/textile_backup/Statics.java | 1 + .../net/szum123321/textile_backup/TextileBackup.java | 7 +++++-- .../net/szum123321/textile_backup/core/Utilities.java | 9 +++++++++ .../textile_backup/core/create/MakeBackupRunnable.java | 2 +- 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/szum123321/textile_backup/Statics.java b/src/main/java/net/szum123321/textile_backup/Statics.java index 61c20f1..fbf6564 100644 --- a/src/main/java/net/szum123321/textile_backup/Statics.java +++ b/src/main/java/net/szum123321/textile_backup/Statics.java @@ -36,4 +36,5 @@ public class Statics { public static boolean disableWatchdog = false; public static AwaitThread restoreAwaitThread = null; public static Optional untouchableFile = Optional.empty(); + public static boolean disableTMPFiles = false; } diff --git a/src/main/java/net/szum123321/textile_backup/TextileBackup.java b/src/main/java/net/szum123321/textile_backup/TextileBackup.java index d6818a6..787e023 100644 --- a/src/main/java/net/szum123321/textile_backup/TextileBackup.java +++ b/src/main/java/net/szum123321/textile_backup/TextileBackup.java @@ -38,6 +38,7 @@ import net.szum123321.textile_backup.commands.restore.RestoreBackupCommand; import net.szum123321.textile_backup.config.ConfigHelper; import net.szum123321.textile_backup.config.ConfigPOJO; import net.szum123321.textile_backup.core.ActionInitiator; +import net.szum123321.textile_backup.core.Utilities; import net.szum123321.textile_backup.core.create.BackupContext; import net.szum123321.textile_backup.core.create.BackupHelper; import net.szum123321.textile_backup.core.create.BackupScheduler; @@ -59,9 +60,11 @@ public class TextileBackup implements ModInitializer { ServerTickEvents.END_SERVER_TICK.register(new BackupScheduler()::tick); - //Restart Executor Service in singleplayer - ServerLifecycleEvents.SERVER_STARTING.register(ignored -> { + //Restart Executor Service in single-player + ServerLifecycleEvents.SERVER_STARTING.register(server -> { if(Statics.executorService.isShutdown()) Statics.executorService = Executors.newSingleThreadExecutor(); + + Utilities.updateTMPFSFlag(server); }); ServerLifecycleEvents.SERVER_STOPPED.register(server -> { diff --git a/src/main/java/net/szum123321/textile_backup/core/Utilities.java b/src/main/java/net/szum123321/textile_backup/core/Utilities.java index be7c304..f4404c1 100644 --- a/src/main/java/net/szum123321/textile_backup/core/Utilities.java +++ b/src/main/java/net/szum123321/textile_backup/core/Utilities.java @@ -80,6 +80,15 @@ public class Utilities { return path; } + public static boolean updateTMPFSFlag(MinecraftServer server) { + Statics.disableTMPFiles = (FileUtils.sizeOfDirectory(Utilities.getWorldFolder(server)) >= + (new File(System.getProperty("java.io.tmpdir"))).getFreeSpace()); + + if(Statics.disableTMPFiles) log.warn("Not enough space left in tmp directory!\n Might cause: https://github.com/Szum123321/textile_backup/wiki/ZIP-Problems"); + + return Statics.disableTMPFiles; + } + public static void disableWorldSaving(MinecraftServer server) { for (ServerWorld serverWorld : server.getWorlds()) { if (serverWorld != null && !serverWorld.savingDisabled) diff --git a/src/main/java/net/szum123321/textile_backup/core/create/MakeBackupRunnable.java b/src/main/java/net/szum123321/textile_backup/core/create/MakeBackupRunnable.java index 2b4857a..8db56ef 100644 --- a/src/main/java/net/szum123321/textile_backup/core/create/MakeBackupRunnable.java +++ b/src/main/java/net/szum123321/textile_backup/core/create/MakeBackupRunnable.java @@ -92,7 +92,7 @@ public class MakeBackupRunnable implements Runnable { switch (config.get().format) { case ZIP -> { - if (coreCount > 1) + if (coreCount > 1 && !Statics.disableTMPFiles) ParallelZipCompressor.getInstance().createArchive(world, outFile, context, coreCount); else ZipCompressor.getInstance().createArchive(world, outFile, context, coreCount);