avamingli commented on code in PR #1311:
URL: https://github.com/apache/cloudberry/pull/1311#discussion_r2339100408


##########
src/backend/optimizer/path/allpaths.c:
##########
@@ -1839,8 +1839,38 @@ add_paths_to_append_rel(PlannerInfo *root, RelOptInfo 
*rel,
                         * estimate.
                         */
                        partial_rows = appendpath->path.rows;
-                       /* Add the path if subpath has not Motion.*/
-                       if (appendpath->path.parallel_safe && 
appendpath->path.motionHazard == false)
+
+                       if (enable_parallel_append)
+                       {
+                               /* Add the path if subpath didn't encounter 
motion hazard.*/
+                               if (appendpath->path.parallel_safe && 
(appendpath->path.motionHazard == false))
+                                       add_partial_path(rel, (Path 
*)appendpath);
+                               else
+                               {
+                                       /*
+                                        * CBDB_PARALLEL:
+                                        * When a parallel-aware Append is 
dropped due to motion hazard,
+                                        * we attempt a second pass using 
parallel-oblivious Append.
+                                        *
+                                        * This approach is feasible in CBDB 
because:
+                                        * 1. All Motions in a parallel plan 
handle tuples individually
+                                        * 2. Parallel Append might miss 
executing slices containing Motions,
+                                        *    whereas regular Append does not 
have this problem
+                                        *
+                                        * This behavior is conceptually 
similar to UPSTREAM's Append node
+                                        * with partial paths implementation.
+                                        */
+                                       appendpath = create_append_path(root, 
rel, NIL, partial_subpaths,
+                                                                               
                        NIL, NULL, parallel_workers,
+                                                                               
                        false /*enable_parallel_append*/,
+                                                                               
                        -1);
+                                       partial_rows = appendpath->path.rows;

Review Comment:
   We try a parallel-oblivious approach for parallel append  when 
parallel-aware append is unsafe to use. 
   The previous partial_rows calculations were designed for a parallel-aware 
append path. If the parallel-aware append path is deemed safe, we can directly 
add the path without adjustments. 
   Otherwise, we need to correct the partial_rows values accordingly.



-- 
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