From 13be64685d536db3ab689579f74cdc6329022862 Mon Sep 17 00:00:00 2001 From: forfreeday Date: Wed, 1 Mar 2023 17:02:13 +0800 Subject: [PATCH 01/11] feat(stress): build stress test branch --- .../common/parameter/CommonParameter.java | 4 +++ .../src/main/java/org/tron/core/Constant.java | 1 + .../java/org/tron/consensus/Consensus.java | 8 +++++- .../java/org/tron/consensus/base/Param.java | 5 +++- .../org/tron/consensus/dpos/DposService.java | 3 ++ .../org/tron/consensus/dpos/DposSlot.java | 2 ++ .../consensus/dpos/MaintenanceManager.java | 2 +- .../tron/consensus/dpos/StatisticManager.java | 28 ++++++++++--------- .../java/org/tron/core/config/args/Args.java | 4 +++ .../tron/core/consensus/ConsensusService.java | 1 + .../main/java/org/tron/core/db/Manager.java | 15 ++++++++-- framework/src/main/resources/config.conf | 2 +- 12 files changed, 55 insertions(+), 20 deletions(-) diff --git a/common/src/main/java/org/tron/common/parameter/CommonParameter.java b/common/src/main/java/org/tron/common/parameter/CommonParameter.java index ab04ca3e7a4..bef8bcffe4d 100644 --- a/common/src/main/java/org/tron/common/parameter/CommonParameter.java +++ b/common/src/main/java/org/tron/common/parameter/CommonParameter.java @@ -584,6 +584,10 @@ public class CommonParameter { @Setter public long allowDelegateOptimization = 0L; + @Getter + @Setter + public boolean isStressTest = true; + @Getter @Setter public long unfreezeDelayDays = 0L; diff --git a/common/src/main/java/org/tron/core/Constant.java b/common/src/main/java/org/tron/core/Constant.java index 408782752f2..2b89b9dde01 100644 --- a/common/src/main/java/org/tron/core/Constant.java +++ b/common/src/main/java/org/tron/core/Constant.java @@ -312,6 +312,7 @@ public class Constant { public static final String HISTORY_BALANCE_LOOKUP = "storage.balance.history.lookup"; public static final String OPEN_PRINT_LOG = "node.openPrintLog"; public static final String OPEN_TRANSACTION_SORT = "node.openTransactionSort"; + public static final String IS_STRESS_TEST = "node.isStressTest"; public static final String ALLOW_ACCOUNT_ASSET_OPTIMIZATION = "committee.allowAccountAssetOptimization"; public static final String ALLOW_ASSET_OPTIMIZATION = "committee.allowAssetOptimization"; diff --git a/consensus/src/main/java/org/tron/consensus/Consensus.java b/consensus/src/main/java/org/tron/consensus/Consensus.java index 7ccc5160e3d..589d396110a 100644 --- a/consensus/src/main/java/org/tron/consensus/Consensus.java +++ b/consensus/src/main/java/org/tron/consensus/Consensus.java @@ -1,5 +1,7 @@ package org.tron.consensus; +import com.google.protobuf.ByteString; +import java.util.List; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -39,4 +41,8 @@ public boolean applyBlock(BlockCapsule blockCapsule) { return consensusInterface.applyBlock(blockCapsule); } -} \ No newline at end of file + public void updateWitness(List list) { + dposService.updateWitness(list); + } + +} diff --git a/consensus/src/main/java/org/tron/consensus/base/Param.java b/consensus/src/main/java/org/tron/consensus/base/Param.java index f7b7de3d084..0779d066ad3 100644 --- a/consensus/src/main/java/org/tron/consensus/base/Param.java +++ b/consensus/src/main/java/org/tron/consensus/base/Param.java @@ -37,6 +37,9 @@ public class Param { @Getter @Setter private PbftInterface pbftInterface; + @Getter + @Setter + private boolean isStressTest; private Param() { @@ -77,4 +80,4 @@ public Miner(byte[] privateKey, ByteString privateKeyAddress, ByteString witness public Miner getMiner() { return miners.get(0); } -} \ No newline at end of file +} diff --git a/consensus/src/main/java/org/tron/consensus/dpos/DposService.java b/consensus/src/main/java/org/tron/consensus/dpos/DposService.java index 5ec6c7c554b..0f8ead870bc 100644 --- a/consensus/src/main/java/org/tron/consensus/dpos/DposService.java +++ b/consensus/src/main/java/org/tron/consensus/dpos/DposService.java @@ -61,6 +61,8 @@ public class DposService implements ConsensusInterface { @Getter private long genesisBlockTime; @Getter + private boolean isStressTest; + @Getter private BlockHandle blockHandle; @Getter private GenesisBlock genesisBlock; @@ -76,6 +78,7 @@ public void start(Param param) { this.blockHandle = param.getBlockHandle(); this.genesisBlock = param.getGenesisBlock(); this.genesisBlockTime = Long.parseLong(param.getGenesisBlock().getTimestamp()); + this.isStressTest = param.isStressTest(); param.getMiners().forEach(miner -> miners.put(miner.getWitnessAddress(), miner)); dposTask.setDposService(this); diff --git a/consensus/src/main/java/org/tron/consensus/dpos/DposSlot.java b/consensus/src/main/java/org/tron/consensus/dpos/DposSlot.java index ca63bc4aa65..de224ea8814 100644 --- a/consensus/src/main/java/org/tron/consensus/dpos/DposSlot.java +++ b/consensus/src/main/java/org/tron/consensus/dpos/DposSlot.java @@ -5,6 +5,7 @@ import static org.tron.core.config.Parameter.ChainConstant.SINGLE_REPEAT; import com.google.protobuf.ByteString; +import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -19,6 +20,7 @@ public class DposSlot { private ConsensusDelegate consensusDelegate; @Setter + @Getter private DposService dposService; public long getAbSlot(long time) { diff --git a/consensus/src/main/java/org/tron/consensus/dpos/MaintenanceManager.java b/consensus/src/main/java/org/tron/consensus/dpos/MaintenanceManager.java index fc6cdd55c15..6cd5066eae1 100644 --- a/consensus/src/main/java/org/tron/consensus/dpos/MaintenanceManager.java +++ b/consensus/src/main/java/org/tron/consensus/dpos/MaintenanceManager.java @@ -194,7 +194,7 @@ private Map countVote(VotesStore votesStore) { } private void tryRemoveThePowerOfTheGr() { - if (consensusDelegate.getRemoveThePowerOfTheGr() != 1) { + if (consensusDelegate.getRemoveThePowerOfTheGr() != 1 || dposService.isStressTest()) { return; } dposService.getGenesisBlock().getWitnesses().forEach(witness -> { diff --git a/consensus/src/main/java/org/tron/consensus/dpos/StatisticManager.java b/consensus/src/main/java/org/tron/consensus/dpos/StatisticManager.java index f8155b3723d..a11569629df 100644 --- a/consensus/src/main/java/org/tron/consensus/dpos/StatisticManager.java +++ b/consensus/src/main/java/org/tron/consensus/dpos/StatisticManager.java @@ -38,19 +38,21 @@ public void applyBlock(BlockCapsule blockCapsule) { if (blockNum != 1) { slot = dposSlot.getSlot(blockTime); } - for (int i = 1; i < slot; ++i) { - byte[] witness = dposSlot.getScheduledWitness(i).toByteArray(); - wc = consensusDelegate.getWitness(witness); - wc.setTotalMissed(wc.getTotalMissed() + 1); - Metrics.counterInc(MetricKeys.Counter.MINER, 1, StringUtil.encode58Check(wc.getAddress() - .toByteArray()), - MetricLabels.Counter.MINE_MISS); - consensusDelegate.saveWitness(wc); - logger.info("Current block: {}, witness: {}, totalMissed: {}", blockNum, - StringUtil.encode58Check(wc.getAddress() - .toByteArray()), wc.getTotalMissed()); - consensusDelegate.applyBlock(false); + if (!dposSlot.getDposService().isStressTest() || slot < 5) { + for (int i = 1; i < slot; ++i) { + byte[] witness = dposSlot.getScheduledWitness(i).toByteArray(); + wc = consensusDelegate.getWitness(witness); + wc.setTotalMissed(wc.getTotalMissed() + 1); + Metrics.counterInc(MetricKeys.Counter.MINER, 1, StringUtil.encode58Check(wc.getAddress() + .toByteArray()), + MetricLabels.Counter.MINE_MISS); + consensusDelegate.saveWitness(wc); + logger.info("Current block: {}, witness: {}, totalMissed: {}", blockNum, + StringUtil.encode58Check(wc.getAddress() + .toByteArray()), wc.getTotalMissed()); + consensusDelegate.applyBlock(false); + } } consensusDelegate.applyBlock(true); } -} \ No newline at end of file +} diff --git a/framework/src/main/java/org/tron/core/config/args/Args.java b/framework/src/main/java/org/tron/core/config/args/Args.java index 8e6a7526362..5f2af0b9e23 100644 --- a/framework/src/main/java/org/tron/core/config/args/Args.java +++ b/framework/src/main/java/org/tron/core/config/args/Args.java @@ -221,6 +221,7 @@ public static void clearParam() { PARAMETER.allowNewRewardAlgorithm = 0; PARAMETER.allowNewReward = 0; PARAMETER.memoFee = 0; + PARAMETER.isStressTest = true; } /** @@ -1028,6 +1029,9 @@ public static void setParam(final String[] args, final String confFileName) { .hasPath(Constant.ALLOW_ASSET_OPTIMIZATION) ? config .getInt(Constant.ALLOW_ASSET_OPTIMIZATION) : 0; + PARAMETER.isStressTest = config.hasPath(Constant.IS_STRESS_TEST) ? config + .getBoolean(Constant.IS_STRESS_TEST) : true; + PARAMETER.disabledApiList = config.hasPath(Constant.NODE_DISABLED_API_LIST) ? config.getStringList(Constant.NODE_DISABLED_API_LIST) diff --git a/framework/src/main/java/org/tron/core/consensus/ConsensusService.java b/framework/src/main/java/org/tron/core/consensus/ConsensusService.java index ce1f1f1cf08..e0f43292117 100644 --- a/framework/src/main/java/org/tron/core/consensus/ConsensusService.java +++ b/framework/src/main/java/org/tron/core/consensus/ConsensusService.java @@ -44,6 +44,7 @@ public void start() { param.setBlockProduceTimeoutPercent(Args.getInstance().getBlockProducedTimeOut()); param.setNeedSyncCheck(parameter.isNeedSyncCheck()); param.setAgreeNodeCount(parameter.getAgreeNodeCount()); + param.setStressTest(parameter.isStressTest); List miners = new ArrayList<>(); List privateKeys = Args.getLocalWitnesses().getPrivateKeys(); if (privateKeys.size() > 1) { diff --git a/framework/src/main/java/org/tron/core/db/Manager.java b/framework/src/main/java/org/tron/core/db/Manager.java index 9e7c27029f5..848e25e7a3a 100644 --- a/framework/src/main/java/org/tron/core/db/Manager.java +++ b/framework/src/main/java/org/tron/core/db/Manager.java @@ -562,11 +562,18 @@ public void initGenesis() { if (chainBaseManager.containBlock(genesisBlock.getBlockId())) { Args.getInstance().setChainId(genesisBlock.getBlockId().toString()); } else { - if (chainBaseManager.hasBlocks()) { + if (chainBaseManager.hasBlocks() && !Args.getInstance().isStressTest) { logger.error( "Genesis block modify, please delete database directory({}) and restart.", Args.getInstance().getOutputDirectory()); System.exit(1); + } else if (Args.getInstance().isStressTest) { + this.initAccount(); + this.initWitness(); + List srList = new ArrayList<>(); + Args.getInstance().getGenesisBlock().getWitnesses().forEach( + witnessCapsule -> srList.add(ByteString.copyFrom(witnessCapsule.getAddress()))); + consensus.updateWitness(srList); } else { logger.info("Create genesis block."); Args.getInstance().setChainId(genesisBlock.getBlockId().toString()); @@ -1401,8 +1408,10 @@ public TransactionInfo processTransaction(final TransactionCapsule trxCap, Block chainBaseManager.getBalanceTraceStore().initCurrentTransactionBalanceTrace(trxCap); } - validateTapos(trxCap); - validateCommon(trxCap); + if (!Args.getInstance().isStressTest) { + validateTapos(trxCap); + validateCommon(trxCap); + } if (trxCap.getInstance().getRawData().getContractList().size() != 1) { throw new ContractSizeNotEqualToOneException( diff --git a/framework/src/main/resources/config.conf b/framework/src/main/resources/config.conf index 47635540017..5a944441a21 100644 --- a/framework/src/main/resources/config.conf +++ b/framework/src/main/resources/config.conf @@ -548,7 +548,7 @@ localwitness = [ #] block = { - needSyncCheck = true + needSyncCheck = false maintenanceTimeInterval = 21600000 proposalExpireTime = 259200000 // 3 day: 259200000(ms) } From 339b7522ad021015ca70beff97a3866e8fd6c787 Mon Sep 17 00:00:00 2001 From: liukai Date: Wed, 8 Mar 2023 15:52:41 +0800 Subject: [PATCH 02/11] feat(jetty): disable InventoryMsgHandler check --- .../tron/core/net/messagehandler/InventoryMsgHandler.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/framework/src/main/java/org/tron/core/net/messagehandler/InventoryMsgHandler.java b/framework/src/main/java/org/tron/core/net/messagehandler/InventoryMsgHandler.java index 65fa09128db..c866cd98102 100644 --- a/framework/src/main/java/org/tron/core/net/messagehandler/InventoryMsgHandler.java +++ b/framework/src/main/java/org/tron/core/net/messagehandler/InventoryMsgHandler.java @@ -33,9 +33,9 @@ public void processMessage(PeerConnection peer, TronMessage msg) { InventoryMessage inventoryMessage = (InventoryMessage) msg; InventoryType type = inventoryMessage.getInventoryType(); - if (!check(peer, inventoryMessage)) { - return; - } +// if (!check(peer, inventoryMessage)) { +// return; +// } for (Sha256Hash id : inventoryMessage.getHashList()) { Item item = new Item(id, type); From 30e9f8ba5b1ce6d8e50081a199a51c3c4975a470 Mon Sep 17 00:00:00 2001 From: liukai Date: Wed, 15 Mar 2023 17:04:45 +0800 Subject: [PATCH 03/11] feat(jetty): add p2p disable --- build.gradle | 7 +++++++ .../tron/common/parameter/CommonParameter.java | 5 +++++ .../src/main/java/org/tron/core/Wallet.java | 16 +++++++++------- .../java/org/tron/core/config/args/Args.java | 3 +++ .../org/tron/core/services/RpcApiService.java | 9 +-------- .../org/tron/common/config/args/ArgsTest.java | 5 +++-- 6 files changed, 28 insertions(+), 17 deletions(-) diff --git a/build.gradle b/build.gradle index 82760ffd8cf..5e7145d512d 100644 --- a/build.gradle +++ b/build.gradle @@ -82,3 +82,10 @@ task copyToParent(type: Copy) { build.finalizedBy(copyToParent) +gradle.buildFinished { + if (project.hasProperty('cleanSubBuild')) { + subprojects { + buildDir.deleteDir() + } + } +} \ No newline at end of file diff --git a/common/src/main/java/org/tron/common/parameter/CommonParameter.java b/common/src/main/java/org/tron/common/parameter/CommonParameter.java index bef8bcffe4d..913bc3f5092 100644 --- a/common/src/main/java/org/tron/common/parameter/CommonParameter.java +++ b/common/src/main/java/org/tron/common/parameter/CommonParameter.java @@ -405,6 +405,11 @@ public class CommonParameter { public GenesisBlock genesisBlock; @Getter @Setter + @Parameter(names = {"--p2p-disable"}, description = "Switch for p2p module initialization. " + + "(defalut: false)", arity = 1) + public boolean p2pDisable = false; + @Getter + @Setter public List activeNodes; @Getter @Setter diff --git a/framework/src/main/java/org/tron/core/Wallet.java b/framework/src/main/java/org/tron/core/Wallet.java index 6d9b12608c5..9f389c6e83d 100755 --- a/framework/src/main/java/org/tron/core/Wallet.java +++ b/framework/src/main/java/org/tron/core/Wallet.java @@ -2639,13 +2639,15 @@ public TransactionInfoList getTransactionInfoByBlockNum(long blockNum) { public NodeList listNodes() { NodeList.Builder nodeListBuilder = NodeList.newBuilder(); - TronNetService.getP2pService().getConnectableNodes().forEach(node -> { - nodeListBuilder.addNodes(Node.newBuilder().setAddress( - Address.newBuilder() - .setHost(ByteString - .copyFrom(ByteArray.fromString(node.getHost()))) - .setPort(node.getPort()))); - }); + if (!Args.getInstance().p2pDisable) { + TronNetService.getP2pService().getConnectableNodes().forEach(node -> { + nodeListBuilder.addNodes(Node.newBuilder().setAddress( + Address.newBuilder() + .setHost(ByteString + .copyFrom(ByteArray.fromString(node.getHost()))) + .setPort(node.getPort()))); + }); + } return nodeListBuilder.build(); } diff --git a/framework/src/main/java/org/tron/core/config/args/Args.java b/framework/src/main/java/org/tron/core/config/args/Args.java index 5f2af0b9e23..625aee20c66 100644 --- a/framework/src/main/java/org/tron/core/config/args/Args.java +++ b/framework/src/main/java/org/tron/core/config/args/Args.java @@ -221,6 +221,9 @@ public static void clearParam() { PARAMETER.allowNewRewardAlgorithm = 0; PARAMETER.allowNewReward = 0; PARAMETER.memoFee = 0; + PARAMETER.p2pDisable = false; + + PARAMETER.isStressTest = true; } diff --git a/framework/src/main/java/org/tron/core/services/RpcApiService.java b/framework/src/main/java/org/tron/core/services/RpcApiService.java index a6e1c5181ad..a81be8f7728 100755 --- a/framework/src/main/java/org/tron/core/services/RpcApiService.java +++ b/framework/src/main/java/org/tron/core/services/RpcApiService.java @@ -1736,14 +1736,7 @@ public void getTransactionCountByBlockNum(NumberMessage request, @Override public void listNodes(EmptyMessage request, StreamObserver responseObserver) { - NodeList.Builder nodeListBuilder = NodeList.newBuilder(); - TronNetService.getP2pService().getConnectableNodes().forEach(node -> { - nodeListBuilder.addNodes(Node.newBuilder().setAddress( - Address.newBuilder() - .setHost(ByteString.copyFrom(ByteArray.fromString(node.getHost()))) - .setPort(node.getPort()))); - }); - responseObserver.onNext(nodeListBuilder.build()); + responseObserver.onNext(wallet.listNodes()); responseObserver.onCompleted(); } diff --git a/framework/src/test/java/org/tron/common/config/args/ArgsTest.java b/framework/src/test/java/org/tron/common/config/args/ArgsTest.java index 5b391f0d38d..fe99ef0da43 100644 --- a/framework/src/test/java/org/tron/common/config/args/ArgsTest.java +++ b/framework/src/test/java/org/tron/common/config/args/ArgsTest.java @@ -13,8 +13,8 @@ public class ArgsTest { @Before public void init() { - Args.setParam(new String[]{"--output-directory", "output-directory", "--debug"}, - Constant.TEST_CONF); + Args.setParam(new String[]{"--output-directory", "output-directory", "--p2p-disable", "true", + "--debug"}, Constant.TEST_CONF); } @After @@ -30,5 +30,6 @@ public void testConfig() { Assert.assertEquals(Args.getInstance().getNodeDiscoveryPingTimeout(), 15_000); Assert.assertEquals(Args.getInstance().getMaxFastForwardNum(), 3); Assert.assertEquals(Args.getInstance().getBlockCacheTimeout(), 60); + Assert.assertEquals(Args.getInstance().p2pDisable, true); } } \ No newline at end of file From 63ed847269776851651a945aa2c968c44e4cb9f5 Mon Sep 17 00:00:00 2001 From: liukai Date: Mon, 25 Mar 2024 17:18:29 +0800 Subject: [PATCH 04/11] feat(Nile): change config --- .../core/net/messagehandler/TransactionsMsgHandler.java | 2 +- .../java/org/tron/core/net/service/adv/AdvService.java | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/framework/src/main/java/org/tron/core/net/messagehandler/TransactionsMsgHandler.java b/framework/src/main/java/org/tron/core/net/messagehandler/TransactionsMsgHandler.java index 665381b31a8..7d526616092 100644 --- a/framework/src/main/java/org/tron/core/net/messagehandler/TransactionsMsgHandler.java +++ b/framework/src/main/java/org/tron/core/net/messagehandler/TransactionsMsgHandler.java @@ -29,7 +29,7 @@ @Component public class TransactionsMsgHandler implements TronMsgHandler { - private static int MAX_TRX_SIZE = 50_000; + private static int MAX_TRX_SIZE = 100_000; private static int MAX_SMART_CONTRACT_SUBMIT_SIZE = 100; @Autowired private TronNetDelegate tronNetDelegate; diff --git a/framework/src/main/java/org/tron/core/net/service/adv/AdvService.java b/framework/src/main/java/org/tron/core/net/service/adv/AdvService.java index ea608c1ea86..b293f63f69f 100644 --- a/framework/src/main/java/org/tron/core/net/service/adv/AdvService.java +++ b/framework/src/main/java/org/tron/core/net/service/adv/AdvService.java @@ -41,10 +41,10 @@ @Slf4j(topic = "net") @Component public class AdvService { - private final int MAX_INV_TO_FETCH_CACHE_SIZE = 100_000; - private final int MAX_TRX_CACHE_SIZE = 50_000; - private final int MAX_BLOCK_CACHE_SIZE = 10; - private final int MAX_SPREAD_SIZE = 1_000; + private final int MAX_INV_TO_FETCH_CACHE_SIZE = 300_000; + private final int MAX_TRX_CACHE_SIZE = 80_000; + private final int MAX_BLOCK_CACHE_SIZE = 40; + private final int MAX_SPREAD_SIZE = 10_000; private final long TIMEOUT = MSG_CACHE_DURATION_IN_BLOCKS * BLOCK_PRODUCED_INTERVAL; @Autowired From d4881124704186037ad994b6a04c2b123959f743 Mon Sep 17 00:00:00 2001 From: liukai Date: Mon, 25 Mar 2024 18:24:36 +0800 Subject: [PATCH 05/11] feat(net): set verified --- framework/src/main/java/org/tron/core/Wallet.java | 1 + 1 file changed, 1 insertion(+) diff --git a/framework/src/main/java/org/tron/core/Wallet.java b/framework/src/main/java/org/tron/core/Wallet.java index 96af6fc7476..e0f70fe4e52 100755 --- a/framework/src/main/java/org/tron/core/Wallet.java +++ b/framework/src/main/java/org/tron/core/Wallet.java @@ -550,6 +550,7 @@ public GrpcAPI.Return broadcastTransaction(Transaction signedTransaction) { if (trx.getInstance().getRawData().getContractCount() == 0) { throw new ContractValidateException(ActuatorConstant.CONTRACT_NOT_EXIST); } + trx.setVerified(true); dbManager.pushTransaction(trx); int num = tronNetService.fastBroadcastTransaction(message); if (num == 0 && minEffectiveConnection != 0) { From 563a0ed6887d2c3f430ecd99ac8d46cdd7e8ebb9 Mon Sep 17 00:00:00 2001 From: liukai Date: Mon, 25 Mar 2024 20:29:48 +0800 Subject: [PATCH 06/11] feat(net): set verified --- .../src/main/java/org/tron/core/net/service/adv/AdvService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/main/java/org/tron/core/net/service/adv/AdvService.java b/framework/src/main/java/org/tron/core/net/service/adv/AdvService.java index b293f63f69f..be96053b25a 100644 --- a/framework/src/main/java/org/tron/core/net/service/adv/AdvService.java +++ b/framework/src/main/java/org/tron/core/net/service/adv/AdvService.java @@ -44,7 +44,7 @@ public class AdvService { private final int MAX_INV_TO_FETCH_CACHE_SIZE = 300_000; private final int MAX_TRX_CACHE_SIZE = 80_000; private final int MAX_BLOCK_CACHE_SIZE = 40; - private final int MAX_SPREAD_SIZE = 10_000; + private final int MAX_SPREAD_SIZE = 400_000; private final long TIMEOUT = MSG_CACHE_DURATION_IN_BLOCKS * BLOCK_PRODUCED_INTERVAL; @Autowired From fb1a80ebcaeb96e7c7c91b5e30ede5aec722d532 Mon Sep 17 00:00:00 2001 From: liukai Date: Mon, 25 Mar 2024 20:30:24 +0800 Subject: [PATCH 07/11] feat(net): set verified --- .../src/main/java/org/tron/core/net/service/adv/AdvService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/main/java/org/tron/core/net/service/adv/AdvService.java b/framework/src/main/java/org/tron/core/net/service/adv/AdvService.java index be96053b25a..54574b6eeba 100644 --- a/framework/src/main/java/org/tron/core/net/service/adv/AdvService.java +++ b/framework/src/main/java/org/tron/core/net/service/adv/AdvService.java @@ -42,7 +42,7 @@ @Component public class AdvService { private final int MAX_INV_TO_FETCH_CACHE_SIZE = 300_000; - private final int MAX_TRX_CACHE_SIZE = 80_000; + private final int MAX_TRX_CACHE_SIZE = 200_000; private final int MAX_BLOCK_CACHE_SIZE = 40; private final int MAX_SPREAD_SIZE = 400_000; private final long TIMEOUT = MSG_CACHE_DURATION_IN_BLOCKS * BLOCK_PRODUCED_INTERVAL; From a5230ab8e60440bf98dede176f1bcaf171ed61df Mon Sep 17 00:00:00 2001 From: liukai Date: Tue, 26 Mar 2024 17:26:10 +0800 Subject: [PATCH 08/11] feat(net): disable check --- .../java/org/tron/core/net/service/adv/AdvService.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/framework/src/main/java/org/tron/core/net/service/adv/AdvService.java b/framework/src/main/java/org/tron/core/net/service/adv/AdvService.java index 54574b6eeba..265f09cacba 100644 --- a/framework/src/main/java/org/tron/core/net/service/adv/AdvService.java +++ b/framework/src/main/java/org/tron/core/net/service/adv/AdvService.java @@ -188,10 +188,10 @@ public void broadcast(Message msg) { return; } - if (invToSpread.size() > MAX_SPREAD_SIZE) { - logger.warn("Drop message, type: {}, ID: {}", msg.getType(), msg.getMessageId()); - return; - } +// if (invToSpread.size() > MAX_SPREAD_SIZE) { +// logger.warn("Drop message, type: {}, ID: {}", msg.getType(), msg.getMessageId()); +// return; +// } Item item; if (msg instanceof BlockMessage) { From d0437a1b307a940fc1fe53dc65758e78caafbc33 Mon Sep 17 00:00:00 2001 From: liukai Date: Tue, 26 Mar 2024 18:43:38 +0800 Subject: [PATCH 09/11] feat(net): disable check --- .../src/main/java/org/tron/core/net/peer/PeerConnection.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 6743f00421d..29f3f1be5ba 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 @@ -100,7 +100,7 @@ public class PeerConnection { @Getter private HelloMessage helloMessageSend; - private int invCacheSize = 20_000; + private int invCacheSize = 200_000; private long BAD_PEER_BAN_TIME = 3_600_000; From 3dca650a9970e94e2b569d9a17448a06652cbc90 Mon Sep 17 00:00:00 2001 From: liukai Date: Tue, 26 Mar 2024 19:30:21 +0800 Subject: [PATCH 10/11] feat(net): disable check --- .../core/net/messagehandler/FetchInvDataMsgHandler.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/framework/src/main/java/org/tron/core/net/messagehandler/FetchInvDataMsgHandler.java b/framework/src/main/java/org/tron/core/net/messagehandler/FetchInvDataMsgHandler.java index 5e797c084b3..acd49a2aea6 100644 --- a/framework/src/main/java/org/tron/core/net/messagehandler/FetchInvDataMsgHandler.java +++ b/framework/src/main/java/org/tron/core/net/messagehandler/FetchInvDataMsgHandler.java @@ -132,9 +132,9 @@ private void check(PeerConnection peer, FetchInvDataMessage fetchInvDataMsg) thr if (type == MessageTypes.TRX) { for (Sha256Hash hash : fetchInvDataMsg.getHashList()) { - if (peer.getAdvInvSpread().getIfPresent(new Item(hash, InventoryType.TRX)) == null) { - throw new P2pException(TypeEnum.BAD_MESSAGE, "not spread inv: " + hash); - } +// if (peer.getAdvInvSpread().getIfPresent(new Item(hash, InventoryType.TRX)) == null) { +// throw new P2pException(TypeEnum.BAD_MESSAGE, "not spread inv: " + hash); +// } } int fetchCount = peer.getPeerStatistics().messageStatistics.tronInTrxFetchInvDataElement .getCount(10); From 5d58bc0d9c4e33807c1b49e7045d70e4ccf39766 Mon Sep 17 00:00:00 2001 From: liukai Date: Tue, 26 Mar 2024 20:59:14 +0800 Subject: [PATCH 11/11] feat(net): add log --- .../messagehandler/InventoryMsgHandler.java | 9 ++++- .../TransactionsMsgHandler.java | 9 +++++ .../tron/core/net/service/adv/AdvService.java | 33 +++++++++++++++++++ 3 files changed, 50 insertions(+), 1 deletion(-) diff --git a/framework/src/main/java/org/tron/core/net/messagehandler/InventoryMsgHandler.java b/framework/src/main/java/org/tron/core/net/messagehandler/InventoryMsgHandler.java index 29472dc8dd9..d21c24071ef 100644 --- a/framework/src/main/java/org/tron/core/net/messagehandler/InventoryMsgHandler.java +++ b/framework/src/main/java/org/tron/core/net/messagehandler/InventoryMsgHandler.java @@ -13,6 +13,9 @@ import org.tron.core.net.service.adv.AdvService; import org.tron.protos.Protocol.Inventory.InventoryType; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicLong; + @Slf4j(topic = "net") @Component public class InventoryMsgHandler implements TronMsgHandler { @@ -26,6 +29,8 @@ public class InventoryMsgHandler implements TronMsgHandler { @Autowired private TransactionsMsgHandler transactionsMsgHandler; + public static AtomicLong invCount = new AtomicLong(0); + @Override public void processMessage(PeerConnection peer, TronMessage msg) { InventoryMessage inventoryMessage = (InventoryMessage) msg; @@ -38,7 +43,9 @@ public void processMessage(PeerConnection peer, TronMessage msg) { for (Sha256Hash id : inventoryMessage.getHashList()) { Item item = new Item(id, type); peer.getAdvInvReceive().put(item, System.currentTimeMillis()); - advService.addInv(item); + if (advService.addInv(item)) { + invCount.incrementAndGet(); + } } } diff --git a/framework/src/main/java/org/tron/core/net/messagehandler/TransactionsMsgHandler.java b/framework/src/main/java/org/tron/core/net/messagehandler/TransactionsMsgHandler.java index 7d526616092..8935ccfdfff 100644 --- a/framework/src/main/java/org/tron/core/net/messagehandler/TransactionsMsgHandler.java +++ b/framework/src/main/java/org/tron/core/net/messagehandler/TransactionsMsgHandler.java @@ -5,6 +5,8 @@ import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicLong; + import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -62,8 +64,13 @@ public boolean isBusy() { return queue.size() + smartContractQueue.size() > MAX_TRX_SIZE; } + public static AtomicLong trxCount = new AtomicLong(0); + public static AtomicLong failedCount = new AtomicLong(0); + + @Override public void processMessage(PeerConnection peer, TronMessage msg) throws P2pException { + trxCount.incrementAndGet(); TransactionsMessage transactionsMessage = (TransactionsMessage) msg; check(peer, transactionsMessage); int smartContractQueueSize = 0; @@ -137,7 +144,9 @@ private void handleTransaction(PeerConnection peer, TransactionMessage trx) { peer.setBadPeer(true); peer.disconnect(ReasonCode.BAD_TX); } + failedCount.incrementAndGet(); } catch (Exception e) { + failedCount.incrementAndGet(); logger.error("Trx {} from peer {} process failed", trx.getMessageId(), peer.getInetAddress(), e); } diff --git a/framework/src/main/java/org/tron/core/net/service/adv/AdvService.java b/framework/src/main/java/org/tron/core/net/service/adv/AdvService.java index 265f09cacba..83a9838a983 100644 --- a/framework/src/main/java/org/tron/core/net/service/adv/AdvService.java +++ b/framework/src/main/java/org/tron/core/net/service/adv/AdvService.java @@ -16,6 +16,7 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicLong; import java.util.stream.Collectors; import lombok.Getter; import lombok.extern.slf4j.Slf4j; @@ -32,6 +33,8 @@ import org.tron.core.net.message.adv.FetchInvDataMessage; import org.tron.core.net.message.adv.InventoryMessage; import org.tron.core.net.message.adv.TransactionMessage; +import org.tron.core.net.messagehandler.InventoryMsgHandler; +import org.tron.core.net.messagehandler.TransactionsMsgHandler; import org.tron.core.net.peer.Item; import org.tron.core.net.peer.PeerConnection; import org.tron.core.net.service.fetchblock.FetchBlockService; @@ -83,11 +86,35 @@ public class AdvService { private MessageCount trxCount = new MessageCount(); private boolean fastForward = Args.getInstance().isFastForward(); + private static long lastLogTime = 0; + + private static long FETCH_INV_COUNT = 0; + private static long BROADCAST_COUNT = 0; + private static long INV_TO_FETCH = 0; + private static long INVENTORY_COUNT = 0; + private static long FAILED_COUNT = 0; public void init() { spreadExecutor.scheduleWithFixedDelay(() -> { try { + // 每隔1秒打印一次 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastLogTime >= 1000) { + lastLogTime = currentTime; + logger.info("FETCH_INV_COUNT: {}, BROADCAST_COUNT: {}, INV_TO_FETCH: {}, INVENTORY_COUNT: {}, FAILED_COUNT: {}", + fetchInvCount.get() - FETCH_INV_COUNT, + broadcastCount.get() - BROADCAST_COUNT, + invToFetch.size() - INV_TO_FETCH, + InventoryMsgHandler.invCount.get() - INVENTORY_COUNT, + TransactionsMsgHandler.failedCount.get() - FAILED_COUNT); + } + + FETCH_INV_COUNT = fetchInvCount.get(); + BROADCAST_COUNT = broadcastCount.get(); + INV_TO_FETCH = invToFetch.size(); + INVENTORY_COUNT= InventoryMsgHandler.invCount.get(); + FAILED_COUNT = TransactionsMsgHandler.failedCount.get(); consumerInvToSpread(); } catch (Exception exception) { logger.error("Spread thread error", exception); @@ -101,6 +128,7 @@ public void init() { logger.error("Fetch thread error", exception); } }, 100, 30, TimeUnit.MILLISECONDS); + } public void close() { @@ -260,6 +288,7 @@ public void onDisconnect(PeerConnection peer) { } } + public static AtomicLong fetchInvCount = new AtomicLong(0); private void consumerInvToFetch() { Collection peers = tronNetDelegate.getActivePeer().stream() .filter(peer -> peer.isIdle()) @@ -269,6 +298,7 @@ private void consumerInvToFetch() { if (invToFetch.isEmpty() || peers.isEmpty()) { return; } + fetchInvCount.getAndAdd(invToFetch.size()); long now = System.currentTimeMillis(); invToFetch.forEach((item, time) -> { if (time < now - TIMEOUT) { @@ -294,6 +324,8 @@ private void consumerInvToFetch() { invSender.sendFetch(); } + public static AtomicLong broadcastCount = new AtomicLong(0); + private synchronized void consumerInvToSpread() { List peers = tronNetDelegate.getActivePeer().stream() @@ -304,6 +336,7 @@ private synchronized void consumerInvToSpread() { return; } + broadcastCount.getAndAdd(invToSpread.size()); InvSender invSender = new InvSender(); invToSpread.forEach((item, time) -> peers.forEach(peer -> {