96SEO 2026-02-20 04:39 22
。

当涉及到新增配置项或系统变量时#xff0c;通常会为其指定一个明确的取值范围或定义一个专门的合法性检查函数。
本文将详细阐述在不同情境下#x…在“OceanBase
配置项系统变量实现及应用详解”的系列文章中我们已经对配置项和系统变量的源码进行了解析。
当涉及到新增配置项或系统变量时通常会为其指定一个明确的取值范围或定义一个专门的合法性检查函数。
本文将详细阐述在不同情境下应如何对配置项和系统变量进行合法性检查。
配置项通常可以直接设定其取值范围或者根据需要自定义合法性检查函数。
此外在某些情况下还需要通过访问特定的配置项甚至系统变量才能确定是否满足修改条件
在定义配置项时对于基础类型的数据一般会指定一个“取值范围”。
比如[0,100]表示0到100之间的整数方括号表示包含0和100[0M,)表示范围从0到无穷大M是数据的单位它还可以是K、G等。
integer,ObParameterAttr(Section::OBSERVER,
EditLevel::DYNAMIC_EFFECTIVE));
对于有的配置项无法用一个简单的字符串来描述它的取值范围就需要定义一个专门的检查函数。
DEF_STR_WITH_CHECKER(default_compress_func,
zstd_1.3.8,common::ObConfigCompressFuncChecker,default
zstd_1.3.8,ObParameterAttr(Section::OBSERVER,
EditLevel::DYNAMIC_EFFECTIVE));
合法性检查类有固定的模板可以使用只需模仿已有的结构定义即可。
关键在于check函数的功能比如
ObConfigCompressFuncChecker::check
ObConfigCompressFuncChecker::check(const
ARRAYSIZEOF(common::compress_funcs)
ObString::make_string(compress_funcs[i]).case_compare(t.str()))
{lz4_1.0,none,snappy_1.0,zstd_1.0,zstd_1.3.8,lz4_1.9.1,
有的配置项可能会依赖其他配置项的值比如A必须大于B、A*B要小于C等要求这时候就需要在检查函数中访问其他配置项的值从而判断当前传入的新值是否符合要求。
max_stale_time_for_weak_consistency不能小于集群配置项
weak_read_version_refresh_interval超时时间必须大于刷新时间不然来不及刷新很可能会超时那么在它的
ObConfigStaleTimeChecker::check(const
ObConfigTimeParser::get(t.str(),
GCONF.weak_read_version_refresh_interval);if
{LOG_USER_ERROR(OB_NOT_SUPPORTED,
max_stale_time_for_weak_consistency
weak_read_version_refresh_interval,);}}return
max_stale_time_for_weak_consistency
对于某些配置项可能需要跟另一个租户配置项进行对比而租户配置项存在多个实例显然无法直接通过
partition_balance_schedule_interval
PARTITION_BALANCE_SCHEDULE_INTERVAL
tenant_id注意不是所有租户只是当前修改命令涉及的租户依次获取每个租户的
balancer_idle_time然后与传入的值进行对比若所有租户全部检查通过则可以修改。
PARTITION_BALANCE_SCHEDULE_INTERVAL))
item-tenant_ids_.at(i);omt::ObTenantConfigGuard
tenant_config(TENANT_CONF(tenant_id));int64_t
tenant_config-balancer_idle_time
DEFAULT_BALANCER_IDLE_TIME;int64_t
ObConfigTimeParser::get(item-value_.ptr(),
err_msg[DEFAULT_BUF_LENGTH];(void)snprintf(err_msg,
partition_balance_schedule_interval
tenant_id);LOG_USER_ERROR(OB_INVALID_ARGUMENT,
OB_INVALID_ARGUMENT;LOG_WARN(config
partition_balance_schedule_interval
partition_balance_schedule_interval
partition_balance_schedule_interval
partition_balance_schedule_interval
partition_balance_schedule_interval
partition_balance_schedule_interval
配置项还可能受到系统变量的影响有时也需要检查全局系统变量的值这就要从schema中获取系统变量进行比较。
max_stale_time_for_weak_consistency为例同样地首先为目标配置项定义一个常量字符串
WEAK_READ_VERSION_REFRESH_INTERVAL。
在配置项预检查函数
匹配到该配置项则可以进行后续的检查代码较多的情况下可以封装一个函数check_weak_read_version_refresh_interval用于检查合法性。
WEAK_READ_VERSION_REFRESH_INTERVAL
weak_read_version_refresh_interval;int
ObRootService::set_config_pre_hook(obrpc::ObAdminSetConfigArg
WEAK_READ_VERSION_REFRESH_INTERVAL))
ObConfigTimeParser::get(item-value_.ptr(),
OB_FAIL(check_weak_read_version_refresh_interval(refresh_interval,
OB_INVALID_ARGUMENT;LOG_WARN(config
check_weak_read_version_refresh_interval
ObRootService::check_weak_read_version_refresh_interval(int64_t
(OB_FAIL(GCTX.schema_service_-get_tenant_schema_guard(OB_SYS_TENANT_ID,
(OB_FAIL(sys_schema_guard.get_tenant_ids(tenant_ids)))
(OB_FAIL(GCTX.schema_service_-get_tenant_schema_guard(tenant_id,
(OB_FAIL(schema_guard.get_tenant_system_variable(tenant_id,OB_SV_MAX_READ_STALE_TIME,
(OB_FAIL(var_schema-get_value(NULL,
(OB_FAIL(obj.get_int(session_max_stale_time)))
share::ObSysVarFactory::INVALID_MAX_READ_STALE_TIME
false;LOG_USER_ERROR(OB_INVALID_ARGUMENT,weak_read_version_refresh_interval
weak_read_version_refresh_interval
weak_read_version_refresh_interval
ob_max_read_stale_time系统变量需要大于等于
weak_read_version_refresh_interval配置项修改
weak_read_version_refresh_interval
connect_timeout设置了min_val和max_val字段取值范围就是[2,
31536000]不需要自己增加额外的代码现有的框架会自动进行范围检查。
(OB_FAIL(val.get_varchar(log_level)))
log_level.case_compare(disabled))
(OB_FAIL(OB_LOGGER.parse_check(log_level.ptr(),
同样的系统变量也需要访问其他的配置项或者变量从而判断传入值的合法性。
获取其他集群级别配置项的值对比当前传入的值是否合法不合法则返回
ObVariableSetExecutor::update_global_variables(
(OB_FAIL(val.get_int(max_read_stale_time)))
ObSysVarFactory::INVALID_MAX_READ_STALE_TIME
GCONF.weak_read_version_refresh_interval)
OB_INVALID_ARGUMENT;LOG_USER_ERROR(OB_INVALID_ARGUMENT,max_read_stale_time
weak_read_version_refresh_interval);}
函数中调用相应的处理函数相关的判断逻辑与global变量一致即可。
ObBasicSessionInfo::process_session_variable(ObSysVarClassType
(process_session_log_level(val),
目前代码中没有这样的例子如果需要在更新系统变量时检查租户配置项可以参考更新配置项时的做法。
而且系统变量只涉及当前租户所以也只需要获取当前租户的配置项进行合法性检查。
schema然后取得需要的系统变量的值。
获取的方式与“更新配置项时检查全局系统变量”类似不再赘述。
通过自定义的合法性检查手段对配置项和系统变量的值进行检查可以有效避免用户设置无效的、超出正常边界的值进而影响系统稳定性和可用性。
至此关于配置项和系统变量的使用方法和源码分析已经介绍完了接下来还会有一些应用和问题排查相关的文章感兴趣的同学可以关注下。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback