diff --git a/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataFileRequestThread.java b/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataFileRequestThread.java index 1872898f..b27eef26 100644 --- a/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataFileRequestThread.java +++ b/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataFileRequestThread.java @@ -76,15 +76,13 @@ public class ArbitraryDataFileRequestThread { LOGGER.error(e.getMessage(), e); } } + public void processFileHashes(Long now, List responseInfos, ArbitraryDataFileManager arbitraryDataFileManager) { if (Controller.isStopping()) { return; } - List toProcess = new ArrayList<>(responseInfos.size()); - - Map responseInfoByHash58 = new HashMap<>(responseInfos.size()); - Map signatureBySignature58 = new HashMap<>(toProcess.size()); + Map signatureBySignature58 = new HashMap<>(responseInfos.size()); Map> responseInfoBySignature58 = new HashMap<>(); for( ArbitraryFileListResponseInfo responseInfo : responseInfos) { @@ -119,8 +117,6 @@ public class ArbitraryDataFileRequestThread { } // We want to process this file, store and map data to process later - toProcess.add(responseInfo); - responseInfoByHash58.put(responseInfo.getHash58(), responseInfo); signatureBySignature58.put(responseInfo.getSignature58(), signature); responseInfoBySignature58 .computeIfAbsent(responseInfo.getSignature58(), signature58 -> new ArrayList<>()) @@ -162,6 +158,17 @@ public class ArbitraryDataFileRequestThread { private void arbitraryDataFileFetcher(ArbitraryDataFileManager arbitraryDataFileManager, ArbitraryFileListResponseInfo responseInfo, ArbitraryTransactionData arbitraryTransactionData) { try { + Long now = NTP.getTime(); + + if (now - responseInfo.getTimestamp() >= ArbitraryDataManager.ARBITRARY_RELAY_TIMEOUT ) { + + Peer peer = responseInfo.getPeer(); + String hash58 = responseInfo.getHash58(); + String signature58 = responseInfo.getSignature58(); + LOGGER.debug("Peer {} version {} didn't fetch data file {} for signature {} due to relay timeout.", peer, peer.getPeersVersionString(), hash58, signature58); + return; + } + arbitraryDataFileManager.fetchArbitraryDataFiles( responseInfo.getPeer(), arbitraryTransactionData.getSignature(),