From 8a42dce763a4c237e97ead0747e5a61a0c51b83c Mon Sep 17 00:00:00 2001 From: CalDescent Date: Fri, 21 Jan 2022 14:23:55 +0000 Subject: [PATCH] Use the first responding peer in the relay map. This encourages shorter relays, since longer ones will take more time to respond, and also prevents a peer from intentionally taking a long time to respond so that it overwrites an existing entry. Longer term we could consider keeping track of all respondents for each hash, if there are still issues with data retrieval. I suspect this won't be needed though, as the requesting peer has 16+ different peers connected, and therefore potentially 16 different mappings already. --- .../controller/arbitrary/ArbitraryDataFileListManager.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataFileListManager.java b/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataFileListManager.java index 6419a51e..8b26bdc3 100644 --- a/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataFileListManager.java +++ b/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataFileListManager.java @@ -383,8 +383,9 @@ public class ArbitraryDataFileListManager { for (byte[] hash : hashes) { String hash58 = Base58.encode(hash); Triple value = new Triple<>(signature58, peer, now); - arbitraryDataFileManager.arbitraryRelayMap.put(hash58, value); - LOGGER.debug("Added {} to relay map: {}, {}, {}", hash58, signature58, peer, now); + if (arbitraryDataFileManager.arbitraryRelayMap.putIfAbsent(hash58, value) == null) { + LOGGER.debug("Added {} to relay map: {}, {}, {}", hash58, signature58, peer, now); + } } // Forward to requesting peer