From c6b6eb0e5f996c10ffbd9a70f774ef290c91ca7e Mon Sep 17 00:00:00 2001 From: jiangyuanshu <317787106@qq.com> Date: Thu, 12 Oct 2023 12:16:03 +0800 Subject: [PATCH 1/4] fix bug of getting head block concurrently --- .../SyncBlockChainMsgHandler.java | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/framework/src/main/java/org/tron/core/net/messagehandler/SyncBlockChainMsgHandler.java b/framework/src/main/java/org/tron/core/net/messagehandler/SyncBlockChainMsgHandler.java index 3c83bc51e47..67ebc7a9b43 100644 --- a/framework/src/main/java/org/tron/core/net/messagehandler/SyncBlockChainMsgHandler.java +++ b/framework/src/main/java/org/tron/core/net/messagehandler/SyncBlockChainMsgHandler.java @@ -6,6 +6,7 @@ import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import org.tron.common.utils.Pair; import org.tron.core.capsule.BlockCapsule.BlockId; import org.tron.core.config.Parameter.NetConstants; import org.tron.core.exception.P2pException; @@ -38,7 +39,9 @@ public void processMessage(PeerConnection peer, TronMessage msg) throws P2pExcep List summaryChainIds = syncBlockChainMessage.getBlockIds(); - LinkedList blockIds = getLostBlockIds(summaryChainIds); + Pair, BlockId> pair = getLostBlockIds(summaryChainIds); + LinkedList blockIds = pair.getKey(); + BlockId headID = pair.getValue(); if (blockIds.size() == 0) { logger.warn("Can't get lost block Ids"); @@ -48,7 +51,7 @@ public void processMessage(PeerConnection peer, TronMessage msg) throws P2pExcep peer.setNeedSyncFromUs(false); } else { peer.setNeedSyncFromUs(true); - remainNum = tronNetDelegate.getHeadBlockId().getNum() - blockIds.peekLast().getNum(); + remainNum = headID.getNum() - blockIds.peekLast().getNum(); } peer.setLastSyncBlockId(blockIds.peekLast()); @@ -85,17 +88,19 @@ private boolean check(PeerConnection peer, SyncBlockChainMessage msg) throws P2p return true; } - private LinkedList getLostBlockIds(List blockIds) throws P2pException { + private Pair, BlockId> getLostBlockIds(List blockIds) + throws P2pException { BlockId unForkId = getUnForkId(blockIds); - LinkedList ids = getBlockIds(unForkId.getNum()); + BlockId headID = tronNetDelegate.getHeadBlockId(); + LinkedList ids = getBlockIds(unForkId.getNum(), headID); if (ids.isEmpty() || !unForkId.equals(ids.peekFirst())) { unForkId = getUnForkId(blockIds); - ids = getBlockIds(unForkId.getNum()); + ids = getBlockIds(unForkId.getNum(), headID); } - return ids; + return new Pair<>(ids, headID); } private BlockId getUnForkId(List blockIds) throws P2pException { @@ -114,8 +119,7 @@ private BlockId getUnForkId(List blockIds) throws P2pException { return unForkId; } - private LinkedList getBlockIds(Long unForkNum) throws P2pException { - BlockId headID = tronNetDelegate.getHeadBlockId(); + private LinkedList getBlockIds(Long unForkNum, BlockId headID) throws P2pException { long headNum = headID.getNum(); long len = Math.min(headNum, unForkNum + NetConstants.SYNC_FETCH_BATCH_NUM); From de2ee35665d19bc3aa4fb4d5740ea27aa52bf9d1 Mon Sep 17 00:00:00 2001 From: jiangyuanshu <317787106@qq.com> Date: Thu, 12 Oct 2023 13:17:40 +0800 Subject: [PATCH 2/4] feat(net): optimize SyncBlockChainMsgHandlerTest --- .../net/messagehandler/SyncBlockChainMsgHandlerTest.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/framework/src/test/java/org/tron/core/net/messagehandler/SyncBlockChainMsgHandlerTest.java b/framework/src/test/java/org/tron/core/net/messagehandler/SyncBlockChainMsgHandlerTest.java index 25108e19b70..42677115595 100644 --- a/framework/src/test/java/org/tron/core/net/messagehandler/SyncBlockChainMsgHandlerTest.java +++ b/framework/src/test/java/org/tron/core/net/messagehandler/SyncBlockChainMsgHandlerTest.java @@ -15,6 +15,7 @@ import org.tron.common.application.TronApplicationContext; import org.tron.core.Constant; import org.tron.core.capsule.BlockCapsule; +import org.tron.core.capsule.BlockCapsule.BlockId; import org.tron.core.config.DefaultConfig; import org.tron.core.config.args.Args; import org.tron.core.exception.P2pException; @@ -77,9 +78,9 @@ public void testProcessMessage() throws Exception { } Method method2 = handler.getClass().getDeclaredMethod( - "getBlockIds", Long.class); + "getBlockIds", Long.class, BlockId.class); method2.setAccessible(true); - List list = (List) method2.invoke(handler, 0L); + List list = (List) method2.invoke(handler, 0L, new BlockCapsule.BlockId()); Assert.assertEquals(1, list.size()); } From 2990f2dc23db92beae2be3286eabd897149cf8f4 Mon Sep 17 00:00:00 2001 From: jiangyuanshu <317787106@qq.com> Date: Thu, 12 Oct 2023 15:11:09 +0800 Subject: [PATCH 3/4] feat(net):optimize SyncBlockChainMsgHandler --- .../net/messagehandler/SyncBlockChainMsgHandler.java | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/framework/src/main/java/org/tron/core/net/messagehandler/SyncBlockChainMsgHandler.java b/framework/src/main/java/org/tron/core/net/messagehandler/SyncBlockChainMsgHandler.java index 67ebc7a9b43..958ebfe5561 100644 --- a/framework/src/main/java/org/tron/core/net/messagehandler/SyncBlockChainMsgHandler.java +++ b/framework/src/main/java/org/tron/core/net/messagehandler/SyncBlockChainMsgHandler.java @@ -6,7 +6,6 @@ import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import org.tron.common.utils.Pair; import org.tron.core.capsule.BlockCapsule.BlockId; import org.tron.core.config.Parameter.NetConstants; import org.tron.core.exception.P2pException; @@ -38,10 +37,8 @@ public void processMessage(PeerConnection peer, TronMessage msg) throws P2pExcep long remainNum = 0; List summaryChainIds = syncBlockChainMessage.getBlockIds(); - - Pair, BlockId> pair = getLostBlockIds(summaryChainIds); - LinkedList blockIds = pair.getKey(); - BlockId headID = pair.getValue(); + BlockId headID = tronNetDelegate.getHeadBlockId(); + LinkedList blockIds = getLostBlockIds(summaryChainIds, headID); if (blockIds.size() == 0) { logger.warn("Can't get lost block Ids"); @@ -88,11 +85,10 @@ private boolean check(PeerConnection peer, SyncBlockChainMessage msg) throws P2p return true; } - private Pair, BlockId> getLostBlockIds(List blockIds) + private LinkedList getLostBlockIds(List blockIds, BlockId headID) throws P2pException { BlockId unForkId = getUnForkId(blockIds); - BlockId headID = tronNetDelegate.getHeadBlockId(); LinkedList ids = getBlockIds(unForkId.getNum(), headID); if (ids.isEmpty() || !unForkId.equals(ids.peekFirst())) { @@ -100,7 +96,7 @@ private Pair, BlockId> getLostBlockIds(List blockId ids = getBlockIds(unForkId.getNum(), headID); } - return new Pair<>(ids, headID); + return ids; } private BlockId getUnForkId(List blockIds) throws P2pException { From e3521525ba12b06ffe27edefb0cb50707e61291e Mon Sep 17 00:00:00 2001 From: jiangyuanshu <317787106@qq.com> Date: Thu, 12 Oct 2023 15:15:27 +0800 Subject: [PATCH 4/4] optimize SyncBlockChainMsgHandlerTest --- .../core/net/messagehandler/SyncBlockChainMsgHandlerTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/framework/src/test/java/org/tron/core/net/messagehandler/SyncBlockChainMsgHandlerTest.java b/framework/src/test/java/org/tron/core/net/messagehandler/SyncBlockChainMsgHandlerTest.java index 42677115595..d4ad32dd34f 100644 --- a/framework/src/test/java/org/tron/core/net/messagehandler/SyncBlockChainMsgHandlerTest.java +++ b/framework/src/test/java/org/tron/core/net/messagehandler/SyncBlockChainMsgHandlerTest.java @@ -69,10 +69,10 @@ public void testProcessMessage() throws Exception { Assert.assertTrue(!f); Method method1 = handler.getClass().getDeclaredMethod( - "getLostBlockIds", List.class); + "getLostBlockIds", List.class, BlockId.class); method1.setAccessible(true); try { - method1.invoke(handler, blockIds); + method1.invoke(handler, blockIds, new BlockCapsule.BlockId()); } catch (InvocationTargetException e) { Assert.assertEquals("unForkId is null", e.getTargetException().getMessage()); }