Ceph RBD:快照ID(snapid) + 如何生成 + 如何增长 + 初始值

引言

快照是Ceph RBD的关键特性,快照的元数据可参考Ceph RBD:快照 + Bluestore/Filestore快照区别一文。
快照id是快照的重要属性,本文介绍快照id的生成策略及其含义。

本文结论

  • snap_seq
    • 快照id本质上产生于pool上面记录的snap_seq,snap_seq是一个递增的数。
    • snap_seq持久化在osdmap中。
    • 快照创建时通过monitor获取osdmap中记录的snap_seq。
    • snap_seq初始值为1
  • snap_seq递增
    • rbd创建快照时snap_seq加1。
    • rbd删除快照时snap_seq加1。
    • 创建第一个image时会在validpool流程创建一个快照并删除,因此用户看到第一个快照的snapid为4。

快照id代码详解

snap_seq

struct pg_pool_t {
   
	snapid_t snap_seq;        ///< seq for per-pool snapshot
};
class OSDMap {
   
	mempool::osdmap::map<int64_t,pg_pool_t> pools;
};

创建快照流程

  • librbd:创建快照流程,调用librados接口alloc snapid。
  • librados:创建快照id,调用objecter接口。
  • osd objector:发送消息到monitor获取snapid。
  • monitor:获取osdmap,并在snap_seq上递增1后返回snapid。
void SnapshotCreateRequest<I>::send_allocate_snap_id() {
   
	...
	image_ctx.data_ctx.aio_selfmanaged_snap_create(&m_snap_id, rados_completion);
	...
}
void librados::IoCtxImpl::aio_selfmanaged_snap_create(uint64_t *snapid, AioCompletionImpl *c)
{
   
	...
	int r = objecter->allocate_selfmanaged_snap(poolid, &onfinish->snapid,
	                                            onfinish);
	...
}
int Objecter::allocate_selfmanaged_snap(int64_t pool, snapid_t *psnapid, Context *onfinish
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值