diff --git a/src/sql/optimizer/ob_log_plan.cpp b/src/sql/optimizer/ob_log_plan.cpp index 65834abcc..50d419238 100644 --- a/src/sql/optimizer/ob_log_plan.cpp +++ b/src/sql/optimizer/ob_log_plan.cpp @@ -864,7 +864,8 @@ int ObLogPlan::weak_select_replicas(const ObAddr &local_server, } else if (OB_FAIL(route_policy.calculate_replica_priority(local_server, phy_part_loc_info.get_ls_id(), replica_array, - route_policy_ctx))) { + route_policy_ctx, + is_inner_table(phy_tbl_loc_info->get_ref_table_id())))) { LOG_WARN("fail to calculate replica priority", K(replica_array), K(route_policy_ctx), K(ret)); } else if (OB_FAIL(route_policy.select_replica_with_priority(route_policy_ctx, replica_array, phy_part_loc_info))) { LOG_WARN("fail to select replica", K(replica_array), K(ret)); diff --git a/src/sql/optimizer/ob_route_policy.cpp b/src/sql/optimizer/ob_route_policy.cpp index cf0d48fe5..6f7377774 100644 --- a/src/sql/optimizer/ob_route_policy.cpp +++ b/src/sql/optimizer/ob_route_policy.cpp @@ -123,7 +123,8 @@ int ObRoutePolicy::filter_replica(const ObAddr &local_server, int ObRoutePolicy::calculate_replica_priority(const ObAddr &local_server, const ObLSID &ls_id, ObIArray& candi_replicas, - ObRoutePolicyCtx &ctx) + ObRoutePolicyCtx &ctx, + bool is_inner_table) { int ret = OB_SUCCESS; if (OB_UNLIKELY(!is_inited_)) { @@ -133,6 +134,7 @@ int ObRoutePolicy::calculate_replica_priority(const ObAddr &local_server, ObRoutePolicyType policy_type = get_calc_route_policy_type(ctx); if (1 == candi_replicas.count() && policy_type == COLUMN_STORE_ONLY && + !is_inner_table && !ObReplicaTypeCheck::is_columnstore_replica(candi_replicas.at(0).get_replica_type())) { ret = OB_NO_REPLICA_VALID; LOG_USER_ERROR(OB_NO_REPLICA_VALID); diff --git a/src/sql/optimizer/ob_route_policy.h b/src/sql/optimizer/ob_route_policy.h index 4ae1d7dd0..c1f7621e4 100644 --- a/src/sql/optimizer/ob_route_policy.h +++ b/src/sql/optimizer/ob_route_policy.h @@ -178,7 +178,8 @@ public: int calculate_replica_priority(const ObAddr &local_server, const share::ObLSID &ls_id, common::ObIArray& candi_replicas, - ObRoutePolicyCtx &ctx); + ObRoutePolicyCtx &ctx, + bool is_inner_table = false); int init_candidate_replicas(common::ObIArray &candi_replicas); int select_replica_with_priority(const ObRoutePolicyCtx &route_policy_ctx, const common::ObIArray &replica_array,