Skip to content

Commit b2ade66

Browse files
committed
feat(http): add independent maxMessageSize for HTTP and JSON-RPC
Introduce node.http.maxMessageSize and node.jsonrpc.maxMessageSize to allow HTTP and JSON-RPC services to enforce separate request body size limits via Jetty SizeLimitHandler, decoupled from gRPC config. - Default: 4 * GrpcUtil.DEFAULT_MAX_MESSAGE_SIZE (16 MB) - Validation: reject <= 0 with TronError(PARAMETER_INIT) at startup - Each HttpService subclass sets its own maxRequestSize in constructor - SizeLimitHandlerTest covers independent limits, boundary, UTF-8 bytes
1 parent 736f2ed commit b2ade66

13 files changed

Lines changed: 144 additions & 36 deletions

File tree

common/src/main/java/org/tron/common/parameter/CommonParameter.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,12 @@ public class CommonParameter {
216216
public int maxMessageSize;
217217
@Getter
218218
@Setter
219+
public int httpMaxMessageSize;
220+
@Getter
221+
@Setter
222+
public int jsonRpcMaxMessageSize;
223+
@Getter
224+
@Setter
219225
public int maxHeaderListSize;
220226
@Getter
221227
@Setter

framework/src/main/java/org/tron/common/application/HttpService.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ public abstract class HttpService extends AbstractService {
3030

3131
protected String contextPath;
3232

33+
protected int maxRequestSize;
34+
3335
@Override
3436
public void innerStart() throws Exception {
3537
if (this.apiServer != null) {
@@ -64,8 +66,7 @@ protected void initServer() {
6466
protected ServletContextHandler initContextHandler() {
6567
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
6668
context.setContextPath(this.contextPath);
67-
int maxMessageSize = Args.getInstance().getMaxMessageSize();
68-
SizeLimitHandler sizeLimitHandler = new SizeLimitHandler(maxMessageSize, -1);
69+
SizeLimitHandler sizeLimitHandler = new SizeLimitHandler(this.maxRequestSize, -1);
6970
sizeLimitHandler.setHandler(context);
7071
this.apiServer.setHandler(sizeLimitHandler);
7172
return context;

framework/src/main/java/org/tron/core/config/args/Args.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,20 @@ public static void applyConfigParams(
474474
PARAMETER.maxMessageSize = config.hasPath(ConfigKey.NODE_RPC_MAX_MESSAGE_SIZE)
475475
? config.getInt(ConfigKey.NODE_RPC_MAX_MESSAGE_SIZE) : GrpcUtil.DEFAULT_MAX_MESSAGE_SIZE;
476476

477+
int defaultHttpMaxMessageSize = 4 * GrpcUtil.DEFAULT_MAX_MESSAGE_SIZE;
478+
PARAMETER.httpMaxMessageSize = config.hasPath(ConfigKey.NODE_HTTP_MAX_MESSAGE_SIZE)
479+
? config.getInt(ConfigKey.NODE_HTTP_MAX_MESSAGE_SIZE) : defaultHttpMaxMessageSize;
480+
if (PARAMETER.httpMaxMessageSize <= 0) {
481+
throw new TronError("node.http.maxMessageSize must be positive, got: "
482+
+ PARAMETER.httpMaxMessageSize, PARAMETER_INIT);
483+
}
484+
PARAMETER.jsonRpcMaxMessageSize = config.hasPath(ConfigKey.NODE_JSONRPC_MAX_MESSAGE_SIZE)
485+
? config.getInt(ConfigKey.NODE_JSONRPC_MAX_MESSAGE_SIZE) : defaultHttpMaxMessageSize;
486+
if (PARAMETER.jsonRpcMaxMessageSize <= 0) {
487+
throw new TronError("node.jsonrpc.maxMessageSize must be positive, got: "
488+
+ PARAMETER.jsonRpcMaxMessageSize, PARAMETER_INIT);
489+
}
490+
477491
PARAMETER.maxHeaderListSize = config.hasPath(ConfigKey.NODE_RPC_MAX_HEADER_LIST_SIZE)
478492
? config.getInt(ConfigKey.NODE_RPC_MAX_HEADER_LIST_SIZE)
479493
: GrpcUtil.DEFAULT_MAX_HEADER_LIST_SIZE;

framework/src/main/java/org/tron/core/config/args/ConfigKey.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ private ConfigKey() {
136136
public static final String NODE_HTTP_SOLIDITY_ENABLE = "node.http.solidityEnable";
137137
public static final String NODE_HTTP_PBFT_ENABLE = "node.http.PBFTEnable";
138138
public static final String NODE_HTTP_PBFT_PORT = "node.http.PBFTPort";
139+
public static final String NODE_HTTP_MAX_MESSAGE_SIZE = "node.http.maxMessageSize";
139140

140141
// node - jsonrpc
141142
public static final String NODE_JSONRPC_HTTP_FULLNODE_ENABLE =
@@ -150,6 +151,7 @@ private ConfigKey() {
150151
public static final String NODE_JSONRPC_MAX_SUB_TOPICS = "node.jsonrpc.maxSubTopics";
151152
public static final String NODE_JSONRPC_MAX_BLOCK_FILTER_NUM =
152153
"node.jsonrpc.maxBlockFilterNum";
154+
public static final String NODE_JSONRPC_MAX_MESSAGE_SIZE = "node.jsonrpc.maxMessageSize";
153155

154156
// node - dns
155157
public static final String NODE_DNS_TREE_URLS = "node.dns.treeUrls";

framework/src/main/java/org/tron/core/services/http/FullNodeHttpApiService.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,7 @@ public FullNodeHttpApiService() {
297297
port = Args.getInstance().getFullNodeHttpPort();
298298
enable = isFullNode() && Args.getInstance().isFullNodeHttpEnable();
299299
contextPath = "/";
300+
maxRequestSize = Args.getInstance().getHttpMaxMessageSize();
300301
}
301302

302303
@Override

framework/src/main/java/org/tron/core/services/http/solidity/SolidityNodeHttpApiService.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,7 @@ public SolidityNodeHttpApiService() {
170170
port = Args.getInstance().getSolidityHttpPort();
171171
enable = !isFullNode() && Args.getInstance().isSolidityNodeHttpEnable();
172172
contextPath = "/";
173+
maxRequestSize = Args.getInstance().getHttpMaxMessageSize();
173174
}
174175

175176
@Override

framework/src/main/java/org/tron/core/services/interfaceJsonRpcOnPBFT/JsonRpcServiceOnPBFT.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ public JsonRpcServiceOnPBFT() {
1919
port = Args.getInstance().getJsonRpcHttpPBFTPort();
2020
enable = isFullNode() && Args.getInstance().isJsonRpcHttpPBFTNodeEnable();
2121
contextPath = "/";
22+
maxRequestSize = Args.getInstance().getJsonRpcMaxMessageSize();
2223
}
2324

2425
@Override

framework/src/main/java/org/tron/core/services/interfaceJsonRpcOnSolidity/JsonRpcServiceOnSolidity.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ public JsonRpcServiceOnSolidity() {
1919
port = Args.getInstance().getJsonRpcHttpSolidityPort();
2020
enable = isFullNode() && Args.getInstance().isJsonRpcHttpSolidityNodeEnable();
2121
contextPath = "/";
22+
maxRequestSize = Args.getInstance().getJsonRpcMaxMessageSize();
2223
}
2324

2425
@Override

framework/src/main/java/org/tron/core/services/interfaceOnPBFT/http/PBFT/HttpApiOnPBFTService.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,7 @@ public HttpApiOnPBFTService() {
173173
port = Args.getInstance().getPBFTHttpPort();
174174
enable = isFullNode() && Args.getInstance().isPBFTHttpEnable();
175175
contextPath = "/walletpbft";
176+
maxRequestSize = Args.getInstance().getHttpMaxMessageSize();
176177
}
177178

178179
@Override

framework/src/main/java/org/tron/core/services/interfaceOnSolidity/http/solidity/HttpApiOnSolidityService.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,7 @@ public HttpApiOnSolidityService() {
181181
port = Args.getInstance().getSolidityHttpPort();
182182
enable = isFullNode() && Args.getInstance().isSolidityNodeHttpEnable();
183183
contextPath = "/";
184+
maxRequestSize = Args.getInstance().getHttpMaxMessageSize();
184185
}
185186

186187
@Override

0 commit comments

Comments
 (0)