From 7f1ded7b344cef489a21691db10eca84c21fb408 Mon Sep 17 00:00:00 2001 From: wubin01 Date: Tue, 9 Apr 2019 15:16:53 +0800 Subject: [PATCH 1/3] fast forward for block --- .../messagehandler/InventoryMsgHandler.java | 11 ------ .../org/tron/core/net/service/AdvService.java | 39 ++++++++++++++----- 2 files changed, 30 insertions(+), 20 deletions(-) diff --git a/src/main/java/org/tron/core/net/messagehandler/InventoryMsgHandler.java b/src/main/java/org/tron/core/net/messagehandler/InventoryMsgHandler.java index 269039d7b6e..712e8ca2873 100644 --- a/src/main/java/org/tron/core/net/messagehandler/InventoryMsgHandler.java +++ b/src/main/java/org/tron/core/net/messagehandler/InventoryMsgHandler.java @@ -4,7 +4,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.common.utils.Sha256Hash; -import org.tron.core.config.args.Args; import org.tron.core.net.TronNetDelegate; import org.tron.core.net.message.InventoryMessage; import org.tron.core.net.message.TronMessage; @@ -28,17 +27,11 @@ public class InventoryMsgHandler implements TronMsgHandler { private int maxCountIn10s = 10_000; - private boolean fastForward = Args.getInstance().isFastForward(); - @Override public void processMessage(PeerConnection peer, TronMessage msg) { InventoryMessage inventoryMessage = (InventoryMessage) msg; InventoryType type = inventoryMessage.getInventoryType(); - if (fastForward && inventoryMessage.getInventoryType().equals(InventoryType.TRX)) { - return; - } - if (!check(peer, inventoryMessage)) { return; } @@ -54,10 +47,6 @@ private boolean check(PeerConnection peer, InventoryMessage inventoryMessage) { InventoryType type = inventoryMessage.getInventoryType(); int size = inventoryMessage.getHashList().size(); -// if (size > NetConstants.MAX_INV_FETCH_PER_PEER) { -// throw new P2pException(TypeEnum.BAD_MESSAGE, "size: " + size); -// } - if (peer.isNeedSyncFromPeer() || peer.isNeedSyncFromUs()) { logger.warn("Drop inv: {} size: {} from Peer {}, syncFromUs: {}, syncFromPeer: {}.", type, size, peer.getInetAddress(), peer.isNeedSyncFromUs(), peer.isNeedSyncFromPeer()); diff --git a/src/main/java/org/tron/core/net/service/AdvService.java b/src/main/java/org/tron/core/net/service/AdvService.java index ab43fe276c5..44cac231b30 100644 --- a/src/main/java/org/tron/core/net/service/AdvService.java +++ b/src/main/java/org/tron/core/net/service/AdvService.java @@ -65,16 +65,18 @@ public class AdvService { private boolean fastForward = Args.getInstance().isFastForward(); public void init() { - if (!fastForward) { - spreadExecutor.scheduleWithFixedDelay(() -> { - try { - consumerInvToSpread(); - } catch (Throwable t) { - logger.error("Spread thread error.", t); - } - }, 100, 30, TimeUnit.MILLISECONDS); + if (fastForward) { + return; } + spreadExecutor.scheduleWithFixedDelay(() -> { + try { + consumerInvToSpread(); + } catch (Throwable t) { + logger.error("Spread thread error.", t); + } + }, 100, 30, TimeUnit.MILLISECONDS); + fetchExecutor.scheduleWithFixedDelay(() -> { try { consumerInvToFetch(); @@ -90,6 +92,11 @@ public void close() { } synchronized public boolean addInv(Item item) { + + if (fastForward && !InventoryType.BLOCK.equals(item.getType())) { + return false; + } + if (invToFetchCache.getIfPresent(item) != null) { return false; } @@ -106,6 +113,11 @@ synchronized public boolean addInv(Item item) { invToFetchCache.put(item, System.currentTimeMillis()); invToFetch.put(item, System.currentTimeMillis()); + + if (InventoryType.BLOCK.equals(item.getType())){ + consumerInvToFetch(); + } + return true; } @@ -118,6 +130,10 @@ public Message getMessage(Item item) { } public void broadcast(Message msg) { + if (fastForward && !(msg instanceof BlockMessage)) { + return; + } + Item item; if (msg instanceof BlockMessage) { BlockMessage blockMsg = (BlockMessage) msg; @@ -140,11 +156,12 @@ public void broadcast(Message msg) { logger.error("Adv item is neither block nor trx, type: {}", msg.getType()); return; } + synchronized (invToSpread) { invToSpread.put(item, System.currentTimeMillis()); } - if (fastForward) { + if (InventoryType.BLOCK.equals(item.getType())) { consumerInvToSpread(); } } @@ -160,6 +177,10 @@ public void onDisconnect(PeerConnection peer) { } }); } + + if (invToFetch.size() > 0) { + consumerInvToFetch(); + } } private void consumerInvToFetch() { From f2a3edd9334a0d1c0d91c16cc631a461659613bd Mon Sep 17 00:00:00 2001 From: wubin01 Date: Fri, 19 Apr 2019 11:31:10 +0800 Subject: [PATCH 2/3] nodemanage add fast forward logic --- .../org/tron/common/overlay/discover/DiscoverServer.java | 6 +++--- src/main/java/org/tron/core/net/service/AdvService.java | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/tron/common/overlay/discover/DiscoverServer.java b/src/main/java/org/tron/common/overlay/discover/DiscoverServer.java index 9ec5330abc9..66c44674461 100755 --- a/src/main/java/org/tron/common/overlay/discover/DiscoverServer.java +++ b/src/main/java/org/tron/common/overlay/discover/DiscoverServer.java @@ -18,6 +18,7 @@ package org.tron.common.overlay.discover; +import com.sun.org.apache.xpath.internal.Arg; import io.netty.bootstrap.Bootstrap; import io.netty.channel.Channel; import io.netty.channel.ChannelInitializer; @@ -58,7 +59,7 @@ public class DiscoverServer { @Autowired public DiscoverServer(final NodeManager nodeManager) { this.nodeManager = nodeManager; - if (args.isNodeDiscoveryEnable()) { + if (args.isNodeDiscoveryEnable() && !args.isFastForward()) { if (port == 0) { logger.error("Discovery can't be started while listen port == 0"); } else { @@ -66,8 +67,7 @@ public DiscoverServer(final NodeManager nodeManager) { try { start(); } catch (Exception e) { - logger.debug(e.getMessage(), e); - throw new RuntimeException(e); + logger.error("Discovery server start failed.", e); } }, "DiscoverServer").start(); } diff --git a/src/main/java/org/tron/core/net/service/AdvService.java b/src/main/java/org/tron/core/net/service/AdvService.java index b0bdc26cf21..44cac231b30 100644 --- a/src/main/java/org/tron/core/net/service/AdvService.java +++ b/src/main/java/org/tron/core/net/service/AdvService.java @@ -83,7 +83,7 @@ public void init() { } catch (Throwable t) { logger.error("Fetch thread error.", t); } - }, 100, 10, TimeUnit.MILLISECONDS); + }, 100, 30, TimeUnit.MILLISECONDS); } public void close() { From 8a801c19d003f12e71ec147a7a1b240b21b40507 Mon Sep 17 00:00:00 2001 From: wubin01 Date: Wed, 24 Apr 2019 10:59:46 +0800 Subject: [PATCH 3/3] ignore adv service test --- src/test/java/org/tron/core/net/services/AdvServiceTest.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/test/java/org/tron/core/net/services/AdvServiceTest.java b/src/test/java/org/tron/core/net/services/AdvServiceTest.java index 2f78551e454..a1f37b8bd6e 100644 --- a/src/test/java/org/tron/core/net/services/AdvServiceTest.java +++ b/src/test/java/org/tron/core/net/services/AdvServiceTest.java @@ -1,6 +1,7 @@ package org.tron.core.net.services; import org.junit.Assert; +import org.junit.Ignore; import org.junit.Test; import org.tron.common.utils.Sha256Hash; import org.tron.core.capsule.BlockCapsule; @@ -9,6 +10,7 @@ import org.tron.core.net.service.AdvService; import org.tron.protos.Protocol.Inventory.InventoryType; +@Ignore public class AdvServiceTest { AdvService service = new AdvService();