From 1cd7c3e34aa4e50c7de3f699a267446d7b79e764 Mon Sep 17 00:00:00 2001 From: wubin01 Date: Mon, 8 May 2023 15:10:07 +0800 Subject: [PATCH] feat(cofig): optimize rate.limiter configuration parsing --- .../java/org/tron/core/config/args/Args.java | 33 +++++++++---------- .../org/tron/common/config/args/ArgsTest.java | 8 +++-- framework/src/test/resources/config-test.conf | 10 ++++++ 3 files changed, 32 insertions(+), 19 deletions(-) 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 8bd12bce061..79788332093 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 @@ -973,9 +973,7 @@ public static void setParam(final String[] args, final String confFileName) { config.hasPath(Constant.RATE_LIMITER_GLOBAL_IP_QPS) ? config .getInt(Constant.RATE_LIMITER_GLOBAL_IP_QPS) : 10000; - PARAMETER.rateLimiterInitialization = - config.hasPath(Constant.RATE_LIMITER) ? getRateLimiterFromConfig(config) - : new RateLimiterInitialization(); + PARAMETER.rateLimiterInitialization = getRateLimiterFromConfig(config); PARAMETER.changedDelegation = config.hasPath(Constant.COMMITTEE_CHANGED_DELEGATION) ? config @@ -1214,21 +1212,22 @@ private static Account createAccount(final ConfigObject asset) { } private static RateLimiterInitialization getRateLimiterFromConfig( - final com.typesafe.config.Config config) { - + final com.typesafe.config.Config config) { RateLimiterInitialization initialization = new RateLimiterInitialization(); - ArrayList list1 = config - .getObjectList(Constant.RATE_LIMITER_HTTP).stream() - .map(RateLimiterInitialization::createHttpItem) - .collect(Collectors.toCollection(ArrayList::new)); - initialization.setHttpMap(list1); - - ArrayList list2 = config - .getObjectList(Constant.RATE_LIMITER_RPC).stream() - .map(RateLimiterInitialization::createRpcItem) - .collect(Collectors.toCollection(ArrayList::new)); - - initialization.setRpcMap(list2); + if (config.hasPath(Constant.RATE_LIMITER_HTTP)) { + ArrayList list1 = config + .getObjectList(Constant.RATE_LIMITER_HTTP).stream() + .map(RateLimiterInitialization::createHttpItem) + .collect(Collectors.toCollection(ArrayList::new)); + initialization.setHttpMap(list1); + } + if (config.hasPath(Constant.RATE_LIMITER_RPC)) { + ArrayList list2 = config + .getObjectList(Constant.RATE_LIMITER_RPC).stream() + .map(RateLimiterInitialization::createRpcItem) + .collect(Collectors.toCollection(ArrayList::new)); + initialization.setRpcMap(list2); + } return initialization; } 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 c487125d3e3..6b85c69867b 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 @@ -5,6 +5,7 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Test; +import org.tron.common.parameter.RateLimiterInitialization; import org.tron.common.utils.FileUtil; import org.tron.core.Constant; import org.tron.core.config.args.Args; @@ -34,9 +35,12 @@ public void testConfig() { Assert.assertEquals(Args.getInstance().getBlockCacheTimeout(), 60); Assert.assertEquals(Args.getInstance().isNodeDetectEnable(), false); Assert.assertFalse(Args.getInstance().isNodeEffectiveCheckEnable()); - Assert.assertEquals(Args.getInstance().getRateLimiterGlobalQps(), 50000); - Assert.assertEquals(Args.getInstance().getRateLimiterGlobalIpQps(), 10000); + Assert.assertEquals(Args.getInstance().getRateLimiterGlobalQps(), 1000); + Assert.assertEquals(Args.getInstance().getRateLimiterGlobalIpQps(), 1000); Assert.assertEquals(Args.getInstance().p2pDisable, true); Assert.assertEquals(Args.getInstance().getMaxTps(), 1000); + RateLimiterInitialization rateLimiter = Args.getInstance().getRateLimiterInitialization(); + Assert.assertEquals(rateLimiter.getHttpMap().size(), 1); + Assert.assertEquals(rateLimiter.getRpcMap().size(), 0); } } \ No newline at end of file diff --git a/framework/src/test/resources/config-test.conf b/framework/src/test/resources/config-test.conf index dea5d72961d..2ace5fab538 100644 --- a/framework/src/test/resources/config-test.conf +++ b/framework/src/test/resources/config-test.conf @@ -346,5 +346,15 @@ committee = { allowCreationOfContracts = 1 //mainnet:0 (reset by committee),test:1 } +rate.limiter.global.qps = 1000 +rate.limiter.global.ip.qps = 1000 +rate.limiter.http = [ + { + component = "GetNowBlockServlet", + strategy = "GlobalPreemptibleAdapter", + paramString = "permit=1" + } +] + node.dynamicConfig.enable = true node.dynamicConfig.checkInterval = 0 \ No newline at end of file