pdf文档 CurveFS ChunkID持久化

79.38 KB 3 页 0 评论
语言 格式 评分
中文(简体)
.pdf
3
摘要
文档描述了CurveFS系统中ChunkID持久化的方案,主要包括将ChunkID的获取从space迁移到mds,并将其持久化写入etcd中。实现部分包括proto文件的修改、MdsServiceImp类的增强以及ChunkIDGenerator类的引入。ChunkIDGenerator负责生成和分配ChunkID,通过KVStorageClient与etcd交互,确保ChunkID的高效分配和持久化。文档还指出了潜在的问题与风险,如storeKey不存在时可能导致的ChunkID覆盖问题。
AI总结
《CurveFS ChunkID持久化》文档内容总结如下: ### 背景 1. 将ChunkID的获取方法从原有的"space"组件迁移到"mds"(Metadata Server)中,并将ChunkID持久化存储到etcd中。 2. 目前仅考虑单MDs工作场景。 3. ChunkID是全局递增的。 ### 实现 #### 1. 原型文件修改 - 将`proto/space.proto`中的`AllocateS3ChunkRequest`和`AllocateS3ChunkResponse`消息复制到`proto/mds.proto`。 - 修改`AllocateS3ChunkResponse`的状态码类型为`FSStatusCode`。 - 将`proto/space.proto`中的`SpaceAllocService`服务中的`AllocateS3Chunk` RPC移入`MdsService`。 #### 2. MdsService实现 - 在`curvefs/src/mds/mds_services.h`的`MdsServiceImp`类中增加`AllocateS3Chunk`的实现。 - 在`MdsServiceImp`类中引入`ChunkIDGenerator`类对象,并在`AllocateS3Chunk`方法中调用其`GenChunkID`方法。 #### 3. ChunkIDGenerator类 - **成员变量**: - `client_`:用于连接etcd的客户端。 - `chunkIdStoreKey_`:ChunkID在etcd中存储的键。 - `nextId_`:下一个可分配的ChunkID。 - `lastId_`:当前ChunkID池中最后一个可分配的ChunkID。 - `bundleSize_`:ChunkID池的大小。 - **方法**: - **构造函数**:初始化ChunkIDGenerator,加载etcd中的ChunkID池。 - **析构函数**:释放资源。 - **GenChunkID**:分配新的ChunkID。 - 如果当前ChunkID池枯竭,申请新的ChunkID Bundle并记录到etcd中。 - 如果申请失败或首次连接etcd,从已使用的ChunkID继续分配。 - 如果etcd中`storeKey_`不存在或Value不可解码,将从0开始分配。 ### 问题与风险 1. 构造函数中存在潜在问题:当`storeKey_`不存在时,从0开始分配ChunkID可能导致覆盖现有ChunkID。 2. 未考虑ChunkID用完的情况。 ### 总结 文档描述了将ChunkID的分配逻辑从"space"迁移到"mds"的过程,并通过`ChunkIDGenerator`实现ChunkID的持久化存储和分配。需要注意的是当前实现存在ChunkID覆盖和用完的情况等风险。
P1
P2
P3
下载文档到本地,方便使用
文档评分
请文明评论,理性发言.