Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -415,6 +415,8 @@ public class CommonParameter {
@Setter
public int rateLimiterGlobalIpQps;
@Getter
public int rateLimiterGlobalApiQps;
@Getter
public DbBackupConfig dbBackupConfig;
@Getter
public RocksDbSettings rocksDBCustomSettings;
Expand Down
2 changes: 2 additions & 0 deletions common/src/main/java/org/tron/core/Constant.java
Original file line number Diff line number Diff line change
Expand Up @@ -256,6 +256,8 @@ public class Constant {

public static final String RATE_LIMITER_GLOBAL_IP_QPS = "rate.limiter.global.ip.qps";

public static final String RATE_LIMITER_GLOBAL_API_QPS = "rate.limiter.global.api.qps";

public static final String COMMITTEE_CHANGED_DELEGATION = "committee.changedDelegation";

public static final String CRYPTO_ENGINE = "crypto.engine";
Expand Down
6 changes: 6 additions & 0 deletions framework/src/main/java/org/tron/core/config/args/Args.java
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,7 @@ public static void clearParam() {
PARAMETER.memoFee = 0;
PARAMETER.rateLimiterGlobalQps = 50000;
PARAMETER.rateLimiterGlobalIpQps = 10000;
PARAMETER.rateLimiterGlobalApiQps = 1000;
PARAMETER.p2pDisable = false;
PARAMETER.dynamicConfigEnable = false;
PARAMETER.dynamicConfigCheckInterval = 600;
Expand Down Expand Up @@ -957,6 +958,10 @@ 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.rateLimiterGlobalApiQps =
config.hasPath(Constant.RATE_LIMITER_GLOBAL_API_QPS) ? config
.getInt(Constant.RATE_LIMITER_GLOBAL_API_QPS) : 1000;

PARAMETER.rateLimiterInitialization = getRateLimiterFromConfig(config);

PARAMETER.changedDelegation =
Expand Down Expand Up @@ -1627,6 +1632,7 @@ public static void logConfig() {
logger.info("Node effective check enable: {}", parameter.isNodeEffectiveCheckEnable());
logger.info("Rate limiter global qps: {}", parameter.getRateLimiterGlobalQps());
logger.info("Rate limiter global ip qps: {}", parameter.getRateLimiterGlobalIpQps());
logger.info("Rate limiter global api qps: {}", parameter.getRateLimiterGlobalApiQps());
logger.info("************************ Backup config ************************");
logger.info("Backup priority: {}", parameter.getBackupPriority());
logger.info("Backup listen port: {}", parameter.getBackupPort());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,10 @@
import org.tron.core.services.ratelimiter.adapter.IPreemptibleRateLimiter;
import org.tron.core.services.ratelimiter.adapter.IRateLimiter;
import org.tron.core.services.ratelimiter.adapter.QpsRateLimiterAdapter;
import org.tron.core.services.ratelimiter.strategy.QpsStrategy;

@Slf4j
public abstract class RateLimiterServlet extends HttpServlet {

private static final String KEY_PREFIX_HTTP = "http_";
private static final String ADAPTER_PREFIX = "org.tron.core.services.ratelimiter.adapter.";

Expand All @@ -37,20 +37,16 @@ public abstract class RateLimiterServlet extends HttpServlet {

@PostConstruct
private void addRateContainer() {

RateLimiterInitialization.HttpRateLimiterItem item = Args.getInstance()
.getRateLimiterInitialization().getHttpMap().get(getClass().getSimpleName());

boolean success = false;

if (item != null) {
String cName = "";
String params = "";
Object obj;
try {
cName = item.getStrategy();
params = item.getParams();

// add the specific rate limiter strategy of servlet.
Class<?> c = Class.forName(ADAPTER_PREFIX + cName);
Constructor constructor;
Expand All @@ -59,34 +55,29 @@ private void addRateContainer() {
constructor = c.getConstructor(String.class);
obj = constructor.newInstance(params);
container.add(KEY_PREFIX_HTTP, getClass().getSimpleName(), (IRateLimiter) obj);

} else {
constructor = c.getConstructor();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

constructor = c.getConstructor(String.class)?

obj = constructor.newInstance();
obj = constructor.newInstance(QpsStrategy.DEFAULT_QPS_PARAM);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why change the default initial logic?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1

container.add(KEY_PREFIX_HTTP, getClass().getSimpleName(), (IRateLimiter) obj);
}
success = true;
} catch (Exception e) {
logger.warn(
"failure to add the rate limiter strategy. servlet = {}, "
logger.warn("failure to add the rate limiter strategy. servlet = {}, "
+ "strategy name = {}, params = \"{}\".",
getClass().getSimpleName(), cName, params);
}
}

if (!success) {
// if the specific rate limiter strategy of servlet is not defined or fail to add,
// then add a default Strategy.
try {
IRateLimiter rateLimiter = new DefaultBaseQqsAdapter("qps=1000");
IRateLimiter rateLimiter = new DefaultBaseQqsAdapter(QpsStrategy.DEFAULT_QPS_PARAM);
container.add(KEY_PREFIX_HTTP, getClass().getSimpleName(), rateLimiter);
} catch (Exception e) {
logger.warn(
"failure to add the default rate limiter strategy. servlet = {}.",
logger.warn("failure to add the default rate limiter strategy. servlet = {}.",
getClass().getSimpleName());
}
}

}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,25 +23,22 @@
import org.tron.core.services.ratelimiter.adapter.DefaultBaseQqsAdapter;
import org.tron.core.services.ratelimiter.adapter.IPreemptibleRateLimiter;
import org.tron.core.services.ratelimiter.adapter.IRateLimiter;
import org.tron.core.services.ratelimiter.strategy.QpsStrategy;


@Slf4j
@Component
public class RateLimiterInterceptor implements ServerInterceptor {

private static final String KEY_PREFIX_RPC = "rpc_";

@Autowired
private RateLimiterContainer container;


public void init(Server server) {

// add default
for (ServerServiceDefinition service : server.getServices()) {
for (ServerMethodDefinition<?, ?> method : service.getMethods()) {
container.add(KEY_PREFIX_RPC, method.getMethodDescriptor().getFullMethodName(),
new DefaultBaseQqsAdapter("qps=1000"));
new DefaultBaseQqsAdapter(QpsStrategy.DEFAULT_QPS_PARAM));
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ public class GlobalPreemptibleAdapter implements IPreemptibleRateLimiter {
private GlobalPreemptibleStrategy strategy;

public GlobalPreemptibleAdapter(String paramString) {

strategy = new GlobalPreemptibleStrategy(paramString);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,13 @@
import java.util.HashMap;
import java.util.Map;
import lombok.extern.slf4j.Slf4j;
import org.tron.core.config.args.Args;

@Slf4j
public class QpsStrategy extends Strategy {

public static final String STRATEGY_PARAM_QPS = "qps";
public static final Double DEFAULT_QPS = 100D;
public static final int DEFAULT_QPS = Args.getInstance().getRateLimiterGlobalApiQps();
public static final String DEFAULT_QPS_PARAM = "qps=" + DEFAULT_QPS;
private RateLimiter rateLimiter;

public QpsStrategy(String paramString) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
import org.tron.core.Constant;
import org.tron.core.config.args.Args;


public class ArgsTest {

@Rule
Expand All @@ -31,6 +30,7 @@ public void destroy() {

@Test
public void testConfig() {
Args.logConfig();
Assert.assertEquals(Args.getInstance().getMaxTransactionPendingSize(), 2000);
Assert.assertEquals(Args.getInstance().getPendingTransactionTimeout(), 60_000);
Assert.assertEquals(Args.getInstance().getMaxFastForwardNum(), 3);
Expand All @@ -39,6 +39,7 @@ public void testConfig() {
Assert.assertFalse(Args.getInstance().isNodeEffectiveCheckEnable());
Assert.assertEquals(Args.getInstance().getRateLimiterGlobalQps(), 1000);
Assert.assertEquals(Args.getInstance().getRateLimiterGlobalIpQps(), 1000);
Assert.assertEquals(Args.getInstance().getRateLimiterGlobalApiQps(), 100);
Assert.assertEquals(Args.getInstance().p2pDisable, true);
Assert.assertEquals(Args.getInstance().getMaxTps(), 1000);
RateLimiterInitialization rateLimiter = Args.getInstance().getRateLimiterInitialization();
Expand Down
Loading