From e8e6a36b3e71701f6656d92d6956d81412668664 Mon Sep 17 00:00:00 2001 From: Sally MacFarlane Date: Wed, 19 Oct 2022 20:29:32 +1000 Subject: [PATCH] check for self in one more spot (#4521) * check for self in one more spot Signed-off-by: Sally MacFarlane Signed-off-by: Sally MacFarlane --- CHANGELOG.md | 3 ++- .../ethereum/p2p/network/DefaultP2PNetwork.java | 2 ++ .../p2p/network/DefaultP2PNetworkTest.java | 16 ++++++++++++++++ .../besu/ethereum/p2p/peers/PeerTestHelper.java | 4 ++++ 4 files changed, 24 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 09db2feada5..e739d02a71c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,9 +19,10 @@ - Improved RLP processing of zero-length string as 0x80 [#4283](https://github.com/hyperledger/besu/pull/4283) [#4388](https://github.com/hyperledger/besu/issues/4388) - Increased level of detail in JSON-RPC parameter error log messages [#4510](https://github.com/hyperledger/besu/pull/4510) - New unstable configuration options to set the maximum time, in milliseconds, a PoS block creation jobs is allowed to run [#4519](https://github.com/hyperledger/besu/pull/4519) -- Tune EthScheduler thread pools to avoid to recreate too many threads [#4529](https://github.com/hyperledger/besu/pull/4529) +- Tune EthScheduler thread pools to avoid recreating too many threads [#4529](https://github.com/hyperledger/besu/pull/4529) - RocksDB snapshot based worldstate and plugin-api addition of Snapshot interfaces [#4409](https://github.com/hyperledger/besu/pull/4409) - Continuously try to build better block proposals until timeout or GetPayload is called [#4516](https://github.com/hyperledger/besu/pull/4516) +- Avoid connecting to self when using static-nodes [#4521](https://github.com/hyperledger/besu/pull/4521) ### Bug Fixes - Corrects emission of blockadded events when rewinding during a re-org. Fix for [#4495](https://github.com/hyperledger/besu/issues/4495) diff --git a/ethereum/p2p/src/main/java/org/hyperledger/besu/ethereum/p2p/network/DefaultP2PNetwork.java b/ethereum/p2p/src/main/java/org/hyperledger/besu/ethereum/p2p/network/DefaultP2PNetwork.java index dee16a5b297..ca675891ec9 100644 --- a/ethereum/p2p/src/main/java/org/hyperledger/besu/ethereum/p2p/network/DefaultP2PNetwork.java +++ b/ethereum/p2p/src/main/java/org/hyperledger/besu/ethereum/p2p/network/DefaultP2PNetwork.java @@ -359,8 +359,10 @@ void checkMaintainedConnectionPeers() { if (!localNode.isReady()) { return; } + final EnodeURL localEnodeURL = localNode.getPeer().getEnodeURL(); maintainedPeers .streamPeers() + .filter(peer -> !peer.getEnodeURL().getNodeId().equals(localEnodeURL.getNodeId())) .filter(p -> !rlpxAgent.getPeerConnection(p).isPresent()) .forEach(rlpxAgent::connect); } diff --git a/ethereum/p2p/src/test/java/org/hyperledger/besu/ethereum/p2p/network/DefaultP2PNetworkTest.java b/ethereum/p2p/src/test/java/org/hyperledger/besu/ethereum/p2p/network/DefaultP2PNetworkTest.java index a1002577917..c3b8a0d7335 100644 --- a/ethereum/p2p/src/test/java/org/hyperledger/besu/ethereum/p2p/network/DefaultP2PNetworkTest.java +++ b/ethereum/p2p/src/test/java/org/hyperledger/besu/ethereum/p2p/network/DefaultP2PNetworkTest.java @@ -52,6 +52,7 @@ import org.hyperledger.besu.nat.NatService; import org.hyperledger.besu.nat.core.domain.NetworkProtocol; import org.hyperledger.besu.nat.upnp.UpnpNatManager; +import org.hyperledger.besu.plugin.data.EnodeURL; import java.util.ArrayList; import java.util.Collections; @@ -166,6 +167,21 @@ public void removeMaintainedConnectionPeer_nonMaintainedPeer() { verify(discoveryAgent, times(1)).dropPeer(peer); } + @Test + public void checkMaintainedConnectionPeers_doesNotConnectToSelf() { + final DefaultP2PNetwork network = network(); + network.start(); + + final Optional maybeSelfEnode = network.getLocalEnode(); + final Peer selfPeer = PeerTestHelper.createPeer(maybeSelfEnode.get()); + maintainedPeers.add(selfPeer); + + verify(rlpxAgent, times(0)).connect(selfPeer); + + network.checkMaintainedConnectionPeers(); + verify(rlpxAgent, times(0)).connect(selfPeer); + } + @Test public void checkMaintainedConnectionPeers_unconnectedPeer() { final DefaultP2PNetwork network = network(); diff --git a/ethereum/p2p/src/test/java/org/hyperledger/besu/ethereum/p2p/peers/PeerTestHelper.java b/ethereum/p2p/src/test/java/org/hyperledger/besu/ethereum/p2p/peers/PeerTestHelper.java index a1fb7a7dd54..7f5085bcccd 100644 --- a/ethereum/p2p/src/test/java/org/hyperledger/besu/ethereum/p2p/peers/PeerTestHelper.java +++ b/ethereum/p2p/src/test/java/org/hyperledger/besu/ethereum/p2p/peers/PeerTestHelper.java @@ -27,6 +27,10 @@ public static Peer createPeer() { return DefaultPeer.fromEnodeURL(enode()); } + public static Peer createPeer(final EnodeURL enodeURL) { + return DefaultPeer.fromEnodeURL(enodeURL); + } + public static Peer createPeer(final Bytes nodeId) { return DefaultPeer.fromEnodeURL(enodeBuilder().nodeId(nodeId).build()); }