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