From 0e59e11097b87ce4f7c3c73fb529a67f78833544 Mon Sep 17 00:00:00 2001 From: Karim Taam Date: Thu, 3 Oct 2024 11:35:41 +0200 Subject: [PATCH] try fix busy exception during snapsync Signed-off-by: Karim Taam --- .../snapsync/request/heal/TrieNodeHealingRequest.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/sync/snapsync/request/heal/TrieNodeHealingRequest.java b/ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/sync/snapsync/request/heal/TrieNodeHealingRequest.java index 7e206232c57..e6221087256 100644 --- a/ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/sync/snapsync/request/heal/TrieNodeHealingRequest.java +++ b/ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/sync/snapsync/request/heal/TrieNodeHealingRequest.java @@ -32,6 +32,7 @@ import java.util.List; import java.util.Objects; import java.util.Optional; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.stream.Stream; import org.apache.tuweni.bytes.Bytes; @@ -44,7 +45,7 @@ public abstract class TrieNodeHealingRequest extends SnapDataRequest private final Bytes location; protected Bytes data; - protected boolean requiresPersisting = true; + protected AtomicBoolean requiresPersisting = new AtomicBoolean(true); protected TrieNodeHealingRequest(final Hash nodeHash, final Hash rootHash, final Bytes location) { super(TRIE_NODE, rootHash); @@ -65,7 +66,7 @@ public int persist( return 0; } int saved = 0; - if (requiresPersisting) { + if (requiresPersisting.getAndSet(false)) { checkNotNull(data, "Must set data before node can be persisted."); saved = doPersist( @@ -143,7 +144,7 @@ public boolean isExpired(final SnapSyncProcessState snapSyncState) { } public boolean isRequiresPersisting() { - return requiresPersisting; + return requiresPersisting.get(); } public Bytes32 getNodeHash() { @@ -173,7 +174,7 @@ public void setData(final Bytes data) { } public void setRequiresPersisting(final boolean requiresPersisting) { - this.requiresPersisting = requiresPersisting; + this.requiresPersisting.set(requiresPersisting); } private boolean nodeIsHashReferencedDescendant(final Node node) {