【 使用环境 】测试环境
【 组件 】OBServer
【 使用版本 】3.1.5
【 问题描述 】
我在研究 OB 启动流程代码,查看资料时,看到 OBCP 的 PPT 里,关于 OBServer 服务启动恢复逻辑,有这么 2 句话:
-
停机时间短(分钟或者小时级别),一般只追齐 clog
-
停机时间长(天级别),clog 落后太多,会直接追齐 ssd 基线数据,然后补齐合并版本后的 clog
第 1 句话能理解,停机后,OBServer 实例再次启动时,需要同步 leader 的 clog 日志到本机,从 clog 回放数据到 memtable。
第 2 句话,停机时间长(天级别),我的理解是:停机时间没有超过 server_permanent_offline_time,但是停机 >= 1 天,导致 clog 落后 leader 太多,如果从 leader 同步 clog 到本机再回放,由于 clog 可能会很多,回放时间长,所以会选择直接追齐 SSTable 基线数据。
关于追齐基线数据,有 2 个问题:
-
这个指的是追齐 Major SSTable,还是 Minor SSTable、Mini SSTable,或者有一套复杂的逻辑?这块逻辑的代码入口、关键方法或函数是哪些呢?
-
追齐基线数据由哪个线程负责执行,代码入口、关键方法或函数是哪些呢?(我找了 migration、restore 相关的类,只找到了 alter system replica … 等语句的实现逻辑,没找到启动过程中补齐基线数据的逻辑)
请 OB 的研发大佬们帮忙解答下上面 2 个问题,多谢!