From 844d8b7f999549b56ebb1c4fa342705dfcbe5061 Mon Sep 17 00:00:00 2001 From: Sheepit Renderfarm Date: Wed, 20 Nov 2024 23:13:00 +0000 Subject: [PATCH] Ref: simplify getInstance, do not put context on a singleton --- src/main/java/com/sheepit/client/Client.java | 2 +- .../com/sheepit/client/DirectoryManager.java | 6 ++-- src/main/java/com/sheepit/client/Log.java | 29 +++++++++---------- src/main/java/com/sheepit/client/Server.java | 2 +- .../com/sheepit/client/hardware/cpu/CPU.java | 2 +- .../java/com/sheepit/client/os/Linux.java | 4 +-- src/main/java/com/sheepit/client/os/Mac.java | 4 +-- .../sheepit/client/standalone/GuiText.java | 2 +- .../com/sheepit/client/standalone/Worker.java | 12 ++++---- .../standalone/swing/activity/Working.java | 2 +- 10 files changed, 32 insertions(+), 33 deletions(-) diff --git a/src/main/java/com/sheepit/client/Client.java b/src/main/java/com/sheepit/client/Client.java index 569fe91..0ee51d9 100644 --- a/src/main/java/com/sheepit/client/Client.java +++ b/src/main/java/com/sheepit/client/Client.java @@ -94,7 +94,7 @@ import okhttp3.HttpUrl; public Client(Gui gui, Configuration configuration, String url) { this.configuration = configuration; this.server = new Server(url, this.configuration, this); - this.log = Log.getInstance(this.configuration); + this.log = Log.getInstance(); this.gui = gui; this.directoryManager = new DirectoryManager(this.configuration); this.renderingJob = null; diff --git a/src/main/java/com/sheepit/client/DirectoryManager.java b/src/main/java/com/sheepit/client/DirectoryManager.java index 63b5365..0a62177 100644 --- a/src/main/java/com/sheepit/client/DirectoryManager.java +++ b/src/main/java/com/sheepit/client/DirectoryManager.java @@ -72,19 +72,19 @@ public class DirectoryManager { Files.deleteIfExists(targetArchivePath); // createLink only works if the target does not exist try { Files.createLink(targetArchivePath, existingArchivePath); - Log.getInstance(configuration).debug("Created hardlink from " + targetArchivePath + " to " + existingArchivePath); + Log.getInstance().debug("Created hardlink from " + targetArchivePath + " to " + existingArchivePath); } catch (UnsupportedOperationException // underlying file system does not support hard-linking | FileSystemException // cache-dir and shared-zip are on separate file systems, even though hard-linking is supported | SecurityException // user is not allowed to create hard-links ignore) { // Creating hardlinks might not be supported on some filesystems - Log.getInstance(configuration).debug("Failed to create hardlink, falling back to copying file to " + targetArchivePath); + Log.getInstance().debug("Failed to create hardlink, falling back to copying file to " + targetArchivePath); Files.copy(existingArchivePath, targetArchivePath, StandardCopyOption.REPLACE_EXISTING); } } catch (IOException e) { - Log.getInstance(configuration).error("Error while copying " + source + " from shared downloads directory to working dir"); + Log.getInstance().error("Error while copying " + source + " from shared downloads directory to working dir"); return false; } diff --git a/src/main/java/com/sheepit/client/Log.java b/src/main/java/com/sheepit/client/Log.java index bdc9ded..3636acd 100644 --- a/src/main/java/com/sheepit/client/Log.java +++ b/src/main/java/com/sheepit/client/Log.java @@ -19,6 +19,8 @@ package com.sheepit.client; +import lombok.Getter; + import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; @@ -43,7 +45,7 @@ public final class Log { public final int MAX_SIZE = 10000000; // in B public final int PERIOD = 3600000; // duration in ms between two shrink - private static Log instance = null; + @Getter private static Log instance = null; private Map> checkpoints = new HashMap<>(); private int lastCheckPoint; @@ -170,24 +172,21 @@ public final class Log { } } - public static synchronized Log getInstance(Configuration config) { - if (instance == null) { - String path = null; - boolean print = false; - boolean debug = false; - if (config != null) { - debug = config.isDebugLevel(); - print = config.isPrintLog(); - path = config.getLogDirectory() == null ? null : config.getLogDirectory(); - } - - instance = new Log(debug, print, path); + public static synchronized void setInstance(Configuration config) { + String path = null; + boolean print = false; + boolean debug = false; + if (config != null) { + debug = config.isDebugLevel(); + print = config.isPrintLog(); + path = config.getLogDirectory() == null ? null : config.getLogDirectory(); } - return instance; + + instance = new Log(debug, print, path); } public static synchronized void printCheckPoint(int point_) { - Log log = getInstance(null); + Log log = getInstance(); Optional> logs = log.getForCheckPoint(point_); if (logs.isPresent()) { for (String alog : logs.get()) { diff --git a/src/main/java/com/sheepit/client/Server.java b/src/main/java/com/sheepit/client/Server.java index 217fc82..7328d9e 100644 --- a/src/main/java/com/sheepit/client/Server.java +++ b/src/main/java/com/sheepit/client/Server.java @@ -107,7 +107,7 @@ public class Server extends Thread { this.base_url = url_; this.user_config = user_config_; this.client = client_; - this.log = Log.getInstance(this.user_config); + this.log = Log.getInstance(); this.directoryManager = new DirectoryManager(this.user_config); this.lastRequestTime = 0; this.keepmealive_duration = 15 * 60 * 1000; // default 15min diff --git a/src/main/java/com/sheepit/client/hardware/cpu/CPU.java b/src/main/java/com/sheepit/client/hardware/cpu/CPU.java index 64aa337..e33936c 100644 --- a/src/main/java/com/sheepit/client/hardware/cpu/CPU.java +++ b/src/main/java/com/sheepit/client/hardware/cpu/CPU.java @@ -42,7 +42,7 @@ import java.io.InputStreamReader; * The detail is limited to only if it's 32 or 64bit */ private final String arch = detectArch(); - private static final Log log = Log.getInstance(null); + private static final Log log = Log.getInstance(); private static Integer logicalCores = -1; // Store core count throughout instances diff --git a/src/main/java/com/sheepit/client/os/Linux.java b/src/main/java/com/sheepit/client/os/Linux.java index fca6739..7195534 100644 --- a/src/main/java/com/sheepit/client/os/Linux.java +++ b/src/main/java/com/sheepit/client/os/Linux.java @@ -81,7 +81,7 @@ public class Linux extends OS { actual_command.add(0, NICE_BINARY_PATH); } else { - Log.getInstance(null).error("No low priority binary, will not launch renderer in normal priority"); + Log.getInstance().error("No low priority binary, will not launch renderer in normal priority"); } ProcessBuilder builder = new ProcessBuilder(actual_command); @@ -141,7 +141,7 @@ public class Linux extends OS { hasNiceBinary = true; } catch (IOException e) { - Log.getInstance(null).error("Failed to find low priority binary, will not launch renderer in normal priority (" + e + ")"); + Log.getInstance().error("Failed to find low priority binary, will not launch renderer in normal priority (" + e + ")"); } finally { if (process != null) { diff --git a/src/main/java/com/sheepit/client/os/Mac.java b/src/main/java/com/sheepit/client/os/Mac.java index 757ac78..e2c4f1b 100644 --- a/src/main/java/com/sheepit/client/os/Mac.java +++ b/src/main/java/com/sheepit/client/os/Mac.java @@ -54,7 +54,7 @@ public class Mac extends OS { actual_command.add(0, NICE_BINARY_PATH); } else { - Log.getInstance(null).error("No low priority binary, will not launch renderer in normal priority"); + Log.getInstance().error("No low priority binary, will not launch renderer in normal priority"); } ProcessBuilder builder = new ProcessBuilder(actual_command); builder.redirectErrorStream(true); @@ -111,7 +111,7 @@ public class Mac extends OS { hasNiceBinary = true; } catch (IOException e) { - Log.getInstance(null).error("Failed to find low priority binary, will not launch renderer in normal priority (" + e + ")"); + Log.getInstance().error("Failed to find low priority binary, will not launch renderer in normal priority (" + e + ")"); } finally { if (process != null) { diff --git a/src/main/java/com/sheepit/client/standalone/GuiText.java b/src/main/java/com/sheepit/client/standalone/GuiText.java index eeb4b7c..4861ac8 100644 --- a/src/main/java/com/sheepit/client/standalone/GuiText.java +++ b/src/main/java/com/sheepit/client/standalone/GuiText.java @@ -53,7 +53,7 @@ public class GuiText implements Gui { public GuiText() { this.downloadProgress = new DownloadProgress(this); this.framesRendered = 0; - this.log = Log.getInstance(null); + this.log = Log.getInstance(); this.df = new SimpleDateFormat("MMM dd HH:mm:ss"); this.eta = ""; this.statusOld = ""; diff --git a/src/main/java/com/sheepit/client/standalone/Worker.java b/src/main/java/com/sheepit/client/standalone/Worker.java index ea1b60d..7beb07c 100644 --- a/src/main/java/com/sheepit/client/standalone/Worker.java +++ b/src/main/java/com/sheepit/client/standalone/Worker.java @@ -152,8 +152,8 @@ public class Worker { if (sharedDownloadsDir != null) { File dir = new File(sharedDownloadsDir); - if (dir.exists() == false && dir.mkdirs()) { - Log.getInstance(config).debug("created shared-zip directory " + dir); + if (dir.exists() == false && dir.mkdirs() == false) { + System.err.println("ERROR: Failed to create shared-zip directory " + dir); } else if (dir.exists() == false) { System.err.println("ERROR: The shared-zip directory " + dir + " does not exist and cannot be automatically created"); @@ -176,10 +176,7 @@ public class Worker { File a_dir = new File(cache_dir); a_dir.mkdirs(); if (a_dir.isDirectory() && a_dir.canWrite()) { - DirectoryManager directoryManager = new DirectoryManager(config); - config.setCacheDir(a_dir); - directoryManager.createCacheDir(); } else { System.err.println("ERROR: The entered cache path is either not a directory or is not writable!"); @@ -474,7 +471,10 @@ public class Worker { String configFilePath = config.getConfigFilePath() != null ? config.getConfigFilePath() : OS.getOS().getDefaultConfigFilePath(); config.setLogDirectory(log_dir != null ? log_dir : (new File (configFilePath).getParent())); - Log.getInstance(config).debug("client version " + Configuration.jarVersion); + (new DirectoryManager(config)).createCacheDir(); + Log.setInstance(config); + + Log.getInstance().debug("client version " + Configuration.jarVersion); // Hostname change will overwrite the existing one (default or read from configuration file) but changes will be lost when the client closes if (hostname != null) { diff --git a/src/main/java/com/sheepit/client/standalone/swing/activity/Working.java b/src/main/java/com/sheepit/client/standalone/swing/activity/Working.java index 94319db..e4eb11f 100644 --- a/src/main/java/com/sheepit/client/standalone/swing/activity/Working.java +++ b/src/main/java/com/sheepit/client/standalone/swing/activity/Working.java @@ -111,7 +111,7 @@ public class Working implements Activity { sessionUploadsStatsValue = new JLabel("0KB"); currentTheme = UIManager.getLookAndFeel().getName(); // Capture the theme on component instantiation previousStatus = ""; - log = Log.getInstance(parent_.getConfiguration()); + log = Log.getInstance(); //Overwrite the window close button behaviour to showa dialogue parent.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);