Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,23 @@ suite("prune_bucket_with_bucket_shuffle_join") {
set disable_join_reorder=true;
"""

// With enable_nereids_distribute_planner=true the RIGHT OUTER JOIN distribution is
// non-deterministic between BUCKET_SHUFFLE and PARTITIONED. The choice is sticky within
// a connection (so retrying in the same connection can not change it), and both plans are
// correct -- BUCKET_SHUFFLE just saves one exchange. Only run the bucket-shuffle-specific
// checks when the planner actually chose BUCKET_SHUFFLE, otherwise return directly.
String bucketShuffleExplain = null
explain {
sql sqlStr
check { result ->
log.info("Explain result:\n${result}")
bucketShuffleExplain = result
}
}
if (!bucketShuffleExplain.contains("RIGHT OUTER JOIN(BUCKET_SHUFFLE)")) {
return

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When this guard takes the PARTITIONED branch, the suite returns before order_qt_fillup_bucket sqlStr, so the existing -- !fillup_bucket -- block is never compared on exactly the runs this PR is stabilizing. The result check is not bucket-shuffle-specific; it should still execute for both legal distributions, with only the exchange/tablet-pruning assertions skipped.

Suggested change
return
order_qt_fillup_bucket sqlStr
return

}

extractFragment(sqlStr, "RIGHT OUTER JOIN(BUCKET_SHUFFLE)") { exchangeNum ->
assertTrue(exchangeNum == 1)
}
Expand Down
Loading