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