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
下载文档到本地,方便使用
文档评分