diff --git a/src/rootserver/ob_root_service.cpp b/src/rootserver/ob_root_service.cpp index 99b8235ff9..7fcbf0c8a2 100644 --- a/src/rootserver/ob_root_service.cpp +++ b/src/rootserver/ob_root_service.cpp @@ -8999,7 +8999,8 @@ int ObRootService::check_weak_read_version_refresh_interval(int64_t refresh_inte LOG_WARN("get value failed", KR(ret), K(tenant_id), K(obj)); } else if (OB_FAIL(obj.get_int(session_max_stale_time))) { LOG_WARN("get int failed", KR(ret), K(tenant_id), K(obj)); - } else if (refresh_interval > session_max_stale_time) { + } else if (session_max_stale_time != share::ObSysVarFactory::INVALID_MAX_READ_STALE_TIME + && refresh_interval > session_max_stale_time) { valid = false; LOG_USER_ERROR(OB_INVALID_ARGUMENT, "weak_read_version_refresh_interval is larger than ob_max_read_stale_time"); diff --git a/src/share/system_variable/ob_system_variable_factory.h b/src/share/system_variable/ob_system_variable_factory.h index bb598fc54d..80ffdbeedb 100644 --- a/src/share/system_variable/ob_system_variable_factory.h +++ b/src/share/system_variable/ob_system_variable_factory.h @@ -1699,6 +1699,7 @@ public: const static int64_t MYSQL_SYS_VARS_COUNT = 97; const static int64_t OB_SYS_VARS_COUNT = 135; const static int64_t ALL_SYS_VARS_COUNT = MYSQL_SYS_VARS_COUNT + OB_SYS_VARS_COUNT; + const static int64_t INVALID_MAX_READ_STALE_TIME = -1; const static int16_t OB_SPECIFIC_SYS_VAR_ID_OFFSET = 10000; // 表示当前OB能够使用的sys var id的最大值,正常情况下,不需要申请大于OB_MAX_SYS_VAR_ID的sys var id, diff --git a/src/share/system_variable/ob_system_variable_init.cpp b/src/share/system_variable/ob_system_variable_init.cpp index cf294f7cd5..60bbbdffff 100644 --- a/src/share/system_variable/ob_system_variable_init.cpp +++ b/src/share/system_variable/ob_system_variable_init.cpp @@ -2882,7 +2882,7 @@ static struct VarsInit{ ObSysVars[219].info_ = "max stale time(us) for weak read query " ; ObSysVars[219].name_ = "ob_max_read_stale_time" ; ObSysVars[219].data_type_ = ObIntType ; - ObSysVars[219].value_ = "5000000" ; + ObSysVars[219].value_ = "-1" ; ObSysVars[219].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::NEED_SERIALIZE ; ObSysVars[219].on_check_and_convert_func_ = "ObSysVarOnCheckFuncs::check_and_convert_timeout_too_large" ; ObSysVars[219].id_ = SYS_VAR_OB_MAX_READ_STALE_TIME ; diff --git a/src/sql/engine/cmd/ob_variable_set_executor.cpp b/src/sql/engine/cmd/ob_variable_set_executor.cpp index 6b550d505d..2a7fad2317 100644 --- a/src/sql/engine/cmd/ob_variable_set_executor.cpp +++ b/src/sql/engine/cmd/ob_variable_set_executor.cpp @@ -644,6 +644,16 @@ int ObVariableSetExecutor::update_global_variables(ObExecContext &ctx, extra_var_value.assign(extra_var_value_buf, pos); should_update_extra_var = true; } + } else if (set_var.var_name_ == OB_SV_MAX_READ_STALE_TIME) { + int64_t max_read_stale_time = 0; + if (OB_FAIL(val.get_int(max_read_stale_time))) { + LOG_WARN("fail to get int value", K(ret), K(val)); + } else if (max_read_stale_time != ObSysVarFactory::INVALID_MAX_READ_STALE_TIME && + max_read_stale_time < GCONF.weak_read_version_refresh_interval) { + ret = OB_INVALID_ARGUMENT; + LOG_USER_ERROR(OB_INVALID_ARGUMENT, + "max_read_stale_time is smaller than weak_read_version_refresh_interval"); + } } if (OB_SUCC(ret) && should_update_extra_var) { diff --git a/src/sql/session/ob_basic_session_info.cpp b/src/sql/session/ob_basic_session_info.cpp index 77fbdd2039..0690f1cffc 100644 --- a/src/sql/session/ob_basic_session_info.cpp +++ b/src/sql/session/ob_basic_session_info.cpp @@ -2590,9 +2590,17 @@ OB_INLINE int ObBasicSessionInfo::process_session_variable(ObSysVarClassType var break; } case SYS_VAR_OB_MAX_READ_STALE_TIME: { - int64_t int_val = 0; - OZ (val.get_int(int_val), val); - OX (sys_vars_cache_.set_ob_max_read_stale_time(int_val)); + int64_t max_read_stale_time = 0; + if (OB_FAIL(val.get_int(max_read_stale_time))) { + LOG_WARN("fail to get int value", K(ret), K(val)); + } else if (max_read_stale_time != ObSysVarFactory::INVALID_MAX_READ_STALE_TIME && + max_read_stale_time < GCONF.weak_read_version_refresh_interval) { + ret = OB_INVALID_ARGUMENT; + LOG_USER_ERROR(OB_INVALID_ARGUMENT, + "max_read_stale_time is smaller than weak_read_version_refresh_interval"); + } else { + sys_vars_cache_.set_ob_max_read_stale_time(max_read_stale_time); + } break; } case SYS_VAR_RUNTIME_FILTER_TYPE: { @@ -3015,9 +3023,17 @@ int ObBasicSessionInfo::fill_sys_vars_cache_base_value( break; } case SYS_VAR_OB_MAX_READ_STALE_TIME: { - int64_t int_val = 0; - OZ (val.get_int(int_val), val); - OX (sys_vars_cache.set_base_ob_max_read_stale_time(int_val)); + int64_t max_read_stale_time = 0; + if (OB_FAIL(val.get_int(max_read_stale_time))) { + LOG_WARN("fail to get int value", K(ret), K(val)); + } else if (max_read_stale_time != ObSysVarFactory::INVALID_MAX_READ_STALE_TIME && + max_read_stale_time < GCONF.weak_read_version_refresh_interval) { + ret = OB_INVALID_ARGUMENT; + LOG_USER_ERROR(OB_INVALID_ARGUMENT, + "max_read_stale_time is smaller than weak_read_version_refresh_interval"); + } else { + sys_vars_cache.set_base_ob_max_read_stale_time(max_read_stale_time); + } break; } case SYS_VAR_RUNTIME_FILTER_TYPE: {