[IOTDB-3656] mpp load with supporting modify MAX_PLAN_NODE_SIZE (#7367)
diff --git a/server/src/assembly/resources/conf/iotdb-datanode.properties b/server/src/assembly/resources/conf/iotdb-datanode.properties
index 877bbfa..e9892da 100644
--- a/server/src/assembly/resources/conf/iotdb-datanode.properties
+++ b/server/src/assembly/resources/conf/iotdb-datanode.properties
@@ -99,6 +99,10 @@
# Datatype: int
# connection_timeout_ms=20000
+# max plan node size, note that thrift max frame size must be larger than max plan node size.
+# Datatype: int
+# max_plan_node_size=536870912
+
# The maximum number of clients that can be idle for a node's InternalService.
# When the number of idle clients on a node exceeds this number, newly returned clients will be released
# Datatype: int
diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
index 8409527..df25bd8 100644
--- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
+++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
@@ -759,9 +759,6 @@
*/
private long partitionInterval = 86400;
- /** Max size of a {@link PlanNode}, mainly used to control memory of {@link LoadTsFileNode}. */
- private long maxPlanNodeSize = 500 * 1048576L;
-
/**
* Level of TimeIndex, which records the start time and end time of TsFileResource. Currently,
* DEVICE_TIME_INDEX and FILE_TIME_INDEX are supported, and could not be changed after first set.
@@ -813,6 +810,9 @@
/** Unit: byte */
private int thriftMaxFrameSize = 536870912;
+ /** Max size of a {@link PlanNode}, mainly used to control memory of {@link LoadTsFileNode}. */
+ private int maxPlanNodeSize = thriftMaxFrameSize;
+
private int thriftDefaultBufferSize = RpcUtils.THRIFT_DEFAULT_BUF_CAPACITY;
/** time interval in minute for calculating query frequency. Unit: minute */
@@ -2445,6 +2445,10 @@
RpcTransportFactory.setThriftMaxFrameSize(this.thriftMaxFrameSize);
}
+ public void setMaxPlanNodeSize(int maxPlanNodeSize) {
+ this.maxPlanNodeSize = maxPlanNodeSize;
+ }
+
public int getThriftDefaultBufferSize() {
return thriftDefaultBufferSize;
}
diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
index 54a7d4b..1aae7bf 100644
--- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
+++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
@@ -773,6 +773,21 @@
conf.setThriftMaxFrameSize(IoTDBConstant.LEFT_SIZE_IN_REQUEST * 2);
}
+ conf.setMaxPlanNodeSize(
+ Integer.parseInt(
+ properties.getProperty(
+ "max_plan_node_size", String.valueOf(conf.getThriftMaxFrameSize()))));
+
+ if (conf.getMaxPlanNodeSize() > conf.getThriftMaxFrameSize()) {
+ logger.warn(
+ String.format(
+ "MAX PLAN NODE SIZE %d can not be larger than THRIFT MAX FRAME SIZE %d, MAX PLAN NODE SIZE has been reset to %d",
+ conf.getMaxPlanNodeSize(),
+ conf.getThriftMaxFrameSize(),
+ conf.getThriftMaxFrameSize()));
+ conf.setMaxPlanNodeSize(conf.getThriftMaxFrameSize());
+ }
+
conf.setThriftDefaultBufferSize(
Integer.parseInt(
properties.getProperty(