From ab4ba9bb17540accb75cd5eb5fd41c34de61e938 Mon Sep 17 00:00:00 2001 From: CalDescent Date: Tue, 8 Feb 2022 08:36:45 +0000 Subject: [PATCH] Don't re-fetch unconfirmed transactions that are already in the queue --- src/main/java/org/qortal/controller/Controller.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main/java/org/qortal/controller/Controller.java b/src/main/java/org/qortal/controller/Controller.java index e61ee259..b8fd2aa8 100644 --- a/src/main/java/org/qortal/controller/Controller.java +++ b/src/main/java/org/qortal/controller/Controller.java @@ -824,6 +824,12 @@ public class Controller extends Thread { // Incoming transactions queue + private boolean incomingTransactionQueueContains(byte[] signature) { + synchronized (incomingTransactions) { + return incomingTransactions.stream().anyMatch(t -> Arrays.equals(t.getSignature(), signature)); + } + } + private void processIncomingTransactionsQueue() { if (this.incomingTransactions.size() == 0) { // Don't bother locking if there are no new transactions to process @@ -1599,6 +1605,12 @@ public class Controller extends Thread { continue; } + // Ignore if this transaction is in the queue + if (incomingTransactionQueueContains(signature)) { + LOGGER.trace(() -> String.format("Ignoring existing queued transaction %s from peer %s", Base58.encode(signature), peer)); + continue; + } + // Do we have it already? (Before requesting transaction data itself) if (repository.getTransactionRepository().exists(signature)) { LOGGER.trace(() -> String.format("Ignoring existing transaction %s from peer %s", Base58.encode(signature), peer));