This is an automated email from the ASF dual-hosted git repository. lide pushed a commit to branch branch-1.2-lts in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-1.2-lts by this push: new c35d2aed467 [fix](thrift)limit be and fe thrift server max pkg size,avoid accepting error or too large package causing OOM (#26179) c35d2aed467 is described below commit c35d2aed4675c71aa22820ff6e65690f5869a4f8 Author: ryanzryu <143597717+ryanz...@users.noreply.github.com> AuthorDate: Tue Nov 7 16:41:38 2023 +0800 [fix](thrift)limit be and fe thrift server max pkg size,avoid accepting error or too large package causing OOM (#26179) --- be/src/common/config.h | 3 +++ be/src/util/thrift_server.cpp | 5 +++++ docs/zh-CN/docs/admin-manual/config/be-config.md | 6 ++++++ docs/zh-CN/docs/admin-manual/config/fe-config.md | 12 ++++++++++++ .../src/main/java/org/apache/doris/common/Config.java | 6 ++++++ .../src/main/java/org/apache/doris/common/ThriftServer.java | 6 +++--- 6 files changed, 35 insertions(+), 3 deletions(-) diff --git a/be/src/common/config.h b/be/src/common/config.h index 2cb34fd6b08..660865c36e1 100644 --- a/be/src/common/config.h +++ b/be/src/common/config.h @@ -929,6 +929,9 @@ CONF_mBool(allow_invalid_decimalv2_literal, "false"); // data page size for primary key index. CONF_Int32(primary_key_data_page_size, "32768"); +// the max package size be thrift server can receive,avoid accepting error or too large package causing OOM,default 20M +CONF_Int32(be_thrift_max_pkg_bytes, "20000000"); + #ifdef BE_TEST // test s3 CONF_String(test_s3_resource, "resource"); diff --git a/be/src/util/thrift_server.cpp b/be/src/util/thrift_server.cpp index c3dc639eb87..835fc7eaf92 100644 --- a/be/src/util/thrift_server.cpp +++ b/be/src/util/thrift_server.cpp @@ -285,6 +285,11 @@ Status ThriftServer::start() { DCHECK(!_started); std::shared_ptr<apache::thrift::protocol::TProtocolFactory> protocol_factory( new apache::thrift::protocol::TBinaryProtocolFactory()); + // binary_protocal_factory for setStringSizeLimit function + std::shared_ptr<apache::thrift::protocol::TBinaryProtocolFactory> binary_protocal_factory = + std::dynamic_pointer_cast<apache::thrift::protocol::TBinaryProtocolFactory>( + protocol_factory); + binary_protocal_factory->setStringSizeLimit(config::be_thrift_max_pkg_bytes); std::shared_ptr<apache::thrift::concurrency::ThreadManager> thread_mgr; std::shared_ptr<apache::thrift::concurrency::ThreadFactory> thread_factory = std::make_shared<apache::thrift::concurrency::ThreadFactory>(); diff --git a/docs/zh-CN/docs/admin-manual/config/be-config.md b/docs/zh-CN/docs/admin-manual/config/be-config.md index 8156d2b2a05..fe147ca47c1 100644 --- a/docs/zh-CN/docs/admin-manual/config/be-config.md +++ b/docs/zh-CN/docs/admin-manual/config/be-config.md @@ -1446,4 +1446,10 @@ load tablets from header failed, failed tablets size: xxx, path=xxx * 描述: 是否在导入json数据时用simdjson来解析。 * 默认值: false + +#### `be_thrift_max_pkg_bytes` + +* 描述: be节点thrift端口最大接收包大小 +* 默认值: 20000000 + </version> diff --git a/docs/zh-CN/docs/admin-manual/config/fe-config.md b/docs/zh-CN/docs/admin-manual/config/fe-config.md index e54ff756229..d78ae3804c1 100644 --- a/docs/zh-CN/docs/admin-manual/config/fe-config.md +++ b/docs/zh-CN/docs/admin-manual/config/fe-config.md @@ -2734,3 +2734,15 @@ show data (其他用法:HELP SHOW DATA) 这个参数主要用于避免因 external catalog 无法访问、信息过多等原因导致的查询 `information_schema` 超时的问题。 + +#### `fe_thrift_max_pkg_bytes` + +默认值:20000000 + +是否可以动态配置:false + +是否为 Master FE 节点独有的配置项:false + +用于限制fe节点thrift端口可以接收的最大包长度,避免接收到过大或者错误的包导致OOM + + diff --git a/fe/fe-common/src/main/java/org/apache/doris/common/Config.java b/fe/fe-common/src/main/java/org/apache/doris/common/Config.java index edfd56c522c..2a66a609643 100644 --- a/fe/fe-common/src/main/java/org/apache/doris/common/Config.java +++ b/fe/fe-common/src/main/java/org/apache/doris/common/Config.java @@ -2053,5 +2053,11 @@ public class Config extends ConfigBase { @ConfField(mutable = true) public static boolean use_mysql_bigint_for_largeint = false; + + /** + * the max package size fe thrift server can receive,avoid accepting error or too large package causing OOM,default 20M + */ + @ConfField + public static int fe_thrift_max_pkg_bytes = 20000000; } diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/ThriftServer.java b/fe/fe-core/src/main/java/org/apache/doris/common/ThriftServer.java index d101f5d227b..eda2f2e4d6d 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/common/ThriftServer.java +++ b/fe/fe-core/src/main/java/org/apache/doris/common/ThriftServer.java @@ -91,14 +91,14 @@ public class ThriftServer { private void createSimpleServer() throws TTransportException { TServer.Args args = new TServer.Args(new TServerSocket(port)).protocolFactory( - new TBinaryProtocol.Factory()).processor(processor); + new TBinaryProtocol.Factory(Config.fe_thrift_max_pkg_bytes, -1)).processor(processor); server = new TSimpleServer(args); } private void createThreadedServer() throws TTransportException { TThreadedSelectorServer.Args args = new TThreadedSelectorServer.Args( new TNonblockingServerSocket(port, Config.thrift_client_timeout_ms)).protocolFactory( - new TBinaryProtocol.Factory()).processor(processor); + new TBinaryProtocol.Factory(Config.fe_thrift_max_pkg_bytes, -1)).processor(processor); ThreadPoolExecutor threadPoolExecutor = ThreadPoolManager.newDaemonCacheThreadPool( Config.thrift_server_max_worker_threads, "thrift-server-pool", true); args.executorService(threadPoolExecutor); @@ -114,7 +114,7 @@ public class ThriftServer { TThreadPoolServer.Args serverArgs = new TThreadPoolServer.Args(new TServerSocket(socketTransportArgs)).protocolFactory( - new TBinaryProtocol.Factory()).processor(processor); + new TBinaryProtocol.Factory(Config.fe_thrift_max_pkg_bytes, -1)).processor(processor); ThreadPoolExecutor threadPoolExecutor = ThreadPoolManager.newDaemonCacheThreadPool( Config.thrift_server_max_worker_threads, "thrift-server-pool", true); serverArgs.executorService(threadPoolExecutor); --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org