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