知识卡片

ObjectState用exists字段消解元数据来源歧义

专业/工作 · 513.b

内容

ObjectState 只是在 object_info_t 基础上多加了一个 exists 布尔字段,但它解决的问题很具体:object_info_t 本身可能是从内存缓存的 attrs[OI_ATTR] 里直接取出来的,而缓存命中不等于”对象真的存在”——缓存可能保留着一个已被删除对象的旧元数据快照。所以必须用一个独立的 exists 字段显式标注”这份元数据对应的对象当前是否真实存在”,不能靠”拿到了 object_info_t 结构”这件事本身来推断存在性。这是一个很小但容易被忽视的教训:从缓存里读到某个实体的数据,不代表这个实体现在依然存在,存在性判断需要单独校验,不能和数据获取合并成一步。

参考来源

《Ceph源码分析》第6章《Ceph的数据读写》