知识卡片

Backfill扫描窗口内仍需追踪并发写操作

专业/工作 · 515.e.3.a

内容

PG 处于 active 状态时仍能正常接受读写,[[Backfill用多路归并指针对比全量对象列表|Backfill]] 扫描一批对象列表往往跨越较长时间,扫描期间这批对象里有些可能已经被正常的客户端写操作修改甚至删除过。BackfillInterval 用一个 version 字段记录”扫描这批对象列表时 PG 当时的最新版本”,下次继续处理这批对象前,先检查从这个版本到当前最新版本之间的日志,把期间被更新的对象在待修复列表里换成最新版本、把被删除的对象直接从列表里摘掉。这提醒了一个后台批处理任务和前台实时写入并发时的通用问题:批处理任务基于某一时刻的快照展开工作,如果执行周期较长,必须显式检测并合并快照之后发生的变化,否则会用过期数据覆盖或者错误处理已经不存在的数据。

参考来源

《Ceph源码分析》第11章《Ceph数据修复》