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

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


The following commit(s) were added to refs/heads/master by this push:
     new cf718f6e444 Use MemoizedCheckedSupplier for COPY TO folder manager & 
keep compatibility with another branch (#17559)
cf718f6e444 is described below

commit cf718f6e44454968797e8e4cbe18eb179f9eb2b5
Author: shuwenwei <[email protected]>
AuthorDate: Mon Apr 27 18:35:44 2026 +0800

    Use MemoizedCheckedSupplier for COPY TO folder manager & keep compatibility 
with another branch (#17559)
---
 .../relational/ColumnTransformerBuilder.java       | 11 ++++++++++-
 .../planner/ITableOperatorGeneratorContext.java    |  3 +++
 .../calc/plan/planner/TableOperatorGenerator.java  |  6 ++++--
 iotdb-core/datanode/pom.xml                        |  3 +++
 .../planner/DataNodeTableOperatorGenerator.java    |  3 ++-
 .../plan/planner/LocalExecutionPlanContext.java    |  6 ++++++
 .../plan/relational/sql/ast/DeleteDevice.java      |  3 ++-
 .../schemaregion/impl/SchemaRegionMemoryImpl.java  |  6 ++++--
 .../db/service/DataNodeInternalRPCService.java     |  4 ++--
 .../db/storageengine/rescon/disk/TierManager.java  | 23 +++++++++-------------
 10 files changed, 45 insertions(+), 23 deletions(-)

diff --git 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/execution/relational/ColumnTransformerBuilder.java
 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/execution/relational/ColumnTransformerBuilder.java
index 42f8f8bed59..6b74741e4fd 100644
--- 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/execution/relational/ColumnTransformerBuilder.java
+++ 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/execution/relational/ColumnTransformerBuilder.java
@@ -19,6 +19,7 @@
 
 package org.apache.iotdb.calc.execution.relational;
 
+import org.apache.iotdb.calc.plan.planner.memory.MemoryReservationManager;
 import org.apache.iotdb.calc.plan.relational.metadata.ITypeMetadata;
 import org.apache.iotdb.calc.transformation.dag.column.ColumnTransformer;
 import 
org.apache.iotdb.calc.transformation.dag.column.FailFunctionColumnTransformer;
@@ -215,6 +216,8 @@ import org.apache.tsfile.read.common.type.Type;
 import org.apache.tsfile.read.common.type.TypeEnum;
 import org.apache.tsfile.utils.Binary;
 
+import javax.annotation.Nullable;
+
 import java.time.ZoneId;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -1944,6 +1947,10 @@ public class ColumnTransformerBuilder
 
     private final ITypeMetadata metadata;
 
+    // used in other branch
+    @SuppressWarnings("unused")
+    private final Optional<MemoryReservationManager> memoryReservationManager;
+
     public Context(
         SessionInfo sessionInfo,
         List<LeafColumnTransformer> leafList,
@@ -1954,7 +1961,8 @@ public class ColumnTransformerBuilder
         List<TSDataType> inputDataTypes,
         int originSize,
         ITableTypeProvider typeProvider,
-        ITypeMetadata metadata) {
+        ITypeMetadata metadata,
+        @Nullable MemoryReservationManager memoryReservationManager) {
       this.sessionInfo = sessionInfo;
       this.leafList = leafList;
       this.inputLocations = inputLocations;
@@ -1965,6 +1973,7 @@ public class ColumnTransformerBuilder
       this.originSize = originSize;
       this.typeProvider = typeProvider;
       this.metadata = metadata;
+      this.memoryReservationManager = 
Optional.ofNullable(memoryReservationManager);
     }
 
     public Type getType(SymbolReference symbolReference) {
diff --git 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/plan/planner/ITableOperatorGeneratorContext.java
 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/plan/planner/ITableOperatorGeneratorContext.java
index ffee1d2e8da..ccd843ccb62 100644
--- 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/plan/planner/ITableOperatorGeneratorContext.java
+++ 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/plan/planner/ITableOperatorGeneratorContext.java
@@ -19,6 +19,7 @@
 
 package org.apache.iotdb.calc.plan.planner;
 
+import org.apache.iotdb.calc.plan.planner.memory.MemoryReservationManager;
 import org.apache.iotdb.commons.queryengine.plan.analyze.ITableTypeProvider;
 
 import java.time.ZoneId;
@@ -26,5 +27,7 @@ import java.time.ZoneId;
 public interface ITableOperatorGeneratorContext {
   ITableTypeProvider getTableTypeProvider();
 
+  MemoryReservationManager getMemoryReservationManager();
+
   ZoneId getZoneId();
 }
diff --git 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/plan/planner/TableOperatorGenerator.java
 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/plan/planner/TableOperatorGenerator.java
index aebce95bdb9..86edc71a8e0 100644
--- 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/plan/planner/TableOperatorGenerator.java
+++ 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/plan/planner/TableOperatorGenerator.java
@@ -331,7 +331,8 @@ public abstract class TableOperatorGenerator<
                           ImmutableList.of(),
                           0,
                           context.getTableTypeProvider(),
-                          metadata);
+                          metadata,
+                          context.getMemoryReservationManager());
 
                   return visitor.process(p, filterColumnTransformerContext);
                 })
@@ -358,7 +359,8 @@ public abstract class TableOperatorGenerator<
             filterOutputDataTypes,
             inputLocations.size(),
             context.getTableTypeProvider(),
-            metadata);
+            metadata,
+            context.getMemoryReservationManager());
 
     for (Expression expression : projectExpressions) {
       projectOutputTransformerList.add(
diff --git a/iotdb-core/datanode/pom.xml b/iotdb-core/datanode/pom.xml
index d3f5f4a669f..bce270a5933 100644
--- a/iotdb-core/datanode/pom.xml
+++ b/iotdb-core/datanode/pom.xml
@@ -407,6 +407,9 @@
                                 <resource>
                                     
<directory>${maven.multiModuleProjectDirectory}/iotdb-core/calc-commons/src/main/codegen</directory>
                                     <filtering>false</filtering>
+                                    <excludes>
+                                        <exclude>templates/**</exclude>
+                                    </excludes>
                                 </resource>
                                 <resource>
                                     <directory>src/main/codegen</directory>
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/DataNodeTableOperatorGenerator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/DataNodeTableOperatorGenerator.java
index d63b1a0962d..e2640bfb5ea 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/DataNodeTableOperatorGenerator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/DataNodeTableOperatorGenerator.java
@@ -1240,7 +1240,8 @@ public class DataNodeTableOperatorGenerator
                                 ImmutableList.of(),
                                 0,
                                 context.getTypeProvider(),
-                                metadata)),
+                                metadata,
+                                context.getMemoryReservationManager())),
                     columnSchemaList,
                     database,
                     table)
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LocalExecutionPlanContext.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LocalExecutionPlanContext.java
index 54e475c00d8..65908708394 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LocalExecutionPlanContext.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LocalExecutionPlanContext.java
@@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.planner;
 
 import org.apache.iotdb.calc.execution.operator.Operator;
 import org.apache.iotdb.calc.plan.planner.ITableOperatorGeneratorContext;
+import org.apache.iotdb.calc.plan.planner.memory.MemoryReservationManager;
 import org.apache.iotdb.commons.queryengine.plan.analyze.ITableTypeProvider;
 import org.apache.iotdb.commons.queryengine.plan.planner.plan.node.PlanNode;
 import org.apache.iotdb.commons.queryengine.plan.planner.plan.node.PlanNodeId;
@@ -314,6 +315,11 @@ public class LocalExecutionPlanContext implements 
ITableOperatorGeneratorContext
     return typeProvider;
   }
 
+  @Override
+  public MemoryReservationManager getMemoryReservationManager() {
+    return 
driverContext.getFragmentInstanceContext().getMemoryReservationContext();
+  }
+
   public FragmentInstanceContext getInstanceContext() {
     return driverContext.getFragmentInstanceContext();
   }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DeleteDevice.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DeleteDevice.java
index 5ec7102c515..d2fa9bbabde 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DeleteDevice.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DeleteDevice.java
@@ -233,7 +233,8 @@ public class DeleteDevice extends AbstractTraverseDevice {
                     ImmutableList.of(),
                     0,
                     mockTypeProvider,
-                    metadata))
+                    metadata,
+                    null))
             : null;
 
     return new DeviceBlackListConstructor(
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/impl/SchemaRegionMemoryImpl.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/impl/SchemaRegionMemoryImpl.java
index 270623b23ee..754cca02092 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/impl/SchemaRegionMemoryImpl.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/impl/SchemaRegionMemoryImpl.java
@@ -1574,7 +1574,8 @@ public class SchemaRegionMemoryImpl implements 
ISchemaRegion {
                     ImmutableList.of(),
                     0,
                     mockTypeProvider,
-                    metadata))
+                    metadata,
+                    null))
             : null;
 
     final List<TSDataType> filterOutputDataTypes =
@@ -1601,7 +1602,8 @@ public class SchemaRegionMemoryImpl implements 
ISchemaRegion {
             filterOutputDataTypes,
             inputLocations.size(),
             mockTypeProvider,
-            metadata);
+            metadata,
+            null);
 
     final List<String> attributeNames =
         updateNode.getAssignments().stream()
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/DataNodeInternalRPCService.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/DataNodeInternalRPCService.java
index f3bf8e507c2..b58d647fcd7 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/DataNodeInternalRPCService.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/DataNodeInternalRPCService.java
@@ -44,8 +44,8 @@ public class DataNodeInternalRPCService extends ThriftService
   private static final IoTDBConfig config = 
IoTDBDescriptor.getInstance().getConfig();
   private static final CommonConfig commonConfig = 
CommonDescriptor.getInstance().getConfig();
 
-  private final AtomicReference<DataNodeInternalRPCServiceImpl> impl = new 
AtomicReference<>();
-  private DataNodeContext dataNodeContext;
+  protected final AtomicReference<DataNodeInternalRPCServiceImpl> impl = new 
AtomicReference<>();
+  protected DataNodeContext dataNodeContext;
 
   private DataNodeInternalRPCService() {}
 
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/rescon/disk/TierManager.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/rescon/disk/TierManager.java
index 0dec9ce465d..02a95ff5511 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/rescon/disk/TierManager.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/rescon/disk/TierManager.java
@@ -30,6 +30,7 @@ import 
org.apache.iotdb.db.storageengine.rescon.disk.strategy.RandomOnDiskUsable
 import org.apache.iotdb.metrics.utils.FileStoreUtils;
 
 import com.google.common.io.BaseEncoding;
+import org.apache.ratis.util.MemoizedCheckedSupplier;
 import org.apache.tsfile.fileSystem.FSFactoryProducer;
 import org.apache.tsfile.fileSystem.FSType;
 import org.apache.tsfile.utils.FSUtils;
@@ -82,7 +83,10 @@ public class TierManager {
 
   private List<String> copyToTargetDirs;
 
-  private FolderManager copyToFolderManager;
+  //  private FolderManager copyToFolderManager;
+
+  private MemoizedCheckedSupplier<FolderManager, 
DiskSpaceInsufficientException>
+      copyToFolderManager;
 
   /** total space of each tier, Long.MAX_VALUE when one tier contains remote 
storage */
   private long[] tierDiskTotalSpace;
@@ -175,11 +179,9 @@ public class TierManager {
                             .getFile(v, 
IoTDBConstant.COPY_TO_TARGET_FOLDER_NAME)
                             .getPath())
                 .collect(Collectors.toList());
-        try {
-          copyToFolderManager = new FolderManager(copyToTargetDirs, 
directoryStrategyType);
-        } catch (DiskSpaceInsufficientException e) {
-          logger.error("All disks of tier {} are full.", tierLevel, e);
-        }
+        copyToFolderManager =
+            MemoizedCheckedSupplier.valueOf(
+                () -> new FolderManager(copyToTargetDirs, 
directoryStrategyType));
       }
 
       objectDirs =
@@ -248,14 +250,7 @@ public class TierManager {
   }
 
   public String getNextFolderForCopyToTargetFile() throws 
DiskSpaceInsufficientException {
-    if (copyToFolderManager == null) {
-      throw new DiskSpaceInsufficientException(
-          "copyToFolderManager is not initialized. This usually indicates that 
folder "
-              + "initialization in TierManager.initFolders() failed due to 
insufficient disk "
-              + "space. Please check disk space and related configuration 
before retrying the "
-              + "copy-to-target operation.");
-    }
-    return copyToFolderManager.getNextFolder();
+    return copyToFolderManager.get().getNextFolder();
   }
 
   public String getNextFolderForObjectFile() throws 
DiskSpaceInsufficientException {

Reply via email to