【标题】
openGauss资源池化支持极致RTO按需回放

【实现内容】:
openGauss资源池化支持极致RTO按需回放,在备机升主时,仅构建恢复所必须的HashMap,之后立即对外提供服务,降低RTO。在对外提供服务后,在后台完成实际回放。

【根因分析】:
不涉及

【实现方案】:

  1. 现有极致RTO接口统一封装至extreme_redo_api.h,并复制现有极致RTO代码作为按需回放极致RTO代码基线
  2. 实现按需回放极致RTO,代码检视入口:
    https://gitee.com/opengauss/openGauss-server/commit/f9a1e3ea027aed097f148714a53d7f7c6d802761

【关联需求或issue】:
https://e.gitee.com/opengaussorg/dashboard?issue=I6UI0H

【开发自验报告】:

  1. 请附上自验结果(内容或者截图)
    1.1 测试场景1:
    采用极致RTO按需回放,模拟触发failover。
    (1)使用pg_controldata查询数据库状态先变更为"in on-demand build",之后变更为"in on-demand recovery",此时能够对外提供服务。
    (2)此时在升主备机运行TPCC读写,未升主备机运行TPCC只读,1H内TPCC无报错
    (3)以上运行中途数据库状态自动变更为"normal",业务不中断
    1.2 测试场景2:
    新增测试系统函数(函数内部对输入rel的全部页面白盒调用readbuf_common函数,并打印页面checksum结果至文件中),资源池化主备环境,运行一段时间TPCC后,kill所有节点,并备份集群,之后触发重启failover。
    (1)采用极致RTO按需回放,对外提供服务后调用测试函数
    (2)采用极致RTO回放,回放完成后调用测试函数
    (3)对比以上两种回放场景,checksum结果完全一致
    测试场景2补充:
    采用极致RTO按需回放,特殊情况下,仍能完成回放,并通过测试场景2验证
    (1)配置回放内存大小较小时,回放日志量较大
    (2)回放过程中包含DDL语句
    1.3 测试场景3:
    按需回放过程中,升主备机运行一段时间TPCC读写,记录下最后一条XLOG日志LSN。之后模拟该阶段又发生故障,新备机按需回放成功后,回放完成LSN不小于记录的LSN
    1.4 测试场景4:
    按需回放升级测试
    (1)按需回放升级、回滚功能正常
    (2)升级过程中,集群发生failover,功能正常
  2. 是否可以添加fastcheck测试用例,如是,请补充fastcheck用例
  3. 是否涉及资料修改,如是,在docs仓库补充资料
    是,https://gitee.com/opengauss/docs/pulls/5364
  4. 是否考虑升级场景(系统表修改、日志持久化以及修改执行态数据格式)
    是,修改了资源池化reform控制文件
  5. 是否考虑在线扩容等扩展场景
  6. 是否考虑异常场景/并发场景/前向兼容/性能场景
  7. 是否对其他模块产生影响
    否,本特性代码和现有极致RTO代码独立

【其他说明】: