You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by en...@apache.org on 2023/06/20 06:55:27 UTC
[doris] branch master updated: [fix](nereids) Fix explain graph with CTE #20997
This is an automated email from the ASF dual-hosted git repository.
englefly pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 6b4a9edbbd [fix](nereids) Fix explain graph with CTE #20997
6b4a9edbbd is described below
commit 6b4a9edbbd01877961281b15e6d056bb40083e67
Author: AKIRA <33...@users.noreply.github.com>
AuthorDate: Tue Jun 20 15:55:21 2023 +0900
[fix](nereids) Fix explain graph with CTE #20997
Add support of MultiCastDataSink
---
.../doris/common/profile/PlanTreeBuilder.java | 25 ++++++++++++++--------
.../apache/doris/common/profile/PlanTreeNode.java | 12 ++++++-----
2 files changed, 23 insertions(+), 14 deletions(-)
diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/profile/PlanTreeBuilder.java b/fe/fe-core/src/main/java/org/apache/doris/common/profile/PlanTreeBuilder.java
index eb38be4a07..3cbf37cdca 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/common/profile/PlanTreeBuilder.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/common/profile/PlanTreeBuilder.java
@@ -20,14 +20,17 @@ package org.apache.doris.common.profile;
import org.apache.doris.common.UserException;
import org.apache.doris.planner.DataSink;
import org.apache.doris.planner.ExchangeNode;
+import org.apache.doris.planner.MultiCastDataSink;
import org.apache.doris.planner.PlanFragment;
import org.apache.doris.planner.PlanNode;
import org.apache.doris.planner.PlanNodeId;
import org.apache.doris.thrift.TExplainLevel;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import java.util.List;
+import java.util.stream.Collectors;
public class PlanTreeBuilder {
@@ -64,7 +67,10 @@ public class PlanTreeBuilder {
}
sb.append("\n[Fragment: ").append(fragment.getFragmentSequenceNum()).append("]");
sb.append("\n").append(sink.getExplainString("", TExplainLevel.BRIEF));
- sinkNode = new PlanTreeNode(sink.getExchNodeId(), sb.toString());
+ sinkNode = new PlanTreeNode(
+ sink instanceof MultiCastDataSink ? ((MultiCastDataSink) sink).getDataStreamSinks().stream()
+ .map(s -> s.getExchNodeId()).collect(Collectors.toList())
+ : ImmutableList.of(sink.getExchNodeId()), sb.toString());
if (i == 0) {
// sink of first fragment, set it as tree root
treeRoot = sinkNode;
@@ -87,19 +93,20 @@ public class PlanTreeBuilder {
// This is the result sink, skip it
continue;
}
- PlanNodeId senderId = sender.getId();
- PlanTreeNode exchangeNode = findExchangeNode(senderId);
- if (exchangeNode == null) {
- throw new UserException("Failed to find exchange node for sender id: " + senderId.asInt());
+ List<PlanNodeId> senderIds = sender.getIds();
+ for (PlanNodeId senderId : senderIds) {
+ PlanTreeNode exchangeNode = findExchangeNode(senderId);
+ if (exchangeNode == null) {
+ throw new UserException("Failed to find exchange node for sender id: " + senderId.asInt());
+ }
+ exchangeNode.addChild(sender);
}
-
- exchangeNode.addChild(sender);
}
}
private PlanTreeNode findExchangeNode(PlanNodeId senderId) {
for (PlanTreeNode exchangeNode : exchangeNodes) {
- if (exchangeNode.getId().equals(senderId)) {
+ if (exchangeNode.getIds().stream().anyMatch(senderId::equals)) {
return exchangeNode;
}
}
@@ -107,7 +114,7 @@ public class PlanTreeBuilder {
}
private void buildForPlanNode(PlanNode planNode, PlanTreeNode parent) {
- PlanTreeNode node = new PlanTreeNode(planNode.getId(), planNode.getPlanTreeExplainStr());
+ PlanTreeNode node = new PlanTreeNode(ImmutableList.of(planNode.getId()), planNode.getPlanTreeExplainStr());
if (parent != null) {
parent.addChild(node);
diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/profile/PlanTreeNode.java b/fe/fe-core/src/main/java/org/apache/doris/common/profile/PlanTreeNode.java
index def1976e46..dd9a65db1f 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/common/profile/PlanTreeNode.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/common/profile/PlanTreeNode.java
@@ -20,17 +20,19 @@ package org.apache.doris.common.profile;
import org.apache.doris.common.TreeNode;
import org.apache.doris.planner.PlanNodeId;
+import java.util.List;
+
public class PlanTreeNode extends TreeNode<PlanTreeNode> {
- private PlanNodeId id;
+ private List<PlanNodeId> ids;
private String explainStr;
- public PlanTreeNode(PlanNodeId id, String explainStr) {
- this.id = id;
+ public PlanTreeNode(List<PlanNodeId> ids, String explainStr) {
+ this.ids = ids;
this.explainStr = explainStr;
}
- public PlanNodeId getId() {
- return id;
+ public List<PlanNodeId> getIds() {
+ return ids;
}
public String getExplainStr() {
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org