This is an automated email from the ASF dual-hosted git repository.

lancelly pushed a commit to branch fe_memory_control
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 3d2bcd221983c4a9e0337a17c65b83aea2864c4f
Author: lancelly <[email protected]>
AuthorDate: Wed May 22 22:26:52 2024 +0800

    fix
---
 .../iotdb/db/queryengine/common/MPPQueryContext.java       |  3 ++-
 .../db/queryengine/plan/analyze/ExpressionAnalyzer.java    | 14 ++++++++------
 .../db/queryengine/plan/analyze/TemplatedAnalyze.java      |  4 ++++
 .../db/queryengine/plan/planner/LocalExecutionPlanner.java |  1 +
 4 files changed, 15 insertions(+), 7 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/MPPQueryContext.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/MPPQueryContext.java
index 533cb651d31..67bbc30d2dd 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/MPPQueryContext.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/MPPQueryContext.java
@@ -82,7 +82,8 @@ public class MPPQueryContext {
 
   private long bytesToBeReservedForFrontEnd = 0;
 
-  // To avoid reserving memory too frequently, we choose to do it in batches. 
This is upper limit
+  // To avoid reserving memory too frequently, we choose to do it in batches. 
This is the lower
+  // bound
   // for each batch.
   private static final long MEMORY_BATCH_THRESHOLD = 1024L * 1024L;
 
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/ExpressionAnalyzer.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/ExpressionAnalyzer.java
index 9219a3d45b0..ebc52a86a62 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/ExpressionAnalyzer.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/ExpressionAnalyzer.java
@@ -410,7 +410,9 @@ public class ExpressionAnalyzer {
    *     expressions
    */
   public static List<Expression> bindSchemaForExpression(
-      Expression expression, ISchemaTree schemaTree, MPPQueryContext 
queryContext) {
+      final Expression expression,
+      final ISchemaTree schemaTree,
+      final MPPQueryContext queryContext) {
     return new BindSchemaForExpressionVisitor()
         .process(expression, new 
BindSchemaForExpressionVisitor.Context(schemaTree, queryContext));
   }
@@ -425,11 +427,11 @@ public class ExpressionAnalyzer {
    * @return the expression list with full path and after binding schema
    */
   public static List<Expression> bindSchemaForPredicate(
-      Expression predicate,
-      List<PartialPath> prefixPaths,
-      ISchemaTree schemaTree,
-      boolean isRoot,
-      MPPQueryContext queryContext) {
+      final Expression predicate,
+      final List<PartialPath> prefixPaths,
+      final ISchemaTree schemaTree,
+      final boolean isRoot,
+      final MPPQueryContext queryContext) {
     return new BindSchemaForPredicateVisitor()
         .process(
             predicate,
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedAnalyze.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedAnalyze.java
index e1fbc88bbcf..87bea8c61a9 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedAnalyze.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedAnalyze.java
@@ -129,6 +129,8 @@ public class TemplatedAnalyze {
               TimeSeriesOperand measurementPath =
                   new TimeSeriesOperand(
                       new MeasurementPath(new String[] {measurementName}, 
measurementSchema));
+              // reserve memory for this expression
+              context.reserveMemoryForFrontEnd(measurementPath.ramBytesUsed());
               outputExpressions.add(new Pair<>(measurementPath, null));
               paginationController.consumeLimit();
             } else {
@@ -150,6 +152,8 @@ public class TemplatedAnalyze {
               TimeSeriesOperand measurementPath =
                   new TimeSeriesOperand(
                       new MeasurementPath(new String[] {measurementName}, 
measurementSchema));
+              // reserve memory for this expression
+              context.reserveMemoryForFrontEnd(measurementPath.ramBytesUsed());
               outputExpressions.add(new Pair<>(measurementPath, 
resultColumn.getAlias()));
             } else {
               break;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LocalExecutionPlanner.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LocalExecutionPlanner.java
index 6a8ba336588..9a87f05220c 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LocalExecutionPlanner.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LocalExecutionPlanner.java
@@ -57,6 +57,7 @@ public class LocalExecutionPlanner {
     MAX_REST_MEMORY_FOR_LOAD =
         (long)
             ((ALLOCATE_MEMORY_FOR_OPERATORS) * (1.0 - 
CONFIG.getMaxAllocateMemoryRatioForLoad()));
+    LOGGER.info("freeMemoryForOperators is : {}", 
ALLOCATE_MEMORY_FOR_OPERATORS);
   }
 
   /** allocated memory for operator execution */

Reply via email to