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