fix bug: thread count in compile and execute time not consistent
This commit is contained in:
@ -518,6 +518,8 @@ int ObDfoMgr::do_split(ObExecContext &exec_ctx,
|
||||
gi_spec->bf_info_.p2p_dh_id_,
|
||||
node))) {
|
||||
LOG_WARN("fail to set p2p dh id to map", K(ret));
|
||||
} else if (OB_FAIL(px_coord_info.rf_dpd_info_.rf_use_ops_.push_back(phy_op))) {
|
||||
LOG_WARN("failed to push back parition filter gi op");
|
||||
} else {
|
||||
parent_dfo->set_need_p2p_info(true);
|
||||
}
|
||||
|
||||
@ -482,7 +482,7 @@ OB_DEF_SERIALIZE_SIZE(ObPxBloomFilter)
|
||||
int ObPxBFStaticInfo::init(int64_t tenant_id, int64_t filter_id,
|
||||
int64_t server_id, bool is_shared,
|
||||
bool skip_subpart, int64_t p2p_dh_id,
|
||||
bool is_shuffle)
|
||||
bool is_shuffle, ObLogJoinFilter *log_join_filter_create_op)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
if (is_inited_){
|
||||
@ -496,6 +496,7 @@ int ObPxBFStaticInfo::init(int64_t tenant_id, int64_t filter_id,
|
||||
skip_subpart_ = skip_subpart;
|
||||
p2p_dh_id_ = p2p_dh_id;
|
||||
is_shuffle_ = is_shuffle;
|
||||
log_join_filter_create_op_ = log_join_filter_create_op;
|
||||
is_inited_ = true;
|
||||
}
|
||||
return ret;
|
||||
|
||||
@ -130,6 +130,8 @@ public:
|
||||
DISALLOW_COPY_AND_ASSIGN(ObPxBloomFilter);
|
||||
};
|
||||
|
||||
class ObLogJoinFilter;
|
||||
|
||||
struct ObPxBFStaticInfo
|
||||
{
|
||||
OB_UNIS_VERSION(1);
|
||||
@ -138,12 +140,12 @@ public:
|
||||
: is_inited_(false), tenant_id_(common::OB_INVALID_TENANT_ID),
|
||||
filter_id_(common::OB_INVALID_ID), server_id_(common::OB_INVALID_ID),
|
||||
is_shared_(false), skip_subpart_(false),
|
||||
p2p_dh_id_(OB_INVALID_ID), is_shuffle_(false)
|
||||
p2p_dh_id_(OB_INVALID_ID), is_shuffle_(false), log_join_filter_create_op_(nullptr)
|
||||
{}
|
||||
int init(int64_t tenant_id, int64_t filter_id,
|
||||
int64_t server_id, bool is_shared,
|
||||
bool skip_subpart, int64_t p2p_dh_id,
|
||||
bool is_shuffle);
|
||||
bool is_shuffle, ObLogJoinFilter *log_join_filter_create_op);
|
||||
bool is_inited_;
|
||||
int64_t tenant_id_;
|
||||
int64_t filter_id_;
|
||||
@ -155,6 +157,7 @@ public:
|
||||
TO_STRING_KV(K(is_inited_), K(tenant_id_), K(filter_id_),
|
||||
K(server_id_), K(is_shared_), K(skip_subpart_),
|
||||
K(is_shuffle_), K(p2p_dh_id_));
|
||||
ObLogJoinFilter *log_join_filter_create_op_; // not need to serialize, only used in optimizor
|
||||
};
|
||||
|
||||
class ObPXBloomFilterHashWrapper
|
||||
|
||||
@ -727,11 +727,20 @@ int RuntimeFilterDependencyInfo::describe_dependency(ObDfo *root_dfo)
|
||||
for (int64_t i = 0; i < rf_create_ops_.count() && OB_SUCC(ret); ++i) {
|
||||
const ObJoinFilterSpec *create_op = static_cast<const ObJoinFilterSpec *>(rf_create_ops_.at(i));
|
||||
for (int64_t j = 0; j < rf_use_ops_.count() && OB_SUCC(ret); ++j) {
|
||||
const ObJoinFilterSpec *use_op = static_cast<const ObJoinFilterSpec *>(rf_use_ops_.at(j));
|
||||
if (create_op->get_filter_id() == use_op->get_filter_id()) {
|
||||
int64_t use_filter_id = common::OB_INVALID_ID;
|
||||
if (IS_PX_GI(rf_use_ops_.at(j)->get_type())) {
|
||||
const ObGranuleIteratorSpec *use_op =
|
||||
static_cast<const ObGranuleIteratorSpec *>(rf_use_ops_.at(j));
|
||||
use_filter_id = use_op->bf_info_.filter_id_;
|
||||
} else {
|
||||
const ObJoinFilterSpec *use_op = static_cast<const ObJoinFilterSpec *>(rf_use_ops_.at(j));
|
||||
use_filter_id = use_op->get_filter_id();
|
||||
}
|
||||
if (create_op->get_filter_id() == use_filter_id) {
|
||||
const ObOpSpec *ancestor_op = nullptr;
|
||||
ObDfo *op_dfo = nullptr;;
|
||||
if (OB_FAIL(LowestCommonAncestorFinder::find_op_common_ancestor(create_op, use_op, ancestor_op))) {
|
||||
if (OB_FAIL(LowestCommonAncestorFinder::find_op_common_ancestor(
|
||||
create_op, rf_use_ops_.at(j), ancestor_op))) {
|
||||
LOG_WARN("failed to find op common ancestor");
|
||||
} else if (OB_ISNULL(ancestor_op)) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
|
||||
Reference in New Issue
Block a user