知识卡片

omap克隆靠parent指针实现COW属性继承

专业/工作 · 514.a.2

内容

克隆一个对象的 omap 属性时,并不会把父对象在 [[omap用header间接层压缩对象属性存储开销|LevelDB]] 里的所有键值对复制一份,而是只新建一个 header,并在其 parent 字段记录父 header 的 seq,建立父子链接;读取子对象某个属性时,如果子对象自己名下没有这个 key,就顺着 parent 指针去父对象里找。这和 [[RBD克隆靠CopyUp延迟复制父镜像数据|RBD 数据层面的 CopyUp]]是同一种写时复制思路在不同层面(属性元数据 vs 对象数据)的重复实现:克隆的代价永远推迟到真正发生分歧(子对象写入自己的新属性)的那一刻才产生。

参考来源

《Ceph源码分析》第7章《本地对象存储》