From 8bb3a3f8a668cd7fb6f66e85662302816477f1fc Mon Sep 17 00:00:00 2001 From: CalDescent Date: Sat, 4 Dec 2021 09:28:45 +0000 Subject: [PATCH] Added hosted transactions cache This skips the need to check the filesystem if no new files have arrived since the last lookup. --- .../controller/arbitrary/ArbitraryDataManager.java | 3 +++ .../arbitrary/ArbitraryDataStorageManager.java | 14 ++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataManager.java b/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataManager.java index b471be41..610edf67 100644 --- a/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataManager.java +++ b/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataManager.java @@ -703,6 +703,9 @@ public class ArbitraryDataManager extends Thread { repository.discardChanges(); repository.getArbitraryRepository().save(arbitraryPeerData); repository.saveChanges(); + + // Invalidate the hosted transactions cache as we are now hosting something new + ArbitraryDataStorageManager.getInstance().invalidateHostedTransactionsCache(); } // Check if we have all the files we need for this transaction diff --git a/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataStorageManager.java b/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataStorageManager.java index e60df8b1..49f71fa6 100644 --- a/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataStorageManager.java +++ b/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataStorageManager.java @@ -41,6 +41,8 @@ public class ArbitraryDataStorageManager extends Thread { private long totalDirectorySize = 0L; private long lastDirectorySizeCheck = 0; + private List hostedTransactions; + private static long DIRECTORY_SIZE_CHECK_INTERVAL = 10 * 60 * 1000L; // 10 minutes /** Treat storage as full at 90% usage, to reduce risk of going over the limit. @@ -219,6 +221,11 @@ public class ArbitraryDataStorageManager extends Thread { // Hosted data public List listAllHostedTransactions(Repository repository) throws IOException { + // Load from cache if we can, to avoid disk reads + if (this.hostedTransactions != null) { + return this.hostedTransactions; + } + List arbitraryTransactionDataList = new ArrayList<>(); Path dataPath = Paths.get(Settings.getInstance().getDataPath()); @@ -254,9 +261,16 @@ public class ArbitraryDataStorageManager extends Thread { } } + // Update cache + this.hostedTransactions = arbitraryTransactionDataList; + return arbitraryTransactionDataList; } + public void invalidateHostedTransactionsCache() { + this.hostedTransactions = null; + } + // Size limits