[Feature] Provide a parameter to assign the size of clog disk #990 - document #1002
Vendredimatin
started this conversation in
Ideas
Replies: 1 comment
-
update:
|
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
1 概要
1.1 需求背景
当前,OceanBase 数据库的日志回收策略中对用户可见的配置项有 2 个(见文档https://open.oceanbase.com/docs/observer-cn/V3.1.4/10000000000449455):
其中clog_disk_utilization_threshold配置项用于控制clog的复用下限,在系统工作正常时,Clog 会在此水位开始复用最老的日志文件,默认值是 Clog 独立磁盘空间的 80%,不可修改。因此,正常运行的情况下,clog 或 ilog 磁盘空间占用不会超过 80%,超过则会报 "clog disk is almost full" 的错误,提醒 DBA 处理。
正常情况下,一个observer会单独跑在一块磁盘上,对该配置项不会产生任何影响;但是,仍然存在多个observer跑在一块磁盘上的可能性。例如,observer A(40%)和observer B(40%)的clog加起来已经占了磁盘的80%的空间了,observer A和observer B都抛出了"clog disk is almost full"的错误,但是observer A的用户A根据此错误来查看observer A的clog磁盘占用空间,发现才占用了40%而已,此时用户A会因为文档的描述和报错不一致而产生困惑。因此本需求需要对此进行调整。
1.3 目标
解决多observer运行在同一块磁盘时,"clog disk is almost full" 报错与单observer实际占用情况不符的问题。
2 方案实现设计
2.1 方案概述
为了实现上述目标,需要明确observer可使用的clog磁盘大小,有以下两个方案:
方案一:增加一个配置项,指定observer的clog最多占用一块磁盘的百分之几。
方案二:增加一个配置项,直接配置observer的clog磁盘大小。
首先方案一的配置项非常容易与1.1节中提到的两个配置项混淆,可能给用户使用造成不便;另外两个方案的修改量大概相等(方案一可能相对少),都需要增加一个配置项,所有使用到clog磁盘空间大小的代码都需要经过改动。
综上,考虑选择方案二。
2.2 配置项信息
增加一个启动配置项(log_disk_size),明确指明observer的clog磁盘大小
当log_disk_size配置项值为0时,表示取块磁盘大小。
计算时,使用log_disk_size作为计算clog占用空间百分比的total_space.
因此,需要修改以下两部分:
2.3 现状
2.4 改造点
2.4.1 observer配置项改动
涉及修改文件:ob_parameter_seed.ipp
2.4.2 observer启动配置项检查
当log_disk_size配置为负或者大于磁盘总空间时,observer应该init失败
2.4.3 磁盘总占用空间计算方式
涉及修改文件ob_log_disk_manager.cpp
当log_disk_size为默认值0时,仍然保留以下计算方式;当log_disk_size被指定时,直接将log_disk_size赋值给total_space_
注释内代码为修改的地方
2.4.2 free_quota的计算方式
涉及修改文件ob_log_file_pool.cpp
当log_disk_size为默认值0时,仍然遵循以下逻辑;当log_disk_size不为0时,以log_disk_size作为total_space,使用lstat系统调用获取path目录下已占用空间,再通过二者之差获取free_quota.
修改地方见下伪代码,注释内为修改的地方
3. 测试
3.1 测试用例
3.2 observer 单元测试
已通过observer单元测试
Beta Was this translation helpful? Give feedback.
All reactions