From c6fbe1a2006a924c8100fd51e4a6e6628d84a719 Mon Sep 17 00:00:00 2001 From: obdev Date: Fri, 9 Feb 2024 12:11:35 +0000 Subject: [PATCH] add refreshing mview flag to session info --- deps/oblib/src/lib/mysqlclient/ob_mysql_proxy.h | 6 +++++- src/sql/optimizer/ob_optimizer.cpp | 2 +- src/storage/mview/ob_mview_transaction.cpp | 2 ++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/deps/oblib/src/lib/mysqlclient/ob_mysql_proxy.h b/deps/oblib/src/lib/mysqlclient/ob_mysql_proxy.h index df38bac315..17faad50a0 100644 --- a/deps/oblib/src/lib/mysqlclient/ob_mysql_proxy.h +++ b/deps/oblib/src/lib/mysqlclient/ob_mysql_proxy.h @@ -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; }; }; diff --git a/src/sql/optimizer/ob_optimizer.cpp b/src/sql/optimizer/ob_optimizer.cpp index ce1a9c662b..a3ebd36970 100644 --- a/src/sql/optimizer/ob_optimizer.cpp +++ b/src/sql/optimizer/ob_optimizer.cpp @@ -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))) { diff --git a/src/storage/mview/ob_mview_transaction.cpp b/src/storage/mview/ob_mview_transaction.cpp index 61cf426e92..b6f27ab4c2 100644 --- a/src/storage/mview/ob_mview_transaction.cpp +++ b/src/storage/mview/ob_mview_transaction.cpp @@ -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;