【标题】(请简要描述下实现的内容)

【实现内容】:
0. 将压缩相关代码提取作为一个so,方便所有工具链接引用

  1. 压缩页面增加CRC32校验字段。为此,对完整性校验函数做了扩充,支持任意长度字符传入。长度不足时,会补零计算。
    uint32 DataBlockChecksum(char* data, uint32 size, bool zeroing)
    输入图片说明
  2. 将压缩相关的接口读取等工具使用的函数统一抽离到src/lib/page_compression文件目录下,编译生成libpagecompression.so动态库。其他工具在makefile中通过-lpagecompression的方式引用。
  3. pagecompression中使用到的函数,通过软链接和编译方式,避免重复代码拷贝。
  4. 根据条件同步修改pg_rewind、pg_ctl、pagehack等工具,降低代码重复率。
  5. openGauss的pg_probackup配套支持压缩表的数据备份。
    1. probackup备份支持方式较为简单:通过将压缩后的页面空闲空间填零+0的方式,兼容后续所有流程操作。
    2. 在backup_content.control中同步记录压缩参数。
    3. 数据恢复时仍然按照8k数据文件的恢复方式。在单文件恢复的最后流程,判断是否为压缩文件,如果是,按页面读取重构整个压缩文件。(此处参考probackup的merge功能,先restore在backup。我们此处是先restore在reconstruct压缩文件。)
      输入图片说明
  6. 同步支持makefile、cmakefile编译
    【关联issue】:

【开发自验报告】:

  1. 请附上自验结果(内容或者截图)
  • 远程备份结果集正常
    输入图片说明
  • 远程恢复节点数据一致
    输入图片说明
  1. 是否可以添加fastcheck测试用例,如是,请补充fastcheck用例
  2. 是否涉及资料修改,如是,在docs仓库补充资料
  3. 是否考虑支撑升级和在线扩容等扩展场景
  4. 是否考虑异常场景/并发场景/前向兼容/性能场景
  5. 是否对其他模块产生影响

【其他】

  1. 由于压缩表填零,默认情况下是作压缩的,恢复时二次IO数据统计如下,压缩额外代码分支会让压缩文件备份比预期满19%,在性能规格15-20%内:
    输入图片说明