特性

快照删除生命周期

师成师成· 更新于 2026-09-28· 阅读 4 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

本文档介绍 Apache Ozone 中快照删除的内部生命周期,从最初的用户请求到数据与元数据的最终物理清除。

快照删除过程分为四个主要阶段:

1. 请求阶段:OMSnapshotDeleteRequest

  • 触发条件: 用户执行命令 ozone sh snapshot delete <bucket> <snapshot>。

  • 操作:

    • Ozone Manager(OM)接收该请求并进行校验。
    • 快照在 SnapshotInfoTable 中的状态被更新为 SNAPSHOT_DELETED。
    • deletionTime 被设置为当前时间戳。
  • 结果: 该阶段仅为快照打上"待删除"标记,尚未调整快照链,也未回收任何数据。快照仍保留在系统中,但已成为后台回收服务的处理候选。

2. 回收阶段:SnapshotDeletingService

  • 触发条件: 一个周期性运行的后台服务。

  • 操作:

    • 服务识别出状态为 SNAPSHOT_DELETED 的快照。

    • 它处理被删除快照的内部跟踪表:deletedTable、deletedDirTable 和 renamedTable。

    • 数据迁移: 它将这些表中的条目移动到以下位置之一:

      1. 快照链中的下一个活动快照(如果存在)。
      2. 活动对象存储(AOS)(即主桶),如果没有后续快照的话。
  • 归集: 一旦该快照的所有键和目录都已成功迁移(即快照的已删除表为空),服务会将该快照的 DB 键收集到一个"清理列表"中。

3. 终结阶段:OMSnapshotPurgeRequest

  • 触发条件: 当某个快照完全"清空"(所有键均已回收)时,由 SnapshotDeletingService 触发。
  • 链调整(外科医生): 这是实际进行快照链"手术"的地方。服务会将链中下一个快照的 previousSnapshotId 更新为指向被删除快照的前驱,从而将链"缝合"回原状。
  • 深度清理标志: 它会在后续快照上设置 setDeepClean(false)。这会向 KeyDeletingService 发出信号,表明现在可以执行"更深入"的清理,因为快照链中间的一个快照已被移除,可能暴露出更多不再被任何快照引用的键。
  • 移除(清洁工): 快照记录从 SnapshotInfoTable 缓存中移除,磁盘上相应的检查点目录也被删除。

4. 持久化:OMSnapshotPurgeResponse

  • 操作: Ozone Manager 通过双缓冲区将该事务刷写到磁盘。
  • 结果: 快照记录从 RocksDB 的 snapshotInfoTable 中被物理且永久地删除。

角色总结

组件角色描述
OMSnapshotDeleteRequest标记者通过更新快照状态,将其标记为待删除。
SnapshotDeletingService回收者将数据引用转移到下一个快照或 AOS。
OMSnapshotPurgeRequest整合者与清扫者重新链接快照链,并删除物理记录。

评论

登录后参与评论

正在加载评论…