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

hui pushed a commit to branch lmh/PathPatternTreeOpt
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit a9cad4e9f9c4cf0e7c8b780f22b07b2881eac43e
Author: Minghui Liu <[email protected]>
AuthorDate: Wed Jun 15 14:45:45 2022 +0800

    refactor method names in PathPatternTree
---
 .../iotdb/confignode/manager/ConfigManager.java    |   4 +-
 .../thrift/ConfigNodeRPCServiceProcessor.java      |   2 +-
 .../iotdb/db/localconfignode/LocalConfigNode.java  |   4 +-
 .../db/mpp/common/schematree/PathPatternTree.java  | 123 +++++++++------------
 .../operator/schema/SchemaFetchScanOperator.java   |   2 +-
 .../mpp/plan/analyze/ClusterPartitionFetcher.java  |   4 +-
 .../mpp/plan/analyze/StandaloneSchemaFetcher.java  |   4 +-
 .../db/mpp/plan/planner/LogicalPlanBuilder.java    |  11 +-
 .../statement/internal/SchemaFetchStatement.java   |   2 +-
 .../mpp/common/schematree/PathPatternTreeTest.java |   4 +-
 .../metadata/read/SchemaFetchScanNodeTest.java     |   2 +-
 11 files changed, 75 insertions(+), 87 deletions(-)

diff --git 
a/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
 
b/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
index e81c72d76c..9331a83ebf 100644
--- 
a/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
+++ 
b/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
@@ -271,7 +271,7 @@ public class ConfigManager implements Manager {
   public DataSet getSchemaPartition(PathPatternTree patternTree) {
     TSStatus status = confirmLeader();
     if (status.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
-      List<String> devicePaths = patternTree.findAllDevicePaths();
+      List<String> devicePaths = patternTree.getAllDevicePatterns();
       List<String> storageGroups = 
getClusterSchemaManager().getStorageGroupNames();
       GetSchemaPartitionReq getSchemaPartitionReq = new 
GetSchemaPartitionReq();
       Map<String, List<TSeriesPartitionSlot>> partitionSlotsMap = new 
HashMap<>();
@@ -331,7 +331,7 @@ public class ConfigManager implements Manager {
   public DataSet getOrCreateSchemaPartition(PathPatternTree patternTree) {
     TSStatus status = confirmLeader();
     if (status.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
-      List<String> devicePaths = patternTree.findAllDevicePaths();
+      List<String> devicePaths = patternTree.getAllDevicePatterns();
       List<String> storageGroups = 
getClusterSchemaManager().getStorageGroupNames();
 
       GetOrCreateSchemaPartitionReq getOrCreateSchemaPartitionReq =
diff --git 
a/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCServiceProcessor.java
 
b/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCServiceProcessor.java
index 4d0cf0e5c0..ccf897bac7 100644
--- 
a/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCServiceProcessor.java
+++ 
b/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCServiceProcessor.java
@@ -291,7 +291,7 @@ public class ConfigNodeRPCServiceProcessor implements 
ConfigIService.Iface {
       throws TException {
     PathPatternTree patternTree =
         PathPatternTree.deserialize(ByteBuffer.wrap(req.getPathPatternTree()));
-    PartialPath partialPath = patternTree.splitToPathList().get(0);
+    PartialPath partialPath = patternTree.getAllPathPatterns().get(0);
     SchemaNodeManagementResp schemaNodeManagementResp;
     schemaNodeManagementResp =
         (SchemaNodeManagementResp) 
configManager.getNodePathsPartition(partialPath, req.getLevel());
diff --git 
a/server/src/main/java/org/apache/iotdb/db/localconfignode/LocalConfigNode.java 
b/server/src/main/java/org/apache/iotdb/db/localconfignode/LocalConfigNode.java
index 456fc8252b..6d03e978c2 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/localconfignode/LocalConfigNode.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/localconfignode/LocalConfigNode.java
@@ -895,7 +895,7 @@ public class LocalConfigNode {
 
     Map<String, Map<TSeriesPartitionSlot, TRegionReplicaSet>> 
partitionSlotsMap = new HashMap<>();
     patternTree.constructTree();
-    List<PartialPath> partialPathList = patternTree.splitToPathList();
+    List<PartialPath> partialPathList = patternTree.getAllPathPatterns();
     try {
       for (PartialPath path : partialPathList) {
         List<PartialPath> storageGroups = getBelongedStorageGroups(path);
@@ -922,7 +922,7 @@ public class LocalConfigNode {
 
   public Map<String, Map<TSeriesPartitionSlot, TRegionReplicaSet>> 
getOrCreateSchemaPartition(
       PathPatternTree patternTree) {
-    List<String> devicePaths = patternTree.findAllDevicePaths();
+    List<String> devicePaths = patternTree.getAllDevicePatterns();
     Map<String, Map<TSeriesPartitionSlot, TRegionReplicaSet>> 
partitionSlotsMap = new HashMap<>();
 
     try {
diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/common/schematree/PathPatternTree.java
 
b/server/src/main/java/org/apache/iotdb/db/mpp/common/schematree/PathPatternTree.java
index b86f8c3f44..8a950d2366 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/common/schematree/PathPatternTree.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/common/schematree/PathPatternTree.java
@@ -40,11 +40,11 @@ public class PathPatternTree {
 
   private PathPatternNode root;
 
-  @Deprecated private List<PartialPath> pathList;
+  private List<PartialPath> pathPatternList;
 
   public PathPatternTree() {
     this.root = new PathPatternNode(SQLConstant.ROOT);
-    this.pathList = new ArrayList<>();
+    this.pathPatternList = new ArrayList<>();
   }
 
   public PathPatternNode getRoot() {
@@ -56,18 +56,15 @@ public class PathPatternTree {
   }
 
   
/////////////////////////////////////////////////////////////////////////////////////////////////
-  // Operations for time series paths
+  // Operations for constructing tree
   
/////////////////////////////////////////////////////////////////////////////////////////////////
 
-  /** @param fullPath */
+  /** Append a fullPath (without wildcards) as a branch on the tree. */
   public void appendFullPath(PartialPath fullPath) {
     appendBranchWithoutPrune(root, fullPath.getNodes(), 0);
   }
 
-  /**
-   * @param devicePath
-   * @param measurement
-   */
+  /** Append a fullPath consisting of device and measurement as a branch on 
the tree. */
   public void appendFullPath(PartialPath devicePath, String measurement) {
     int deviceNodeLength = devicePath.getNodeLength();
     String[] pathNodes = new String[deviceNodeLength + 1];
@@ -77,31 +74,30 @@ public class PathPatternTree {
     appendBranchWithoutPrune(root, pathNodes, 0);
   }
 
-  /** @param pathPattern */
+  /** Add a pathPattern (may contain wildcards) to pathPatternList. */
   public void appendPathPattern(PartialPath pathPattern) {
     boolean isExist = false;
-    for (PartialPath path : pathList) {
+    for (PartialPath path : pathPatternList) {
       if (path.matchFullPath(pathPattern)) {
-        // path already exists in pathList
+        // path already exists in pathPatternList
         isExist = true;
         break;
       }
     }
     if (!isExist) {
-      // remove duplicate path in pathList
-      pathList.removeAll(
-          
pathList.stream().filter(pathPattern::matchFullPath).collect(Collectors.toList()));
-      pathList.add(pathPattern);
+      // remove duplicate path in pathPatternList
+      pathPatternList.removeAll(
+          
pathPatternList.stream().filter(pathPattern::matchFullPath).collect(Collectors.toList()));
+      pathPatternList.add(pathPattern);
     }
   }
 
-  /** */
-  @Deprecated
+  /** Construct tree according to the pathPatternList. */
   public void constructTree() {
-    for (PartialPath path : pathList) {
+    for (PartialPath path : pathPatternList) {
       appendBranchWithoutPrune(root, path.getNodes(), 0);
     }
-    pathList.clear();
+    pathPatternList.clear();
   }
 
   private void appendBranchWithoutPrune(PathPatternNode curNode, String[] 
pathNodes, int pos) {
@@ -127,101 +123,72 @@ public class PathPatternTree {
   }
 
   
/////////////////////////////////////////////////////////////////////////////////////////////////
-  // Operations for time series paths
+  // Operations for querying tree
   
/////////////////////////////////////////////////////////////////////////////////////////////////
 
   public boolean isEmpty() {
     return (root.getChildren() == null || root.getChildren().isEmpty())
-        && (pathList == null || pathList.isEmpty());
+        && (pathPatternList == null || pathPatternList.isEmpty());
   }
 
-  /** @return */
-  public List<String> findAllDevicePaths() {
+  public List<String> getAllDevicePatterns() {
     List<String> nodes = new ArrayList<>();
     List<String> pathPatternList = new ArrayList<>();
-    findAllDevicePaths(root, nodes, pathPatternList);
+    searchDevicePattern(root, nodes, pathPatternList);
     return pathPatternList;
   }
 
-  /** @return */
-  public List<PartialPath> splitToPathList() {
-    List<PartialPath> result = new ArrayList<>();
-    Deque<String> ancestors = new ArrayDeque<>();
-    searchFullPath(root, ancestors, result);
-    return result;
-  }
-
-  /** @return */
-  public PathPatternTree findOverlappedPattern(PartialPath pattern) {
-    PathPatternTree patternTree = new PathPatternTree();
-    for (PartialPath pathPattern : findOverlappedPaths(pattern)) {
-      patternTree.appendPathPattern(pathPattern);
-    }
-    return patternTree;
-  }
-
-  private void findAllDevicePaths(
+  private void searchDevicePattern(
       PathPatternNode curNode, List<String> nodes, List<String> 
pathPatternList) {
     nodes.add(curNode.getName());
     if (curNode.isLeaf()) {
       if (!curNode.getName().equals("**")) {
-        pathPatternList.add(parseNodesToString(nodes.subList(0, nodes.size() - 
1)));
+        pathPatternList.add(convertNodesToString(nodes.subList(0, nodes.size() 
- 1)));
       } else {
-        pathPatternList.add(parseNodesToString(nodes));
+        pathPatternList.add(convertNodesToString(nodes));
       }
       nodes.remove(nodes.size() - 1);
       return;
     }
     if (curNode.isWildcard()) {
-      pathPatternList.add(parseNodesToString(nodes));
+      pathPatternList.add(convertNodesToString(nodes));
       nodes.remove(nodes.size() - 1);
       return;
     }
     for (PathPatternNode childNode : curNode.getChildren().values()) {
-      findAllDevicePaths(childNode, nodes, pathPatternList);
+      searchDevicePattern(childNode, nodes, pathPatternList);
     }
     nodes.remove(nodes.size() - 1);
   }
 
-  private String parseNodesToString(List<String> nodes) {
-    StringBuilder fullPathBuilder = new StringBuilder(nodes.get(0));
-    for (int i = 1; i < nodes.size(); i++) {
-      
fullPathBuilder.append(TsFileConstant.PATH_SEPARATOR).append(nodes.get(i));
-    }
-    return fullPathBuilder.toString();
+  public List<PartialPath> getAllPathPatterns() {
+    List<PartialPath> result = new ArrayList<>();
+    Deque<String> ancestors = new ArrayDeque<>();
+    searchPathPattern(root, ancestors, result);
+    return result;
   }
 
-  private void searchFullPath(
+  private void searchPathPattern(
       PathPatternNode node, Deque<String> ancestors, List<PartialPath> 
fullPaths) {
     if (node.isLeaf()) {
-      fullPaths.add(constructFullPath(node, ancestors));
+      fullPaths.add(convertNodesToPartialPath(node, ancestors));
       return;
     }
 
     ancestors.push(node.getName());
     for (PathPatternNode child : node.getChildren().values()) {
-      searchFullPath(child, ancestors, fullPaths);
+      searchPathPattern(child, ancestors, fullPaths);
     }
     ancestors.pop();
   }
 
-  private PartialPath constructFullPath(PathPatternNode node, Deque<String> 
ancestors) {
-    Iterator<String> iterator = ancestors.descendingIterator();
-    List<String> nodeList = new ArrayList<>(ancestors.size() + 1);
-    while (iterator.hasNext()) {
-      nodeList.add(iterator.next());
-    }
-    nodeList.add(node.getName());
-    return new PartialPath(nodeList.toArray(new String[0]));
-  }
-
-  private List<PartialPath> findOverlappedPaths(PartialPath pattern) {
-    if (pathList.isEmpty()) {
-      pathList = splitToPathList();
+  public List<PartialPath> getOverlappedPathPatterns(PartialPath pattern) {
+    if (pathPatternList.isEmpty()) {
+      pathPatternList = getAllPathPatterns();
     }
 
     List<PartialPath> results = new ArrayList<>();
-    for (PartialPath path : pathList) {
+    for (PartialPath path : pathPatternList) {
       if (pattern.overlapWith(path)) {
         results.add(path);
       }
@@ -229,6 +196,24 @@ public class PathPatternTree {
     return results;
   }
 
+  private String convertNodesToString(List<String> nodes) {
+    StringBuilder fullPathBuilder = new StringBuilder(nodes.get(0));
+    for (int i = 1; i < nodes.size(); i++) {
+      
fullPathBuilder.append(TsFileConstant.PATH_SEPARATOR).append(nodes.get(i));
+    }
+    return fullPathBuilder.toString();
+  }
+
+  private PartialPath convertNodesToPartialPath(PathPatternNode node, 
Deque<String> ancestors) {
+    Iterator<String> iterator = ancestors.descendingIterator();
+    List<String> nodeList = new ArrayList<>(ancestors.size() + 1);
+    while (iterator.hasNext()) {
+      nodeList.add(iterator.next());
+    }
+    nodeList.add(node.getName());
+    return new PartialPath(nodeList.toArray(new String[0]));
+  }
+
   
/////////////////////////////////////////////////////////////////////////////////////////////////
   // serialize & deserialize
   
/////////////////////////////////////////////////////////////////////////////////////////////////
diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/schema/SchemaFetchScanOperator.java
 
b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/schema/SchemaFetchScanOperator.java
index 542d974c5b..282559195f 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/schema/SchemaFetchScanOperator.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/schema/SchemaFetchScanOperator.java
@@ -102,7 +102,7 @@ public class SchemaFetchScanOperator implements 
SourceOperator {
 
   private void fetchSchema() throws MetadataException {
     SchemaTree schemaTree = new SchemaTree();
-    List<PartialPath> partialPathList = patternTree.splitToPathList();
+    List<PartialPath> partialPathList = patternTree.getAllPathPatterns();
     for (PartialPath path : partialPathList) {
       schemaTree.appendMeasurementPaths(schemaRegion.getMeasurementPaths(path, 
false));
     }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ClusterPartitionFetcher.java
 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ClusterPartitionFetcher.java
index 6ca63f54c4..8435e4b457 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ClusterPartitionFetcher.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ClusterPartitionFetcher.java
@@ -108,7 +108,7 @@ public class ClusterPartitionFetcher implements 
IPartitionFetcher {
     try (ConfigNodeClient client =
         
configNodeClientManager.borrowClient(ConfigNodeInfo.partitionRegionId)) {
       patternTree.constructTree();
-      List<String> devicePaths = patternTree.findAllDevicePaths();
+      List<String> devicePaths = patternTree.getAllDevicePatterns();
       Map<String, String> deviceToStorageGroupMap = 
getDeviceToStorageGroup(devicePaths, false);
       SchemaPartition schemaPartition = 
partitionCache.getSchemaPartition(deviceToStorageGroupMap);
       if (null == schemaPartition) {
@@ -132,7 +132,7 @@ public class ClusterPartitionFetcher implements 
IPartitionFetcher {
     try (ConfigNodeClient client =
         
configNodeClientManager.borrowClient(ConfigNodeInfo.partitionRegionId)) {
       patternTree.constructTree();
-      List<String> devicePaths = patternTree.findAllDevicePaths();
+      List<String> devicePaths = patternTree.getAllDevicePatterns();
       Map<String, String> deviceToStorageGroupMap = 
getDeviceToStorageGroup(devicePaths, true);
       SchemaPartition schemaPartition = 
partitionCache.getSchemaPartition(deviceToStorageGroupMap);
       if (null == schemaPartition) {
diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/StandaloneSchemaFetcher.java
 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/StandaloneSchemaFetcher.java
index a83d25c484..cc61c86362 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/StandaloneSchemaFetcher.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/StandaloneSchemaFetcher.java
@@ -64,7 +64,7 @@ public class StandaloneSchemaFetcher implements 
ISchemaFetcher {
     patternTree.constructTree();
     Set<String> storageGroupSet = new HashSet<>();
     SchemaTree schemaTree = new SchemaTree();
-    List<PartialPath> partialPathList = patternTree.splitToPathList();
+    List<PartialPath> partialPathList = patternTree.getAllPathPatterns();
     try {
       for (PartialPath path : partialPathList) {
         List<PartialPath> storageGroups = 
localConfigNode.getBelongedStorageGroups(path);
@@ -94,7 +94,7 @@ public class StandaloneSchemaFetcher implements 
ISchemaFetcher {
     patternTree.constructTree();
     Set<String> storageGroupSet = new HashSet<>();
     SchemaTree schemaTree = new SchemaTree();
-    List<PartialPath> partialPathList = patternTree.splitToPathList();
+    List<PartialPath> partialPathList = patternTree.getAllPathPatterns();
     try {
       for (PartialPath path : partialPathList) {
         String storageGroup = 
localConfigNode.getBelongedStorageGroup(path).getFullPath();
diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LogicalPlanBuilder.java
 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LogicalPlanBuilder.java
index a451623307..4514f387ac 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LogicalPlanBuilder.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LogicalPlanBuilder.java
@@ -720,12 +720,15 @@ public class LogicalPlanBuilder {
     for (String storageGroup : storageGroupList) {
       try {
         storageGroupPath = new PartialPath(storageGroup);
+        PathPatternTree overlappedPatternTree = new PathPatternTree();
+        for (PartialPath pathPattern :
+            patternTree.getOverlappedPathPatterns(
+                storageGroupPath.concatNode(MULTI_LEVEL_PATH_WILDCARD))) {
+          overlappedPatternTree.appendPathPattern(pathPattern);
+        }
         this.root.addChild(
             new SchemaFetchScanNode(
-                context.getQueryId().genPlanNodeId(),
-                storageGroupPath,
-                patternTree.findOverlappedPattern(
-                    storageGroupPath.concatNode(MULTI_LEVEL_PATH_WILDCARD))));
+                context.getQueryId().genPlanNodeId(), storageGroupPath, 
overlappedPatternTree));
       } catch (IllegalPathException e) {
         // definitely won't happen
         throw new RuntimeException(e);
diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/internal/SchemaFetchStatement.java
 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/internal/SchemaFetchStatement.java
index 9ab133be35..fde6a01a08 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/internal/SchemaFetchStatement.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/internal/SchemaFetchStatement.java
@@ -59,6 +59,6 @@ public class SchemaFetchStatement extends Statement {
 
   @Override
   public List<PartialPath> getPaths() {
-    return patternTree.splitToPathList();
+    return patternTree.getAllPathPatterns();
   }
 }
diff --git 
a/server/src/test/java/org/apache/iotdb/db/mpp/common/schematree/PathPatternTreeTest.java
 
b/server/src/test/java/org/apache/iotdb/db/mpp/common/schematree/PathPatternTreeTest.java
index ec9c52f550..614430f4fb 100644
--- 
a/server/src/test/java/org/apache/iotdb/db/mpp/common/schematree/PathPatternTreeTest.java
+++ 
b/server/src/test/java/org/apache/iotdb/db/mpp/common/schematree/PathPatternTreeTest.java
@@ -160,7 +160,7 @@ public class PathPatternTreeTest {
             .map(PartialPath::getFullPath)
             .sorted()
             .collect(Collectors.toList()),
-        
patternTree.findAllDevicePaths().stream().sorted().collect(Collectors.toList()));
+        
patternTree.getAllDevicePatterns().stream().sorted().collect(Collectors.toList()));
 
     PublicBAOS outputStream = new PublicBAOS();
     resultPatternTree.serialize(outputStream);
@@ -188,6 +188,6 @@ public class PathPatternTreeTest {
 
     Assert.assertEquals(
         Arrays.asList(new PartialPath("root.sg1.*.t1.s1"), new 
PartialPath("root.sg1.d1.t2.s2")),
-        patternTree.splitToPathList());
+        patternTree.getAllPathPatterns());
   }
 }
diff --git 
a/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/metadata/read/SchemaFetchScanNodeTest.java
 
b/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/metadata/read/SchemaFetchScanNodeTest.java
index 6f254b0275..ea3b5543e6 100644
--- 
a/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/metadata/read/SchemaFetchScanNodeTest.java
+++ 
b/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/metadata/read/SchemaFetchScanNodeTest.java
@@ -45,6 +45,6 @@ public class SchemaFetchScanNodeTest {
     SchemaFetchScanNode recoveredNode = (SchemaFetchScanNode) 
PlanNodeType.deserialize(byteBuffer);
     Assert.assertEquals("root.sg", 
recoveredNode.getStorageGroup().getFullPath());
     Assert.assertEquals(
-        "root.sg.**.*", 
recoveredNode.getPatternTree().splitToPathList().get(0).getFullPath());
+        "root.sg.**.*", 
recoveredNode.getPatternTree().getAllPathPatterns().get(0).getFullPath());
   }
 }

Reply via email to