From 33b1f93501cea00a9cda37a23c6a429c771eef9c Mon Sep 17 00:00:00 2001 From: yaojing624 Date: Thu, 10 Aug 2023 09:48:25 +0000 Subject: [PATCH] Fix: session sync error in upgrade scene --- .../system_variable/ob_system_variable.cpp | 55 +++++++++++++++---- .../ob_system_variable_init.cpp | 24 ++++++++ .../system_variable/ob_system_variable_init.h | 2 + 3 files changed, 70 insertions(+), 11 deletions(-) diff --git a/src/share/system_variable/ob_system_variable.cpp b/src/share/system_variable/ob_system_variable.cpp index 2ba2fad21d..288923922d 100644 --- a/src/share/system_variable/ob_system_variable.cpp +++ b/src/share/system_variable/ob_system_variable.cpp @@ -2826,67 +2826,101 @@ int ObPreProcessSysVars::change_initial_value() LOG_WARN("fail to change initial value", K(OB_SV_VERSION_COMMENT), K(ObSpecialSysVarValues::version_comment_)); - + } else if (OB_FAIL(ObSysVariables::set_base_value(OB_SV_VERSION_COMMENT, + ObSpecialSysVarValues::version_comment_))) { + LOG_WARN("fail to change initial value", K(OB_SV_VERSION_COMMENT), + K(ObSpecialSysVarValues::version_comment_)); // OB_SV_SYSTEM_TIME_ZONE } else if (OB_FAIL(ObSysVariables::set_value(OB_SV_SYSTEM_TIME_ZONE, ObSpecialSysVarValues::system_time_zone_str_))) { LOG_WARN("fail to change initial value", K(OB_SV_SYSTEM_TIME_ZONE), K(ObSpecialSysVarValues::system_time_zone_str_)); - + } else if (OB_FAIL(ObSysVariables::set_base_value(OB_SV_SYSTEM_TIME_ZONE, + ObSpecialSysVarValues::system_time_zone_str_))) { + LOG_WARN("fail to change initial value", K(OB_SV_SYSTEM_TIME_ZONE), + K(ObSpecialSysVarValues::system_time_zone_str_)); // charset和collation相关 // OB_SV_CHARACTER_SET_SERVER } else if (OB_FAIL(ObSysVariables::set_value(OB_SV_CHARACTER_SET_SERVER, ObSpecialSysVarValues::default_coll_int_str_))) { LOG_WARN("fail to change initial value", K(ret), K(OB_SV_CHARACTER_SET_SERVER), K(ObSpecialSysVarValues::default_coll_int_str_)); - + } else if (OB_FAIL(ObSysVariables::set_base_value(OB_SV_CHARACTER_SET_SERVER, + ObSpecialSysVarValues::default_coll_int_str_))) { + LOG_WARN("fail to change initial value", K(ret), K(OB_SV_CHARACTER_SET_SERVER), + K(ObSpecialSysVarValues::default_coll_int_str_)); // OB_SV_CHARACTER_SET_CONNECTION } else if (OB_FAIL(ObSysVariables::set_value(OB_SV_CHARACTER_SET_CONNECTION, ObSpecialSysVarValues::default_coll_int_str_))) { LOG_WARN("fail to change initial value", K(OB_SV_CHARACTER_SET_CONNECTION), K(ObSpecialSysVarValues::default_coll_int_str_)); - + } else if (OB_FAIL(ObSysVariables::set_base_value(OB_SV_CHARACTER_SET_CONNECTION, + ObSpecialSysVarValues::default_coll_int_str_))) { + LOG_WARN("fail to change initial value", K(OB_SV_CHARACTER_SET_CONNECTION), + K(ObSpecialSysVarValues::default_coll_int_str_)); // OB_SV_CHARACTER_SET_CLIENT } else if (OB_FAIL(ObSysVariables::set_value(OB_SV_CHARACTER_SET_CLIENT, ObSpecialSysVarValues::default_coll_int_str_))) { LOG_WARN("fail to change initial value", K(OB_SV_CHARACTER_SET_CLIENT), K(ObSpecialSysVarValues::default_coll_int_str_)); - + } else if (OB_FAIL(ObSysVariables::set_base_value(OB_SV_CHARACTER_SET_CLIENT, + ObSpecialSysVarValues::default_coll_int_str_))) { + LOG_WARN("fail to change initial value", K(OB_SV_CHARACTER_SET_CLIENT), + K(ObSpecialSysVarValues::default_coll_int_str_)); // OB_SV_CHARACTER_SET_RESULTS } else if (OB_FAIL(ObSysVariables::set_value(OB_SV_CHARACTER_SET_RESULTS, ObSpecialSysVarValues::default_coll_int_str_))) { LOG_WARN("fail to change initial value", K(OB_SV_CHARACTER_SET_RESULTS), K(ObSpecialSysVarValues::default_coll_int_str_)); - + } else if (OB_FAIL(ObSysVariables::set_base_value(OB_SV_CHARACTER_SET_RESULTS, + ObSpecialSysVarValues::default_coll_int_str_))) { + LOG_WARN("fail to change initial value", K(OB_SV_CHARACTER_SET_RESULTS), + K(ObSpecialSysVarValues::default_coll_int_str_)); // OB_SV_CHARACTER_SET_SYSTEM } else if (OB_FAIL(ObSysVariables::set_value(OB_SV_CHARACTER_SET_SYSTEM, ObSpecialSysVarValues::default_coll_int_str_))) { LOG_WARN("fail to change initial value", K(OB_SV_CHARACTER_SET_SYSTEM), K(ObSpecialSysVarValues::default_coll_int_str_)); - + } else if (OB_FAIL(ObSysVariables::set_base_value(OB_SV_CHARACTER_SET_SYSTEM, + ObSpecialSysVarValues::default_coll_int_str_))) { + LOG_WARN("fail to change initial value", K(OB_SV_CHARACTER_SET_SYSTEM), + K(ObSpecialSysVarValues::default_coll_int_str_)); // OB_SV_COLLATION_SERVER } else if (OB_FAIL(ObSysVariables::set_value(OB_SV_COLLATION_SERVER, ObSpecialSysVarValues::default_coll_int_str_))) { LOG_WARN("fail to change initial value", K(OB_SV_COLLATION_SERVER), K(ObSpecialSysVarValues::default_coll_int_str_)); - + } else if (OB_FAIL(ObSysVariables::set_base_value(OB_SV_COLLATION_SERVER, + ObSpecialSysVarValues::default_coll_int_str_))) { + LOG_WARN("fail to change initial value", K(OB_SV_COLLATION_SERVER), + K(ObSpecialSysVarValues::default_coll_int_str_)); // OB_SV_COLLATION_DATABASE } else if (OB_FAIL(ObSysVariables::set_value(OB_SV_COLLATION_DATABASE, ObSpecialSysVarValues::default_coll_int_str_))) { LOG_WARN("fail to change initial value", K(OB_SV_COLLATION_DATABASE), K(ObSpecialSysVarValues::default_coll_int_str_)); - + } else if (OB_FAIL(ObSysVariables::set_base_value(OB_SV_COLLATION_DATABASE, + ObSpecialSysVarValues::default_coll_int_str_))) { + LOG_WARN("fail to change initial value", K(OB_SV_COLLATION_DATABASE), + K(ObSpecialSysVarValues::default_coll_int_str_)); // OB_SV_COLLATION_CONNECTION } else if (OB_FAIL(ObSysVariables::set_value(OB_SV_COLLATION_CONNECTION, ObSpecialSysVarValues::default_coll_int_str_))) { LOG_WARN("fail to change initial value", K(OB_SV_COLLATION_CONNECTION), K(ObSpecialSysVarValues::default_coll_int_str_)); - + } else if (OB_FAIL(ObSysVariables::set_base_value(OB_SV_COLLATION_CONNECTION, + ObSpecialSysVarValues::default_coll_int_str_))) { + LOG_WARN("fail to change initial value", K(OB_SV_COLLATION_CONNECTION), + K(ObSpecialSysVarValues::default_coll_int_str_)); // OB_SV_SERVER_UUID } else if (OB_FAIL(ObSysVariables::set_value(OB_SV_SERVER_UUID, ObSpecialSysVarValues::server_uuid_))) { LOG_WARN("fail to change initial value", K(OB_SV_SERVER_UUID), K(ObSpecialSysVarValues::server_uuid_)); + } else if (OB_FAIL(ObSysVariables::set_base_value(OB_SV_SERVER_UUID, + ObSpecialSysVarValues::server_uuid_))) { + LOG_WARN("fail to change initial value", K(OB_SV_SERVER_UUID), + K(ObSpecialSysVarValues::server_uuid_)); } else { LOG_INFO("succ to change_initial_value", "version_comment", ObSpecialSysVarValues::version_comment_, @@ -2896,7 +2930,6 @@ int ObPreProcessSysVars::change_initial_value() } return ret; } - int ObPreProcessSysVars::init_sys_var() { int ret = OB_SUCCESS; diff --git a/src/share/system_variable/ob_system_variable_init.cpp b/src/share/system_variable/ob_system_variable_init.cpp index 38595a98c4..eb06d2d86e 100644 --- a/src/share/system_variable/ob_system_variable_init.cpp +++ b/src/share/system_variable/ob_system_variable_init.cpp @@ -3342,6 +3342,30 @@ int ObSysVariables::set_value(const common::ObString &name, const common::ObStri return ret; } +int ObSysVariables::set_base_value(const char *name, const char * new_value) +{ + ObString tmp_name(static_cast(strlen(name)), name); + ObString tmp_value(static_cast(strlen(new_value)), new_value); + return set_base_value(tmp_name, tmp_value); +} +int ObSysVariables::set_base_value(const common::ObString &name, const common::ObString &new_value) +{ + int ret = OB_SUCCESS; + bool name_exist = false; + for (int64_t i = 0; OB_SUCC(ret) && false == name_exist && i < var_amount; ++i){ + if (0 == ObSysVars[i].name_.compare(name)) { + ObSysVars[i].base_value_.assign_ptr(new_value.ptr(), new_value.length()); + name_exist = true; + } + } + if (OB_SUCC(ret)) { + if (false == name_exist) { + ret = OB_ENTRY_NOT_EXIST; + } + } + return ret; +} + int ObSysVariables::init_default_values() { int ret = OB_SUCCESS; diff --git a/src/share/system_variable/ob_system_variable_init.h b/src/share/system_variable/ob_system_variable_init.h index 4d1ec81c40..c8d42cbc75 100644 --- a/src/share/system_variable/ob_system_variable_init.h +++ b/src/share/system_variable/ob_system_variable_init.h @@ -82,6 +82,8 @@ public: static int64_t get_amount(); static int set_value(const char *name, const char * new_value); static int set_value(const common::ObString &name, const common::ObString &new_value); + static int set_base_value(const char *name, const char * new_value); + static int set_base_value(const common::ObString &name, const common::ObString &new_value); static int init_default_values(); };