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);
+ }
+ }
}