From 0a88a0c95ea083460eb98eebafd279baeaf04da5 Mon Sep 17 00:00:00 2001 From: CalDescent Date: Tue, 8 Feb 2022 08:45:58 +0000 Subject: [PATCH] Perform the base58 decoding outside of the arbitraryDataFileHashResponses lock, to reduce the amount of waiting around by other threads. --- .../arbitrary/ArbitraryDataFileRequestThread.java | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataFileRequestThread.java b/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataFileRequestThread.java index 62c22513..7e510407 100644 --- a/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataFileRequestThread.java +++ b/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataFileRequestThread.java @@ -45,8 +45,8 @@ public class ArbitraryDataFileRequestThread implements Runnable { ArbitraryDataFileManager arbitraryDataFileManager = ArbitraryDataFileManager.getInstance(); ArbitraryTransactionData arbitraryTransactionData = null; - byte[] signature = null; - byte[] hash = null; + String signature58 = null; + String hash58 = null; Peer peer = null; boolean shouldProcess = false; @@ -63,7 +63,7 @@ public class ArbitraryDataFileRequestThread implements Runnable { continue; } - String hash58 = (String) entry.getKey(); + hash58 = (String) entry.getKey(); Triple value = (Triple) entry.getValue(); if (value == null) { iterator.remove(); @@ -71,7 +71,7 @@ public class ArbitraryDataFileRequestThread implements Runnable { } peer = value.getA(); - String signature58 = value.getB(); + signature58 = value.getB(); Long timestamp = value.getC(); if (now - timestamp >= ArbitraryDataManager.ARBITRARY_RELAY_TIMEOUT || signature58 == null || peer == null) { @@ -80,9 +80,6 @@ public class ArbitraryDataFileRequestThread implements Runnable { continue; } - hash = Base58.decode(hash58); - signature = Base58.decode(signature58); - // We want to process this file shouldProcess = true; iterator.remove(); @@ -95,6 +92,9 @@ public class ArbitraryDataFileRequestThread implements Runnable { return; } + byte[] hash = Base58.decode(hash58); + byte[] signature = Base58.decode(signature58); + // Fetch the transaction data try (final Repository repository = RepositoryManager.getRepository()) { arbitraryTransactionData = ArbitraryTransactionUtils.fetchTransactionData(repository, signature); @@ -106,7 +106,6 @@ public class ArbitraryDataFileRequestThread implements Runnable { return; } - String hash58 = Base58.encode(hash); LOGGER.debug("Fetching file {} from peer {} via request thread...", hash58, peer); arbitraryDataFileManager.fetchArbitraryDataFiles(repository, peer, signature, arbitraryTransactionData, Arrays.asList(hash));