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

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

commit 7a8ef496f1e9ec9a40402b84ead8804cc455a853
Author: Jinrui.Zhang <[email protected]>
AuthorDate: Tue Apr 12 15:59:01 2022 +0800

    complete with test
---
 .../iotdb/commons/consensus/DataRegionId.java      |  4 ++
 .../iotdb/commons/consensus/PartitionRegionId.java |  4 ++
 .../iotdb/commons/consensus/SchemaRegionId.java    |  4 ++
 .../sql/planner/plan/node/PlanGraphPrinter.java    | 44 ++++++++++++++++++++++
 .../planner/plan/node/process/ExchangeNode.java    |  6 +++
 .../planner/plan/node/sink/FragmentSinkNode.java   |  6 +++
 .../db/mpp/sql/plan/DistributionPlannerTest.java   |  3 +-
 7 files changed, 69 insertions(+), 2 deletions(-)

diff --git 
a/node-commons/src/main/java/org/apache/iotdb/commons/consensus/DataRegionId.java
 
b/node-commons/src/main/java/org/apache/iotdb/commons/consensus/DataRegionId.java
index 3085541766..6be4f73933 100644
--- 
a/node-commons/src/main/java/org/apache/iotdb/commons/consensus/DataRegionId.java
+++ 
b/node-commons/src/main/java/org/apache/iotdb/commons/consensus/DataRegionId.java
@@ -75,4 +75,8 @@ public class DataRegionId implements ConsensusGroupId {
   public int hashCode() {
     return Objects.hash(id, GroupType.DataRegion);
   }
+
+  public String toString() {
+    return String.format("%s-%d", getType(), id);
+  }
 }
diff --git 
a/node-commons/src/main/java/org/apache/iotdb/commons/consensus/PartitionRegionId.java
 
b/node-commons/src/main/java/org/apache/iotdb/commons/consensus/PartitionRegionId.java
index 86f5fe963c..c0e6450fd6 100644
--- 
a/node-commons/src/main/java/org/apache/iotdb/commons/consensus/PartitionRegionId.java
+++ 
b/node-commons/src/main/java/org/apache/iotdb/commons/consensus/PartitionRegionId.java
@@ -75,4 +75,8 @@ public class PartitionRegionId implements ConsensusGroupId {
   public int hashCode() {
     return Objects.hash(id, GroupType.PartitionRegion);
   }
+
+  public String toString() {
+    return String.format("%s-%d", getType(), id);
+  }
 }
diff --git 
a/node-commons/src/main/java/org/apache/iotdb/commons/consensus/SchemaRegionId.java
 
b/node-commons/src/main/java/org/apache/iotdb/commons/consensus/SchemaRegionId.java
index a42ddf3ad0..188f82070d 100644
--- 
a/node-commons/src/main/java/org/apache/iotdb/commons/consensus/SchemaRegionId.java
+++ 
b/node-commons/src/main/java/org/apache/iotdb/commons/consensus/SchemaRegionId.java
@@ -75,4 +75,8 @@ public class SchemaRegionId implements ConsensusGroupId {
   public int hashCode() {
     return Objects.hash(id, GroupType.SchemaRegion);
   }
+
+  public String toString() {
+    return String.format("%s-%d", getType(), id);
+  }
 }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/PlanGraphPrinter.java
 
b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/PlanGraphPrinter.java
index 7010a58836..660f51d1e9 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/PlanGraphPrinter.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/PlanGraphPrinter.java
@@ -20,6 +20,11 @@
 package org.apache.iotdb.db.mpp.sql.planner.plan.node;
 
 import org.apache.commons.lang3.Validate;
+import org.apache.iotdb.db.mpp.sql.planner.plan.node.process.ExchangeNode;
+import org.apache.iotdb.db.mpp.sql.planner.plan.node.process.LimitNode;
+import org.apache.iotdb.db.mpp.sql.planner.plan.node.process.TimeJoinNode;
+import org.apache.iotdb.db.mpp.sql.planner.plan.node.sink.FragmentSinkNode;
+import org.apache.iotdb.db.mpp.sql.planner.plan.node.source.SeriesScanNode;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -49,6 +54,45 @@ public class PlanGraphPrinter extends 
PlanVisitor<List<String>, PlanGraphPrinter
     return render(node, boxValue, context);
   }
 
+  @Override
+  public List<String> visitSeriesScan(SeriesScanNode node, GraphContext 
context) {
+    List<String> boxValue = new ArrayList<>();
+    boxValue.add(String.format("SeriesScanNode-%s", 
node.getPlanNodeId().getId()));
+    boxValue.add(String.format("Series: %s", node.getSeriesPath()));
+    boxValue.add(String.format("Region: %s", 
node.getDataRegionReplicaSet().getId()));
+    return render(node, boxValue, context);
+  }
+
+  @Override
+  public List<String> visitExchange(ExchangeNode node, GraphContext context) {
+    List<String> boxValue = new ArrayList<>();
+    boxValue.add(String.format("ExchangeNode-%s", 
node.getPlanNodeId().getId()));
+    return render(node, boxValue, context);
+  }
+
+  @Override
+  public List<String> visitTimeJoin(TimeJoinNode node, GraphContext context) {
+    List<String> boxValue = new ArrayList<>();
+    boxValue.add(String.format("TimeJoinNode-%s", 
node.getPlanNodeId().getId()));
+    return render(node, boxValue, context);
+  }
+
+  @Override
+  public List<String> visitLimit(LimitNode node, GraphContext context) {
+    List<String> boxValue = new ArrayList<>();
+    boxValue.add(String.format("Limit-%s", node.getPlanNodeId().getId()));
+    boxValue.add(String.format("Count: %d", node.getLimit()));
+    return render(node, boxValue, context);
+  }
+
+  @Override
+  public List<String> visitFragmentSink(FragmentSinkNode node, GraphContext 
context) {
+    List<String> boxValue = new ArrayList<>();
+    boxValue.add(String.format("FragmentSinkNode-%s", 
node.getPlanNodeId().getId()));
+    boxValue.add(String.format("Destination: %s", 
node.getDownStreamPlanNodeId()));
+    return render(node, boxValue, context);
+  }
+
   private List<String> render(PlanNode node, List<String> nodeBoxString, 
GraphContext context) {
     Box box = new Box(nodeBoxString);
     List<List<String>> children = new ArrayList<>();
diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/ExchangeNode.java
 
b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/ExchangeNode.java
index fc408b5623..7b6753df24 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/ExchangeNode.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/ExchangeNode.java
@@ -25,6 +25,7 @@ import org.apache.iotdb.db.mpp.sql.planner.plan.PlanFragment;
 import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanNode;
 import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanNodeId;
 import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanNodeType;
+import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanVisitor;
 import org.apache.iotdb.db.mpp.sql.planner.plan.node.sink.FragmentSinkNode;
 import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
 
@@ -156,6 +157,11 @@ public class ExchangeNode extends PlanNode {
     return upstreamPlanNodeId;
   }
 
+  @Override
+  public <R, C> R accept(PlanVisitor<R, C> visitor, C context) {
+    return visitor.visitExchange(this, context);
+  }
+
   @Override
   public boolean equals(Object o) {
     if (this == o) {
diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/sink/FragmentSinkNode.java
 
b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/sink/FragmentSinkNode.java
index 3c8f49637c..1f2ba29276 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/sink/FragmentSinkNode.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/sink/FragmentSinkNode.java
@@ -23,6 +23,7 @@ import org.apache.iotdb.db.mpp.common.FragmentInstanceId;
 import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanNode;
 import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanNodeId;
 import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanNodeType;
+import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanVisitor;
 import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
 
 import com.google.common.collect.ImmutableList;
@@ -149,6 +150,11 @@ public class FragmentSinkNode extends SinkNode {
     return downStreamPlanNodeId;
   }
 
+  @Override
+  public <R, C> R accept(PlanVisitor<R, C> visitor, C context) {
+    return visitor.visitFragmentSink(this, context);
+  }
+
   @Override
   public boolean equals(Object o) {
     if (this == o) {
diff --git 
a/server/src/test/java/org/apache/iotdb/db/mpp/sql/plan/DistributionPlannerTest.java
 
b/server/src/test/java/org/apache/iotdb/db/mpp/sql/plan/DistributionPlannerTest.java
index 24b194e3b2..f68f1f8c36 100644
--- 
a/server/src/test/java/org/apache/iotdb/db/mpp/sql/plan/DistributionPlannerTest.java
+++ 
b/server/src/test/java/org/apache/iotdb/db/mpp/sql/plan/DistributionPlannerTest.java
@@ -34,6 +34,7 @@ import org.apache.iotdb.db.mpp.sql.analyze.Analysis;
 import org.apache.iotdb.db.mpp.sql.analyze.QueryType;
 import org.apache.iotdb.db.mpp.sql.planner.DistributionPlanner;
 import org.apache.iotdb.db.mpp.sql.planner.plan.DistributedQueryPlan;
+import org.apache.iotdb.db.mpp.sql.planner.plan.FragmentInstance;
 import org.apache.iotdb.db.mpp.sql.planner.plan.LogicalQueryPlan;
 import org.apache.iotdb.db.mpp.sql.planner.plan.SubPlan;
 import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanGraphPrinter;
@@ -161,7 +162,6 @@ public class DistributionPlannerTest {
         new DistributionPlanner(analysis, new LogicalQueryPlan(context, root));
     PlanNode rootAfterRewrite = planner.rewriteSource();
     PlanNode rootWithExchange = planner.addExchangeNode(rootAfterRewrite);
-    PlanGraphPrinter.print(rootWithExchange);
     SubPlan subPlan = planner.splitFragment(rootWithExchange);
     assertEquals(subPlan.getChildren().size(), 2);
   }
@@ -199,7 +199,6 @@ public class DistributionPlannerTest {
     DistributionPlanner planner =
         new DistributionPlanner(analysis, new LogicalQueryPlan(context, root));
     DistributedQueryPlan plan = planner.planFragments();
-    plan.getInstances().forEach(System.out::println);
     assertEquals(3, plan.getInstances().size());
   }
 

Reply via email to