From 0f342a5f1e3461e19e9fcbc357be99c2f75f2805 Mon Sep 17 00:00:00 2001 From: obdev Date: Thu, 23 Mar 2023 07:15:38 +0000 Subject: [PATCH] Fix: sys_var plan cache not set --- src/sql/session/ob_basic_session_info.cpp | 19 +++++++++++++++++-- src/sql/session/ob_basic_session_info.h | 2 +- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/sql/session/ob_basic_session_info.cpp b/src/sql/session/ob_basic_session_info.cpp index 4baadf0b32..0ce1c09815 100644 --- a/src/sql/session/ob_basic_session_info.cpp +++ b/src/sql/session/ob_basic_session_info.cpp @@ -3719,6 +3719,7 @@ int ObBasicSessionInfo::deserialize_sync_sys_vars(int64_t &deserialize_sys_var_c LOG_DEBUG("total des sys vars", K(deserialize_sys_var_count)); const bool check_timezone_valid = false; SysVarIncInfo tmp_sys_var_inc_info; + bool is_influence_plan_cache_sys_var = false; for (int64_t i = 0; OB_SUCC(ret) && i < deserialize_sys_var_count; ++i) { ObObj tmp_val; ObBasicSysVar *sys_var = NULL; @@ -3758,6 +3759,9 @@ int ObBasicSessionInfo::deserialize_sync_sys_vars(int64_t &deserialize_sys_var_c } else if (OB_FAIL(process_session_variable(sys_var_id, sys_var->get_value(), check_timezone_valid))) { LOG_ERROR("process system variable error", K(ret), K(*sys_var)); + } else if (sys_var->is_influence_plan() + && FALSE_IT(is_influence_plan_cache_sys_var = true)) { + // do nothing. } else { LOG_TRACE("deserialize sync sys var", K(sys_var_id), K(*sys_var), K(sessid_), K(proxy_sessid_)); @@ -3768,7 +3772,8 @@ int ObBasicSessionInfo::deserialize_sync_sys_vars(int64_t &deserialize_sys_var_c } } if (OB_SUCC(ret)) { - if (OB_FAIL(sync_default_sys_vars(sys_var_inc_info_, tmp_sys_var_inc_info))) { + if (OB_FAIL(sync_default_sys_vars(sys_var_inc_info_, tmp_sys_var_inc_info, + is_influence_plan_cache_sys_var))) { LOG_WARN("fail to sync default sys vars",K(ret)); } else if (OB_FAIL(sys_var_inc_info_.assign(tmp_sys_var_inc_info))) { LOG_WARN("fail to assign sys var delta info",K(ret)); @@ -3776,6 +3781,12 @@ int ObBasicSessionInfo::deserialize_sync_sys_vars(int64_t &deserialize_sys_var_c //do nothing. } } + if (OB_SUCC(ret)) { + if (is_influence_plan_cache_sys_var && OB_FAIL(gen_sys_var_in_pc_str())) { + LOG_ERROR("fail to gen sys var in pc str", K(ret)); + } + } + LOG_TRACE("after deserialize sync sys vars", "inc var ids", sys_var_inc_info_.get_all_sys_var_ids(), K(sessid_), K(proxy_sessid_)); @@ -3785,7 +3796,8 @@ int ObBasicSessionInfo::deserialize_sync_sys_vars(int64_t &deserialize_sys_var_c // Deserialization scenario, synchronization of default system variables int ObBasicSessionInfo::sync_default_sys_vars(SysVarIncInfo sys_var_inc_info_, - SysVarIncInfo tmp_sys_var_inc_info) + SysVarIncInfo tmp_sys_var_inc_info, + bool &is_influence_plan_cache_sys_var) { int ret = OB_SUCCESS; const ObIArray &ids = sys_var_inc_info_.get_all_sys_var_ids(); @@ -3810,6 +3822,9 @@ int ObBasicSessionInfo::sync_default_sys_vars(SysVarIncInfo sys_var_inc_info_, } else if (OB_FAIL(process_session_variable(sys_var_id, sys_vars_[store_idx]->get_value(), false))) { LOG_WARN("process system variable error", K(ret), K(sys_var_id)); + } else if (sys_var->is_influence_plan() + && FALSE_IT(is_influence_plan_cache_sys_var = true)) { + // do nothing. } else { LOG_TRACE("sync sys var set default value", K(sys_var_id), K(sessid_), K(proxy_sessid_)); diff --git a/src/sql/session/ob_basic_session_info.h b/src/sql/session/ob_basic_session_info.h index ebbc1dc6a5..b8de34ee86 100644 --- a/src/sql/session/ob_basic_session_info.h +++ b/src/sql/session/ob_basic_session_info.h @@ -1179,7 +1179,7 @@ public: // for SESSION_SYNC_SYS_VAR serialize and deserialize. int serialize_sync_sys_vars(common::ObIArray &sys_var_delta_ids, char *buf, const int64_t &buf_len, int64_t &pos); int deserialize_sync_sys_vars(int64_t &deserialize_sys_var_count, const char *buf, const int64_t &data_len, int64_t &pos); - int sync_default_sys_vars(SysVarIncInfo sys_var_inc_info_, SysVarIncInfo tmp_sys_var_inc_info); + int sync_default_sys_vars(SysVarIncInfo sys_var_inc_info_, SysVarIncInfo tmp_sys_var_inc_info, bool &is_influence_plan_cache_sys_var); int get_sync_sys_vars(common::ObIArray &sys_var_delta_ids) const; int get_sync_sys_vars_size(common::ObIArray &sys_var_delta_ids, int64_t &len) const; bool is_sync_sys_var(share::ObSysVarClassType sys_var_id) const; -- GitLab