924060929 commented on code in PR #67177:
URL: https://github.com/apache/doris/pull/67177#discussion_r3870549089


##########
fe/fe-core/src/main/java/org/apache/doris/planner/PlanNode.java:
##########
@@ -1100,6 +1103,18 @@ protected Pair<PlanNode, LocalExchangeType> 
enforceRequire(
         Pair<PlanNode, LocalExchangeType> childOutput =
                 child.enforceAndDeriveLocalExchange(translatorContext, this, 
require);
 
+        // A serial consumer must not implicitly reduce a non-serial subtree 
to one pipeline
+        // task. Besides losing parallelism, that can make a remote Exchange 
expose fewer
+        // receiver tasks than FE addresses. Keep the subtree parallel and 
make the N-to-one
+        // transition explicit. PASS_TO_ONE keeps every upstream receiver task 
alive and
+        // funnels their output into the serial downstream pipeline's only 
task.
+        if (passToOneAtSerialBoundary && childOutput.second != 
LocalExchangeType.PASS_TO_ONE) {

Review Comment:
   Fixed in 32e2547374a. I reproduced the failure first: 
`LocalShuffleNodeCoverageTest` had 1 failure because the mock attached 
`useSerialSource=true` only to the serial Sort node, while its scan child had 
no fragment. In production, `PlanFragment.setPlanRoot()` recursively assigns 
the same fragment to every node below the root until an Exchange boundary, so 
the fixture created a parallel-to-serial boundary that cannot exist there. The 
test now assigns the same fragment to both nodes. I also wired the ordered 
analytic fixture the same way and assert its real `PASSTHROUGH` boundary. 
Verified `LocalShuffleNodeCoverageTest` (29/29) and `LocalExchangePlannerTest` 
(34/34).



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to