add refreshing mview flag to session info

This commit is contained in:
obdev
2024-02-09 12:11:35 +00:00
committed by ob-robot
parent c001170bde
commit c6fbe1a200
3 changed files with 8 additions and 2 deletions

View File

@ -51,6 +51,8 @@ public:
bool is_ddl_check_default_value() const { return is_ddl_check_default_value_bit_; }
void set_mview_complete_refresh(const bool flag) { is_mview_complete_refresh_ = flag; }
bool is_mview_complete_refresh() const { return is_mview_complete_refresh_; }
void set_refreshing_mview(const bool flag) { is_refreshing_mview_ = flag; }
bool is_refreshing_mview() const { return is_refreshing_mview_; }
TO_STRING_KV(K_(ddl_info));
OB_UNIS_VERSION(1);
public:
@ -59,7 +61,8 @@ public:
static const int64_t IS_HEAP_TABLE_DDL_BIT = 1;
static const int64_t IS_DDL_CHECK_DEFAULT_VALUE_BIT = 1;
static const int64_t IS_MVIEW_COMPLETE_REFRESH_BIT = 1;
static const int64_t RESERVED_BIT = sizeof(int64_t) - IS_DDL_BIT - 2 * IS_TABLE_HIDDEN_BIT - IS_HEAP_TABLE_DDL_BIT - IS_DDL_CHECK_DEFAULT_VALUE_BIT - IS_MVIEW_COMPLETE_REFRESH_BIT;
static const int64_t IS_REFRESHING_MVIEW_BIT = 1;
static const int64_t RESERVED_BIT = sizeof(int64_t) - IS_DDL_BIT - 2 * IS_TABLE_HIDDEN_BIT - IS_HEAP_TABLE_DDL_BIT - IS_DDL_CHECK_DEFAULT_VALUE_BIT - IS_MVIEW_COMPLETE_REFRESH_BIT - IS_REFRESHING_MVIEW_BIT;
union {
uint64_t ddl_info_;
struct {
@ -69,6 +72,7 @@ public:
uint64_t is_heap_table_ddl_: IS_HEAP_TABLE_DDL_BIT;
uint64_t is_ddl_check_default_value_bit_ : IS_DDL_CHECK_DEFAULT_VALUE_BIT;
uint64_t is_mview_complete_refresh_: IS_MVIEW_COMPLETE_REFRESH_BIT;
uint64_t is_refreshing_mview_: IS_REFRESHING_MVIEW_BIT;
uint64_t reserved_bit : RESERVED_BIT;
};
};

View File

@ -281,7 +281,7 @@ int ObOptimizer::get_session_parallel_info(int64_t &force_parallel_dop,
if (OB_ISNULL(session_info = ctx_.get_session_info())) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("get unexpected null", K(session_info), K(ret));
} else if (!session_info->is_user_session()) {
} else if (!session_info->is_user_session() && !session_info->get_ddl_info().is_refreshing_mview()) {
// sys var是依赖于schema的方式实现的,获得最新的sys var需要通过inner SQL的方式,会产生循环依赖
// 因此inner SQL情况下不考虑系统变量`SYS_VAR__ENABLE_PARALLEL_QUERY`的值
} else if (OB_FAIL(session_info->get_parallel_degree_policy_enable_auto_dop(enable_auto_dop))) {

View File

@ -63,6 +63,7 @@ int ObMViewTransaction::ObSessionParamSaved::save(ObSQLSessionInfo *session_info
autocommit_ = autocommit;
session_info->set_inner_session();
session_info->set_autocommit(false);
session_info_->get_ddl_info().set_refreshing_mview(true);
}
}
return ret;
@ -78,6 +79,7 @@ int ObMViewTransaction::ObSessionParamSaved::restore()
session_info_->set_user_session();
}
session_info_->set_autocommit(autocommit_);
session_info_->get_ddl_info().set_refreshing_mview(false);
session_info_ = nullptr;
}
return ret;