知识卡片
ObjectContext记录跨对象操作依赖
内容
ObjectContext 用 blocked_by/blocking 这对字段显式记录对象间的操作依赖:当一个操作同时涉及两个对象(例如把对象 A 的部分数据 copy 到对象 B),如果源对象 A 处于缺失需要恢复的状态,B 上的写操作就必须等待,此时 B 的 blocked_by 指向 A,A 的 blocking 集合里包含 B。这让单对象级别的读写锁(内部类 RWState 定义的 RWNONE/RWREAD/RWWRITE/RWEXCL 四态)能够扩展到处理跨对象的操作依赖,而不需要引入一个全局的操作依赖图——每个对象只需要知道自己在等谁、以及谁在等自己。
参考来源
《Ceph源码分析》第6章《Ceph的数据读写》