diff --git a/ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/sync/backwardsync/BackwardSyncContext.java b/ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/sync/backwardsync/BackwardSyncContext.java index 6a681bec288..aee56cda22a 100644 --- a/ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/sync/backwardsync/BackwardSyncContext.java +++ b/ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/sync/backwardsync/BackwardSyncContext.java @@ -129,12 +129,16 @@ public synchronized CompletableFuture syncBackwardsUntil(final Hash newBlo backwardChain.addNewHash(newBlockHash); } - final Status status = getOrStartSyncSession(); - backwardChain - .getBlock(newBlockHash) - .ifPresent( - newTargetBlock -> status.updateTargetHeight(newTargetBlock.getHeader().getNumber())); - return status.currentFuture; + if (isReady()) { + final Status status = getOrStartSyncSession(); + backwardChain + .getBlock(newBlockHash) + .ifPresent( + newTargetBlock -> status.updateTargetHeight(newTargetBlock.getHeader().getNumber())); + return status.currentFuture; + } else { + return CompletableFuture.failedFuture(new Throwable("Backward sync is not ready")); + } } public synchronized CompletableFuture syncBackwardsUntil(final Block newPivot) { @@ -142,9 +146,13 @@ public synchronized CompletableFuture syncBackwardsUntil(final Block newPi backwardChain.appendTrustedBlock(newPivot); } - final Status status = getOrStartSyncSession(); - status.updateTargetHeight(newPivot.getHeader().getNumber()); - return status.currentFuture; + if (isReady()) { + final Status status = getOrStartSyncSession(); + status.updateTargetHeight(newPivot.getHeader().getNumber()); + return status.currentFuture; + } else { + return CompletableFuture.failedFuture(new Throwable("Backward sync is not ready")); + } } private Status getOrStartSyncSession() {