CurveFS rename 接口实现方案I(隔离性)) 方案主要借鉴 leveldb 与 etcd(boltdb) 中事务的实现(主要利用 mvcc),方案设计如下:© XXX Page 7 of 15 整体思路如下: 在 MDS 所有 copyset 中增加一个 txid 字段,保存当前 copyset 已成功的事务 id(该事务 id 顺序递增,事务每成功一次则加一) 每次 rename 开始时, (其实就是创建副本,不管是删除/创建/更改都是创建相应 副本是一一对应的,下面有机制确保,每个 copyset 只需要一个 PendingTx(即整个 copyset 中最多只会存留一个副本 dentry) 下面是图中流程说明: (1) mount 的时候将 MDS 中所有 copyset 对应的 txid 缓存在本地 (2) 以 (copyset_txid+1) 去对应的 copyset 删除/创建/修改 dentry 对于 dentry 需要增加一个字段: 这层保证了每个挂载点只会有一个 rename 事务,所以这就变成了一写的事务场景 初略来看,这个方案只要 3 个 RPC 请求就够了,2 次 dentry 操作,一次提交事务 (txid) 操作 实现: MDS 中的 copyset 需要增加一个 txid 字段(需持久化) txid 为 uint64(8 个字节),增加的存储量为 8 * copyset 的数量 MeteServer 中的每个 Copyset0 码力 | 15 页 | 555.93 KB | 6 月前3
共 1 条
- 1
 













