This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a commit to branch dev/1.3
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/dev/1.3 by this push:
new 3b9513e1b53 [to dev/1.3] Fix the status code of fetching schema when
memory is not enough
3b9513e1b53 is described below
commit 3b9513e1b53de2b377799ec850001436ea27795e
Author: shuwenwei <[email protected]>
AuthorDate: Fri Aug 15 10:13:45 2025 +0800
[to dev/1.3] Fix the status code of fetching schema when memory is not
enough
---
.../execution/operator/schema/SchemaFetchScanOperator.java | 10 ++++++++--
.../org/apache/iotdb/db/queryengine/plan/analyze/Analyzer.java | 7 ++++++-
.../plan/analyze/schema/ClusterSchemaFetchExecutor.java | 3 +++
3 files changed, 17 insertions(+), 3 deletions(-)
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/schema/SchemaFetchScanOperator.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/schema/SchemaFetchScanOperator.java
index 6cc8e06878c..9a8dbf9f21b 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/schema/SchemaFetchScanOperator.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/schema/SchemaFetchScanOperator.java
@@ -222,11 +222,17 @@ public class SchemaFetchScanOperator implements
SourceOperator {
schemaNodeIteratorForSerialize = schemaTree.getIteratorForSerialize();
baos = new PublicBAOS(DEFAULT_MAX_TSBLOCK_SIZE_IN_BYTES +
EXTRA_SIZE_TO_AVOID_GROW);
if (operatorContext != null) {
- schemaTreeMemCost = schemaTree.ramBytesUsed();
+ long ramBytesUsed = schemaTree.ramBytesUsed();
operatorContext
.getInstanceContext()
.getMemoryReservationContext()
- .reserveMemoryCumulatively(schemaTreeMemCost);
+ .reserveMemoryCumulatively(ramBytesUsed);
+ // For temporary and independently counted memory, we need process it
immediately
+ operatorContext
+ .getInstanceContext()
+ .getMemoryReservationContext()
+ .reserveMemoryImmediately();
+ this.schemaTreeMemCost = ramBytesUsed;
}
} catch (MetadataException e) {
throw new SchemaExecutionException(e);
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/Analyzer.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/Analyzer.java
index 34b17003f1b..3dfaa0a1137 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/Analyzer.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/Analyzer.java
@@ -45,7 +45,12 @@ public class Analyzer {
long startTime = System.nanoTime();
AnalyzeVisitor visitor = new AnalyzeVisitor(partitionFetcher,
schemaFetcher);
Analysis analysis = null;
-
context.setReserveMemoryForSchemaTreeFunc(context::reserveMemoryForFrontEnd);
+ context.setReserveMemoryForSchemaTreeFunc(
+ mem -> {
+ context.reserveMemoryForFrontEnd(mem);
+ // For temporary and independently counted memory, we need process
it immediately
+ context.reserveMemoryForFrontEndImmediately();
+ });
try {
analysis = visitor.process(statement, context);
} finally {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ClusterSchemaFetchExecutor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ClusterSchemaFetchExecutor.java
index e71b3299612..d302482c523 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ClusterSchemaFetchExecutor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ClusterSchemaFetchExecutor.java
@@ -29,6 +29,7 @@ import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.protocol.session.SessionManager;
import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
import org.apache.iotdb.db.queryengine.common.schematree.ClusterSchemaTree;
+import org.apache.iotdb.db.queryengine.exception.MemoryNotEnoughException;
import org.apache.iotdb.db.queryengine.plan.Coordinator;
import org.apache.iotdb.db.queryengine.plan.analyze.ClusterPartitionFetcher;
import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
@@ -321,6 +322,8 @@ class ClusterSchemaFetchExecutor {
throw new RuntimeException(
new MetadataException("Failed to fetch schema because of
unrecognized data"));
}
+ } catch (MemoryNotEnoughException e) {
+ throw e;
} catch (Exception e) {
throw new RuntimeException(e);
}