From 7798b8dcdcd0f90f5b8d9263036b276333a99705 Mon Sep 17 00:00:00 2001 From: CalDescent Date: Sun, 20 Feb 2022 11:33:09 +0000 Subject: [PATCH] Keep items in arbitraryDataFileHashResponses if they are currently being requested by another thread. This should help to locate the higher numbered chunks from larger resources. --- .../controller/arbitrary/ArbitraryDataFileManager.java | 4 ++-- .../arbitrary/ArbitraryDataFileRequestThread.java | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataFileManager.java b/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataFileManager.java index 6d352b79..9b437e2b 100644 --- a/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataFileManager.java +++ b/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataFileManager.java @@ -37,7 +37,7 @@ public class ArbitraryDataFileManager extends Thread { /** * Map to keep track of our in progress (outgoing) arbitrary data file requests */ - private Map arbitraryDataFileRequests = Collections.synchronizedMap(new HashMap<>()); + public Map arbitraryDataFileRequests = Collections.synchronizedMap(new HashMap<>()); /** * Map to keep track of hashes that we might need to relay @@ -148,7 +148,7 @@ public class ArbitraryDataFileManager extends Thread { } } else { - LOGGER.trace("Already requesting data file {} for signature {}", arbitraryDataFile, Base58.encode(signature)); + LOGGER.trace("Already requesting data file {} for signature {} from peer {}", arbitraryDataFile, Base58.encode(signature), peer); } } else { diff --git a/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataFileRequestThread.java b/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataFileRequestThread.java index 0c2834d0..e46fd2fb 100644 --- a/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataFileRequestThread.java +++ b/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataFileRequestThread.java @@ -80,6 +80,12 @@ public class ArbitraryDataFileRequestThread implements Runnable { continue; } + // Skip if already requesting, but don't remove, as we might want to retry later + if (arbitraryDataFileManager.arbitraryDataFileRequests.containsKey(hash58)) { + // Already requesting - leave this attempt for later + continue; + } + // We want to process this file shouldProcess = true; iterator.remove();