From 3aecb7da099be254617da1a2615db07963b51f80 Mon Sep 17 00:00:00 2001 From: obdev Date: Wed, 20 Nov 2024 14:45:11 +0000 Subject: [PATCH] Fix core of missing reset nlj's server_list_ to random in px random shuffle scenario --- src/sql/optimizer/ob_join_order.cpp | 13 +++++++++++-- src/sql/optimizer/ob_log_subplan_filter.cpp | 8 ++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/sql/optimizer/ob_join_order.cpp b/src/sql/optimizer/ob_join_order.cpp index dacfc6e70..5cc784223 100755 --- a/src/sql/optimizer/ob_join_order.cpp +++ b/src/sql/optimizer/ob_join_order.cpp @@ -7490,13 +7490,22 @@ int JoinPath::compute_join_path_parallel_and_server_info(ObOptimizerContext *opt if (OB_FAIL(server_list.push_back(local_server_addr))) { LOG_WARN("failed to assign server list", K(ret)); } - } else if (DistAlgo::DIST_NONE_ALL == join_dist_algo || - DistAlgo::DIST_RANDOM_ALL == join_dist_algo) { + } else if (DistAlgo::DIST_NONE_ALL == join_dist_algo) { parallel = left_path->parallel_; server_cnt = left_path->server_cnt_; if (OB_FAIL(server_list.assign(left_path->server_list_))) { LOG_WARN("failed to assign server list", K(ret)); } + } else if (DistAlgo::DIST_RANDOM_ALL == join_dist_algo) { + common::ObAddr all_server_list; + // like hash_hash, a special ALL server list indicating we would use all servers of this sql relate + all_server_list.set_max(); + if (OB_FAIL(server_list.push_back(all_server_list))) { + LOG_WARN("failed to assign all server list", K(ret)); + } else { + parallel = left_path->parallel_; + server_cnt = left_path->server_cnt_; + } } else if (DistAlgo::DIST_ALL_NONE == join_dist_algo) { parallel = right_path->parallel_; server_cnt = right_path->server_cnt_; diff --git a/src/sql/optimizer/ob_log_subplan_filter.cpp b/src/sql/optimizer/ob_log_subplan_filter.cpp index 917a43e4e..2be9d2d62 100755 --- a/src/sql/optimizer/ob_log_subplan_filter.cpp +++ b/src/sql/optimizer/ob_log_subplan_filter.cpp @@ -821,6 +821,14 @@ int ObLogSubPlanFilter::compute_op_parallel_and_server_info() int ret = OB_SUCCESS; if (OB_FAIL(compute_normal_multi_child_parallel_and_server_info())) { LOG_WARN("failed to compute multi child parallel and server info", K(ret), K(get_distributed_algo())); + } else if (dist_algo_ == DistAlgo::DIST_RANDOM_ALL) { + get_server_list().reuse(); + common::ObAddr all_server_list; + // like hash_hash, a special ALL server list indicating we would use all servers of this sql relate + all_server_list.set_max(); + if (OB_FAIL(get_server_list().push_back(all_server_list))) { + LOG_WARN("failed to assign all server list", K(ret)); + } } return ret; }