From d62808fe1dd4dcf20f1dd888dccd2ddbadcec3d6 Mon Sep 17 00:00:00 2001 From: CalDescent Date: Tue, 8 Mar 2022 22:42:07 +0000 Subject: [PATCH] Don't attempt to create the data directory every time an ArbitraryDataFile instance is instantiated. This was using excessive amounts of CPU and disk I/O. --- .../qortal/arbitrary/ArbitraryDataFile.java | 14 ------------- .../arbitrary/ArbitraryDataManager.java | 21 +++++++++++++++++++ 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/main/java/org/qortal/arbitrary/ArbitraryDataFile.java b/src/main/java/org/qortal/arbitrary/ArbitraryDataFile.java index 4c806648..6696126a 100644 --- a/src/main/java/org/qortal/arbitrary/ArbitraryDataFile.java +++ b/src/main/java/org/qortal/arbitrary/ArbitraryDataFile.java @@ -73,7 +73,6 @@ public class ArbitraryDataFile { } public ArbitraryDataFile(String hash58, byte[] signature) throws DataException { - this.createDataDirectory(); this.filePath = ArbitraryDataFile.getOutputFilePath(hash58, signature, false); this.chunks = new ArrayList<>(); this.hash58 = hash58; @@ -150,19 +149,6 @@ public class ArbitraryDataFile { return ArbitraryDataFile.fromPath(Paths.get(file.getPath()), signature); } - private boolean createDataDirectory() { - // Create the data directory if it doesn't exist - String dataPath = Settings.getInstance().getDataPath(); - Path dataDirectory = Paths.get(dataPath); - try { - Files.createDirectories(dataDirectory); - } catch (IOException e) { - LOGGER.error("Unable to create data directory"); - return false; - } - return true; - } - private Path copyToDataDirectory(Path sourcePath, byte[] signature) throws DataException { if (this.hash58 == null || this.filePath == null) { return null; diff --git a/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataManager.java b/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataManager.java index 2cac7c64..a27080cd 100644 --- a/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataManager.java +++ b/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataManager.java @@ -1,6 +1,9 @@ package org.qortal.controller.arbitrary; import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.*; import org.apache.logging.log4j.LogManager; @@ -86,6 +89,9 @@ public class ArbitraryDataManager extends Thread { public void run() { Thread.currentThread().setName("Arbitrary Data Manager"); + // Create data directory in case it doesn't exist yet + this.createDataDirectory(); + try { // Wait for node to finish starting up and making connections Thread.sleep(2 * 60 * 1000L); @@ -127,6 +133,9 @@ public class ArbitraryDataManager extends Thread { continue; } + // In case the data directory has been deleted... + this.createDataDirectory(); + // Fetch data according to storage policy switch (Settings.getInstance().getStoragePolicy()) { case FOLLOWED: @@ -509,6 +518,18 @@ public class ArbitraryDataManager extends Thread { } } + private boolean createDataDirectory() { + // Create the data directory if it doesn't exist + String dataPath = Settings.getInstance().getDataPath(); + Path dataDirectory = Paths.get(dataPath); + try { + Files.createDirectories(dataDirectory); + } catch (IOException e) { + LOGGER.error("Unable to create data directory"); + return false; + } + return true; + } public int getPowDifficulty() { return this.powDifficulty;