注意

本文档适用于 Ceph 的开发版本。

PGPool

PGPool 是一种用于管理和更新已删除快照状态的结构。它通过维护两个字段来实现此目的:cached_removed_snaps - 当前已删除的快照集,以及 newly_removed_snaps - 上一个 epoch 中新删除的快照。在 OSD::load_pgs 中,osd map 从 pg 的文件存储中恢复并传递给 OSD::_get_pool,其中使用该 map 初始化一个 PGPool 对象。

对于我们收到的每个新 map,我们都会调用 PGPool::update 并传入新 map。在该函数中,我们构建一个新删除快照的列表 (pg_pool_t::build_removed_snaps) 并将其与我们的 cached_removed_snaps 合并。此函数包含检查,以确保我们仅在情况发生变化或存在 map 间隙时才执行此更新。

当我们激活 pg 时,我们从 cached_removed_snaps 初始化快照修剪队列,并减去我们已经清除的 purged_snaps,留下需要修剪的快照列表。修剪操作随后由 snap_trim_wq 异步执行。

由 Ceph 基金会为您呈现

Ceph 文档是由非营利性 Ceph 基金会 资助和托管的社区资源。如果您希望支持这项工作和我们的其他努力,请考虑 立即加入