You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by zy...@apache.org on 2022/07/19 09:21:37 UTC

[iotdb] branch rel/0.13 updated: [To rel/0.13][IOTDB-3742]Fix count nodes #6715

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

zyk pushed a commit to branch rel/0.13
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/rel/0.13 by this push:
     new 23856d20a2 [To rel/0.13][IOTDB-3742]Fix count nodes #6715
23856d20a2 is described below

commit 23856d20a22ae3c3260d7b318151307a3f277bd9
Author: Marcos_Zyk <38...@users.noreply.github.com>
AuthorDate: Tue Jul 19 17:21:32 2022 +0800

    [To rel/0.13][IOTDB-3742]Fix count nodes #6715
    
    [To rel/0.13][IOTDB-3742]Fix count nodes #6715
---
 .../java/org/apache/iotdb/db/metadata/mtree/MTree.java   |  8 ++++----
 .../iotdb/db/metadata/mtree/traverser/Traverser.java     | 16 ++++++++++++++--
 .../mtree/traverser/collector/EntityCollector.java       |  2 ++
 .../mtree/traverser/collector/MNodeCollector.java        | 12 ++----------
 .../mtree/traverser/collector/MeasurementCollector.java  |  4 ++--
 .../metadata/mtree/traverser/counter/EntityCounter.java  |  1 +
 .../mtree/traverser/counter/MeasurementCounter.java      |  2 +-
 7 files changed, 26 insertions(+), 19 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTree.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTree.java
index 8ce8c286b7..1ddbeaef52 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTree.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTree.java
@@ -1245,8 +1245,8 @@ public class MTree implements Serializable {
   /** Get all paths from root to the given level */
   public List<PartialPath> getNodesListInGivenLevel(
       PartialPath pathPattern, int nodeLevel, StorageGroupFilter filter) throws MetadataException {
-    MNodeCollector<List<PartialPath>> collector =
-        new MNodeCollector<List<PartialPath>>(root, pathPattern) {
+    MNodeCollector<Set<PartialPath>> collector =
+        new MNodeCollector<Set<PartialPath>>(root, pathPattern) {
           @Override
           protected void transferToResult(IMNode node) {
             try {
@@ -1256,11 +1256,11 @@ public class MTree implements Serializable {
             }
           }
         };
-    collector.setResultSet(new LinkedList<>());
+    collector.setResultSet(new TreeSet<>());
     collector.setTargetLevel(nodeLevel);
     collector.setStorageGroupFilter(filter);
     collector.traverse();
-    return collector.getResult();
+    return new ArrayList<>(collector.getResult());
   }
   // endregion
 
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/Traverser.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/Traverser.java
index a13a2f325b..ef3a0c1203 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/Traverser.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/Traverser.java
@@ -51,8 +51,8 @@ public abstract class Traverser {
   // to construct full path or find mounted node on MTree when traverse into template
   protected Deque<IMNode> traverseContext;
 
-  // if isMeasurementTraverser, measurement in template should be processed
-  protected boolean isMeasurementTraverser = false;
+  // if true, measurement in template should be processed
+  protected boolean shouldTraverseTemplate = false;
 
   // default false means fullPath pattern match
   protected boolean isPrefixMatch = false;
@@ -159,6 +159,10 @@ public abstract class Traverser {
     }
     traverseContext.pop();
 
+    if (!shouldTraverseTemplate) {
+      return;
+    }
+
     if (!node.isUseTemplate()) {
       return;
     }
@@ -199,6 +203,10 @@ public abstract class Traverser {
       traverseContext.pop();
     }
 
+    if (!shouldTraverseTemplate) {
+      return;
+    }
+
     if (!node.isUseTemplate()) {
       return;
     }
@@ -241,6 +249,10 @@ public abstract class Traverser {
       traverseContext.pop();
     }
 
+    if (!shouldTraverseTemplate) {
+      return;
+    }
+
     if (!node.isUseTemplate()) {
       return;
     }
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/EntityCollector.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/EntityCollector.java
index 9a20ec3f02..82f332fa06 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/EntityCollector.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/EntityCollector.java
@@ -28,11 +28,13 @@ public abstract class EntityCollector<T> extends CollectorTraverser<T> {
 
   public EntityCollector(IMNode startNode, PartialPath path) throws MetadataException {
     super(startNode, path);
+    shouldTraverseTemplate = true;
   }
 
   public EntityCollector(IMNode startNode, PartialPath path, int limit, int offset)
       throws MetadataException {
     super(startNode, path, limit, offset);
+    shouldTraverseTemplate = true;
   }
 
   @Override
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MNodeCollector.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MNodeCollector.java
index 3a57ba3be4..c12a80e2b8 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MNodeCollector.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MNodeCollector.java
@@ -23,9 +23,6 @@ import org.apache.iotdb.db.metadata.MManager.StorageGroupFilter;
 import org.apache.iotdb.db.metadata.mnode.IMNode;
 import org.apache.iotdb.db.metadata.path.PartialPath;
 
-import java.util.HashSet;
-import java.util.Set;
-
 /**
  * This class defines any node in MTree as potential target node. On finding a path matching the
  * given pattern, if a level is specified and the path is longer than the specified level,
@@ -40,8 +37,6 @@ public abstract class MNodeCollector<T> extends CollectorTraverser<T> {
   // level query option
   protected int targetLevel = -1;
 
-  private Set<IMNode> processedNodes = new HashSet<>();
-
   public MNodeCollector(IMNode startNode, PartialPath path) throws MetadataException {
     super(startNode, path);
   }
@@ -72,11 +67,8 @@ public abstract class MNodeCollector<T> extends CollectorTraverser<T> {
         node = node.getParent();
         level--;
       }
-      // record processed node so they will not be processed twice
-      if (!processedNodes.contains(node)) {
-        processedNodes.add(node);
-        processResult(node);
-      }
+
+      processResult(node);
       return true;
     } else {
       processResult(node);
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MeasurementCollector.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MeasurementCollector.java
index 46f8e87b70..d13d9c76af 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MeasurementCollector.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/MeasurementCollector.java
@@ -32,13 +32,13 @@ public abstract class MeasurementCollector<T> extends CollectorTraverser<T> {
 
   public MeasurementCollector(IMNode startNode, PartialPath path) throws MetadataException {
     super(startNode, path);
-    isMeasurementTraverser = true;
+    shouldTraverseTemplate = true;
   }
 
   public MeasurementCollector(IMNode startNode, PartialPath path, int limit, int offset)
       throws MetadataException {
     super(startNode, path, limit, offset);
-    isMeasurementTraverser = true;
+    shouldTraverseTemplate = true;
   }
 
   @Override
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/counter/EntityCounter.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/counter/EntityCounter.java
index 1aa4bb52a5..7a431090c0 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/counter/EntityCounter.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/counter/EntityCounter.java
@@ -27,6 +27,7 @@ public class EntityCounter extends CounterTraverser {
 
   public EntityCounter(IMNode startNode, PartialPath path) throws MetadataException {
     super(startNode, path);
+    shouldTraverseTemplate = true;
   }
 
   @Override
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/counter/MeasurementCounter.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/counter/MeasurementCounter.java
index acaa288bb4..357e308043 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/counter/MeasurementCounter.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/counter/MeasurementCounter.java
@@ -28,7 +28,7 @@ public class MeasurementCounter extends CounterTraverser {
 
   public MeasurementCounter(IMNode startNode, PartialPath path) throws MetadataException {
     super(startNode, path);
-    isMeasurementTraverser = true;
+    shouldTraverseTemplate = true;
   }
 
   @Override