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

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


The following commit(s) were added to refs/heads/schema_scan by this push:
     new ca235fd3647 memory-leak-fix
ca235fd3647 is described below

commit ca235fd3647ae4f49b4f4193428b0451397021fd
Author: Caideyipi <[email protected]>
AuthorDate: Tue Mar 31 18:01:05 2026 +0800

    memory-leak-fix
---
 .../impl/mem/mnode/iterator/AbstractTraverserIterator.java |  3 +++
 .../impl/mem/mnode/iterator/MemoryTraverserIterator.java   | 14 ++++++++++----
 .../pbtree/mnode/iterator/CachedTraverserIterator.java     |  7 +++++++
 3 files changed, 20 insertions(+), 4 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/iterator/AbstractTraverserIterator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/iterator/AbstractTraverserIterator.java
index 5f72358418b..5e5788fa5f9 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/iterator/AbstractTraverserIterator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/iterator/AbstractTraverserIterator.java
@@ -107,12 +107,15 @@ public abstract class AbstractTraverserIterator<N extends 
IMNode<N>> implements
       if (skipPreDeletedSchema
           && nextMatchedNode.isMeasurement()
           && nextMatchedNode.getAsMeasurementMNode().isPreDeleted()) {
+        releaseSkippedNode(nextMatchedNode);
         nextMatchedNode = null;
       }
     }
     return true;
   }
 
+  protected abstract void releaseSkippedNode(final N node);
+
   @Override
   public N next() {
     if (!hasNext()) {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/iterator/MemoryTraverserIterator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/iterator/MemoryTraverserIterator.java
index c222d5ecd86..8a0dd8da31b 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/iterator/MemoryTraverserIterator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/mnode/iterator/MemoryTraverserIterator.java
@@ -16,6 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
+
 package 
org.apache.iotdb.db.schemaengine.schemaregion.mtree.impl.mem.mnode.iterator;
 
 import org.apache.iotdb.commons.exception.MetadataException;
@@ -30,11 +31,16 @@ import java.util.Map;
 // only use for IConfigMNode and IMemMNode
 public class MemoryTraverserIterator<N extends IMNode<N>> extends 
AbstractTraverserIterator<N> {
   public MemoryTraverserIterator(
-      IMTreeStore<N> store,
-      IDeviceMNode<N> parent,
-      Map<Integer, Template> templateMap,
-      IMNodeFactory<N> nodeFactory)
+      final IMTreeStore<N> store,
+      final IDeviceMNode<N> parent,
+      final Map<Integer, Template> templateMap,
+      final IMNodeFactory<N> nodeFactory)
       throws MetadataException {
     super(store, parent, templateMap, nodeFactory);
   }
+
+  @Override
+  protected void releaseSkippedNode(final N node) {
+    // Do nothing
+  }
 }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/mnode/iterator/CachedTraverserIterator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/mnode/iterator/CachedTraverserIterator.java
index 529ddd44658..0075e7da6e6 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/mnode/iterator/CachedTraverserIterator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/mnode/iterator/CachedTraverserIterator.java
@@ -48,4 +48,11 @@ public class CachedTraverserIterator extends 
AbstractTraverserIterator<ICachedMN
     }
     super.close();
   }
+
+  @Override
+  protected void releaseSkippedNode(final ICachedMNode node) {
+    if (usingDirectChildrenIterator) {
+      store.unPin(node);
+    }
+  }
 }

Reply via email to