知识卡片
三个版本指针共同刻画数据修复进度
内容
pg_info_t 里三个版本指针分别刻画修复流程的不同侧面:last_update 是这个 PG 目前已知的最新版本(哪怕本地还没真正拥有对应数据);last_complete 是 [[Recovery与Backfill的适用场景区别|Recovery]] 修复进程真正推进到的位置,随修复过程逐步逼近 last_update,二者相等就代表基于日志的修复已经完成;last_backfill 是 Backfill 全量扫描修复的进度指针,按对象哈希顺序推进,小于它的对象已确认修复完成,大于它但版本落后于 last_complete 的对象则是还没轮到、待修复的。PG 完全干净(clean)时三者趋于统一(last_backfill 设为 MAX 代表无需 Backfill);一旦发生故障,这三个指针就分别独立前进,共同给出”最新应该是什么、日志方式修到哪、全量方式扫到哪”这三层不同粒度的进度画像,而不是用一个笼统的”修复百分比”掩盖不同修复路径的差异。
参考来源
《Ceph源码分析》第10章《Ceph Peering机制》