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