From 0dc7a3f01bb56220f7a3028ce30ee3636daf1682 Mon Sep 17 00:00:00 2001 From: zeusoo001 Date: Mon, 24 Jun 2024 09:53:57 +0800 Subject: [PATCH 1/2] feat(net) : optimize the isIdle method --- .../src/main/java/org/tron/core/net/peer/PeerConnection.java | 2 +- .../test/java/org/tron/core/net/peer/PeerConnectionTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/framework/src/main/java/org/tron/core/net/peer/PeerConnection.java b/framework/src/main/java/org/tron/core/net/peer/PeerConnection.java index 4fac50b82c..e66f708b54 100644 --- a/framework/src/main/java/org/tron/core/net/peer/PeerConnection.java +++ b/framework/src/main/java/org/tron/core/net/peer/PeerConnection.java @@ -167,7 +167,7 @@ public void setBlockBothHave(BlockId blockId) { } public boolean isIdle() { - return advInvRequest.isEmpty() && syncBlockRequested.isEmpty() && syncChainRequested == null; + return syncBlockRequested.isEmpty() && syncChainRequested == null; } public void sendMessage(Message message) { diff --git a/framework/src/test/java/org/tron/core/net/peer/PeerConnectionTest.java b/framework/src/test/java/org/tron/core/net/peer/PeerConnectionTest.java index 9db5230ed4..2eaebb2715 100644 --- a/framework/src/test/java/org/tron/core/net/peer/PeerConnectionTest.java +++ b/framework/src/test/java/org/tron/core/net/peer/PeerConnectionTest.java @@ -78,7 +78,7 @@ public void testIsIdle() { Long time = System.currentTimeMillis(); peerConnection.getAdvInvRequest().put(item, time); f = peerConnection.isIdle(); - Assert.assertTrue(!f); + Assert.assertTrue(f); peerConnection.getAdvInvRequest().clear(); f = peerConnection.isIdle(); From ddbe8f10b32f5e0df3239a7ad66e0f63d9353fb7 Mon Sep 17 00:00:00 2001 From: zeusoo001 Date: Mon, 1 Jul 2024 14:20:07 +0800 Subject: [PATCH 2/2] feat(net): add isSyncIdle method --- .../tron/core/net/peer/PeerConnection.java | 4 +++ .../core/net/service/sync/SyncService.java | 4 +-- .../core/net/peer/PeerConnectionTest.java | 32 ++++++++++++++++++- 3 files changed, 37 insertions(+), 3 deletions(-) diff --git a/framework/src/main/java/org/tron/core/net/peer/PeerConnection.java b/framework/src/main/java/org/tron/core/net/peer/PeerConnection.java index e66f708b54..1c7560559e 100644 --- a/framework/src/main/java/org/tron/core/net/peer/PeerConnection.java +++ b/framework/src/main/java/org/tron/core/net/peer/PeerConnection.java @@ -167,6 +167,10 @@ public void setBlockBothHave(BlockId blockId) { } public boolean isIdle() { + return advInvRequest.isEmpty() && isSyncIdle(); + } + + public boolean isSyncIdle() { return syncBlockRequested.isEmpty() && syncChainRequested == null; } diff --git a/framework/src/main/java/org/tron/core/net/service/sync/SyncService.java b/framework/src/main/java/org/tron/core/net/service/sync/SyncService.java index 9453700df0..8c67397796 100644 --- a/framework/src/main/java/org/tron/core/net/service/sync/SyncService.java +++ b/framework/src/main/java/org/tron/core/net/service/sync/SyncService.java @@ -134,7 +134,7 @@ public void processBlock(PeerConnection peer, BlockMessage blockMessage) { blockJustReceived.put(blockMessage, peer); } handleFlag = true; - if (peer.isIdle()) { + if (peer.isSyncIdle()) { if (peer.getRemainNum() > 0 && peer.getSyncBlockToFetch().size() <= syncFetchBatchNum) { syncNext(peer); @@ -226,7 +226,7 @@ private BlockId getBlockIdByNum(long num) throws P2pException { private void startFetchSyncBlock() { HashMap> send = new HashMap<>(); tronNetDelegate.getActivePeer().stream() - .filter(peer -> peer.isNeedSyncFromPeer() && peer.isIdle()) + .filter(peer -> peer.isNeedSyncFromPeer() && peer.isSyncIdle()) .filter(peer -> peer.isFetchAble()) .forEach(peer -> { if (!send.containsKey(peer)) { diff --git a/framework/src/test/java/org/tron/core/net/peer/PeerConnectionTest.java b/framework/src/test/java/org/tron/core/net/peer/PeerConnectionTest.java index 2eaebb2715..5a67cd8f60 100644 --- a/framework/src/test/java/org/tron/core/net/peer/PeerConnectionTest.java +++ b/framework/src/test/java/org/tron/core/net/peer/PeerConnectionTest.java @@ -78,7 +78,7 @@ public void testIsIdle() { Long time = System.currentTimeMillis(); peerConnection.getAdvInvRequest().put(item, time); f = peerConnection.isIdle(); - Assert.assertTrue(f); + Assert.assertTrue(!f); peerConnection.getAdvInvRequest().clear(); f = peerConnection.isIdle(); @@ -98,6 +98,36 @@ public void testIsIdle() { Assert.assertTrue(!f); } + @Test + public void testIsSyncIdle() { + PeerConnection peerConnection = new PeerConnection(); + boolean f = peerConnection.isSyncIdle(); + Assert.assertTrue(f); + + Item item = new Item(Sha256Hash.ZERO_HASH, Protocol.Inventory.InventoryType.TRX); + Long time = System.currentTimeMillis(); + peerConnection.getAdvInvRequest().put(item, time); + f = peerConnection.isSyncIdle(); + Assert.assertTrue(f); + + peerConnection.getAdvInvRequest().clear(); + f = peerConnection.isSyncIdle(); + Assert.assertTrue(f); + + BlockCapsule.BlockId blockId = new BlockCapsule.BlockId(); + peerConnection.getSyncBlockRequested().put(blockId, time); + f = peerConnection.isSyncIdle(); + Assert.assertTrue(!f); + + peerConnection.getSyncBlockRequested().clear(); + f = peerConnection.isSyncIdle(); + Assert.assertTrue(f); + + peerConnection.setSyncChainRequested(new Pair<>(new LinkedList<>(), time)); + f = peerConnection.isSyncIdle(); + Assert.assertTrue(!f); + } + @Test public void testOnConnect() { PeerConnection peerConnection = new PeerConnection();