From bfaf4c58e4545d8df67752535a0723fff52e3d4b Mon Sep 17 00:00:00 2001 From: CalDescent Date: Thu, 7 Oct 2021 18:50:25 +0100 Subject: [PATCH] Make sure to check the archive when serving block summaries and signatures --- .../org/qortal/controller/Controller.java | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/qortal/controller/Controller.java b/src/main/java/org/qortal/controller/Controller.java index 12b27c3a..839e2013 100644 --- a/src/main/java/org/qortal/controller/Controller.java +++ b/src/main/java/org/qortal/controller/Controller.java @@ -1538,6 +1538,10 @@ public class Controller extends Thread { int numberRequested = Math.min(Network.MAX_BLOCK_SUMMARIES_PER_REPLY, getBlockSummariesMessage.getNumberRequested()); BlockData blockData = repository.getBlockRepository().fromReference(parentSignature); + if (blockData == null) { + // Try the archive + blockData = repository.getBlockArchiveRepository().fromReference(parentSignature); + } if (blockData != null) { if (PruneManager.getInstance().isBlockPruned(blockData.getHeight(), repository)) { @@ -1551,7 +1555,12 @@ public class Controller extends Thread { BlockSummaryData blockSummary = new BlockSummaryData(blockData); blockSummaries.add(blockSummary); - blockData = repository.getBlockRepository().fromReference(blockData.getSignature()); + byte[] previousSignature = blockData.getSignature(); + blockData = repository.getBlockRepository().fromReference(previousSignature); + if (blockData == null) { + // Try the archive + blockData = repository.getBlockArchiveRepository().fromReference(previousSignature); + } } } catch (DataException e) { LOGGER.error(String.format("Repository issue while sending block summaries after %s to peer %s", Base58.encode(parentSignature), peer), e); @@ -1600,11 +1609,20 @@ public class Controller extends Thread { try (final Repository repository = RepositoryManager.getRepository()) { int numberRequested = getSignaturesMessage.getNumberRequested(); BlockData blockData = repository.getBlockRepository().fromReference(parentSignature); + if (blockData == null) { + // Try the archive + blockData = repository.getBlockArchiveRepository().fromReference(parentSignature); + } while (blockData != null && signatures.size() < numberRequested) { signatures.add(blockData.getSignature()); - blockData = repository.getBlockRepository().fromReference(blockData.getSignature()); + byte[] previousSignature = blockData.getSignature(); + blockData = repository.getBlockRepository().fromReference(previousSignature); + if (blockData == null) { + // Try the archive + blockData = repository.getBlockArchiveRepository().fromReference(previousSignature); + } } } catch (DataException e) { LOGGER.error(String.format("Repository issue while sending V2 signatures after %s to peer %s", Base58.encode(parentSignature), peer), e);