这是Ceph开发每周谈的第一百零五篇文章,记录从18年1月2号到18年1月07号的社区开发情况。
- 一句话消息
圣诞到元旦大部分开发者都已经休假了
-
简化 RBD 克隆流程
在最近的 CDM 讨论了 rbd 克隆流程的简化,为了能够避免 protect 和 unprotect 流程。目前的 rbd 克隆流程如下:
1) 创建快照 (rbd snap create <image>@<snap>)
2) 保护快照 (rbd snap protect <image>@><snap>)
3) 从保护快照中克隆出 (rbd clone <image>@<snap> <clone>)
目前的 “snap protect” 步骤主要是用于支持从一个 read only 的池子中克隆出卷,并通过两步方式:
Clone Operation
1) 验证快照已经被保护
2) 增加对在 <clone pool>/rbd_children 对象中对克隆卷的保护
3) 重新验证快照已经被保护,否则回滚
Unprotect Operation
1) 设置快照状态为 UNPROTECTING
2) 扫描所有 rbd_children 对象,确认没有 image 被引用,否则回滚
3) 设置快照状态为 UNPROTECTED
简化方案
通过兼容老的模式,来实现对于新的方法来避免保护和未保护的要求,主要是未来支持从一个只读的池中克隆出,需要给 OSD cap 增加一个 cls 方法:
“allow class rbd clone_add object_prefix rbd_header.”
新的克隆可以只需要调用 “rbd.clone_add” 来原子性注册和避免快照被删除,调用 “rbd.remove_snap” 来解决原子性删除的问题。
同时会增加一个 RBD_FEATURE_OPERATION 标记来显示是否支持,如果是显示有这个标记,意味着用户可以去掉 protect 和 unprotect 过程。