目录
Raft Meta Storage 分析文档
系统头文件
- errno.h
- butil/time.h
- butil/logging.h
- butil/file_util.h
其他外部头文件
项目内部头文件
- braft/util.h
- braft/protobuf_file.h
- braft/local_storage.pb.h
- braft/raft_meta.h
1. 类设计
MetaStorageManager (单例类)
管理所有KVBasedMergedMetaStorageImpl实例。
主要成员函数:
register_meta_storage(): 注册新的存储实例
get_meta_storage(): 获取已存在的存储实例
remove_instance_from_meta_storage(): 移除存储实例
主要成员变量:
_ss_map: 存储实例映射表(DoublyBufferedData)
混合元数据存储实现,同时使用文件和KV存储。
init(): 初始化存储
set_term_and_votedfor(): 设置term和投票信息
get_term_and_votedfor(): 获取term和投票信息
gc_instance(): 垃圾回收实例
主要成员变量:
FileBasedSingleMetaStorage
基于文件的单实例元数据存储。
主要成员函数:
init(): 初始化存储
load(): 加载元数据
save(): 保存元数据
set_term_and_votedfor(): 设置term和投票信息
get_term_and_votedfor(): 获取term和投票信息
主要成员变量:
_term: 当前任期
_votedfor: 投票给谁
_path: 存储路径
基于KV存储的合并元数据存储。
init(): 初始化存储
set_term_and_votedfor(): 设置term和投票信息
get_term_and_votedfor(): 获取term和投票信息
delete_meta(): 删除元数据
主要成员变量:
KVBasedMergedMetaStorageImpl
KV存储的具体实现类。
主要成员函数:
init(): 初始化存储
set_term_and_votedfor(): 设置term和投票信息
get_term_and_votedfor(): 获取term和投票信息
delete_meta(): 删除元数据
run_tasks(): 执行批量写入任务
主要成员变量:
_db: leveldb实例
_queue_id: 任务队列ID
_path: 存储路径
类图
classDiagram
class RaftMetaStorage {
<<interface>>
+init()
+set_term_and_votedfor()
+get_term_and_votedfor()
}
class MetaStorageManager {
-ss_map
+register_meta_storage()
+get_meta_storage()
+remove_instance_from_meta_storage()
}
class MixedMetaStorage {
-single_impl
-merged_impl
+init()
+set_term_and_votedfor()
+get_term_and_votedfor()
}
class FileBasedSingleMetaStorage {
-term
-votedfor
-path
+init()
+set_term_and_votedfor()
+get_term_and_votedfor()
}
class KVBasedMergedMetaStorage {
-merged_impl
+init()
+set_term_and_votedfor()
+get_term_and_votedfor()
+delete_meta()
}
class KVBasedMergedMetaStorageImpl {
-db
-queue_id
-path
+init()
+set_term_and_votedfor()
+get_term_and_votedfor()
+delete_meta()
}
RaftMetaStorage <|-- MixedMetaStorage
RaftMetaStorage <|-- FileBasedSingleMetaStorage
RaftMetaStorage <|-- KVBasedMergedMetaStorage
MixedMetaStorage --> FileBasedSingleMetaStorage
MixedMetaStorage --> KVBasedMergedMetaStorageImpl
KVBasedMergedMetaStorage --> KVBasedMergedMetaStorageImpl
MetaStorageManager --> KVBasedMergedMetaStorageImpl2. 处理流程
主要处理流程
- 元数据存储初始化流程
flowchart TD
A[开始] --> B{检查是否已初始化}
B -- 是 --> C[返回成功]
B -- 否 --> D[创建存储目录]
D --> E{是否是混合存储?}
E -- 是 --> F[初始化单文件存储]
F --> G[初始化KV存储]
E -- 否 --> H{是否是KV存储?}
H -- 是 --> I[初始化LevelDB]
H -- 否 --> J[初始化文件存储]
I --> K[创建执行队列]
G --> L[设置初始化标志]
J --> L
K --> L
L --> M[结束]
- 写入元数据流程
flowchart TD
A[开始] --> B{检查是否已初始化}
B -- 否 --> C[返回错误]
B -- 是 --> D{是否是混合存储?}
D -- 是 --> E[写入单文件存储]
E --> F[写入KV存储]
D -- 否 --> G{是否是KV存储?}
G -- 是 --> H[创建写入任务]
H --> I[加入执行队列]
G -- 否 --> J[写入文件]
F --> K[结束]
I --> K
J --> K3. 时序图
混合存储写入时序
sequenceDiagram
participant Client
participant MixedStorage
participant SingleStorage
participant KVStorage
participant LevelDB
Client->>MixedStorage: set_term_and_votedfor()
MixedStorage->>SingleStorage: set_term_and_votedfor()
SingleStorage->>SingleStorage: save()
MixedStorage->>KVStorage: set_term_and_votedfor()
KVStorage->>KVStorage: create WriteTask
KVStorage->>LevelDB: Write Batch
LevelDB-->>KVStorage: Write Result
KVStorage-->>MixedStorage: Done
MixedStorage-->>Client: Return StatusKV存储批量写入时序
sequenceDiagram
participant Client
participant KVStorage
participant ExecutionQueue
participant LevelDB
Client->>KVStorage: set_term_and_votedfor()
KVStorage->>ExecutionQueue: execute(WriteTask)
ExecutionQueue->>ExecutionQueue: batch tasks
ExecutionQueue->>LevelDB: WriteBatch
LevelDB-->>ExecutionQueue: Write Result
ExecutionQueue->>KVStorage: run_closure
KVStorage-->>Client: Return Status这个文档详细分析了raft_meta.cpp的实现,包括:
所有用到的头文件
详细的类设计,包括每个类的主要成员和职责
使用Mermaid绘制的类图,展示了类之间的关系
主要处理流程的流程图
关键操作的时序图
文档结构清晰,使用Mermaid图表直观地展示了代码的设计和流程,便于理解代码的整体架构。
- butil/time.h
- butil/logging.h
- butil/file_util.h
其他外部头文件
- braft/util.h
- braft/protobuf_file.h
- braft/local_storage.pb.h
- braft/raft_meta.h
register_meta_storage(): 注册新的存储实例get_meta_storage(): 获取已存在的存储实例remove_instance_from_meta_storage(): 移除存储实例_ss_map: 存储实例映射表(DoublyBufferedData)init(): 初始化存储set_term_and_votedfor(): 设置term和投票信息get_term_and_votedfor(): 获取term和投票信息gc_instance(): 垃圾回收实例init(): 初始化存储load(): 加载元数据save(): 保存元数据set_term_and_votedfor(): 设置term和投票信息get_term_and_votedfor(): 获取term和投票信息_term: 当前任期_votedfor: 投票给谁_path: 存储路径init(): 初始化存储set_term_and_votedfor(): 设置term和投票信息get_term_and_votedfor(): 获取term和投票信息delete_meta(): 删除元数据init(): 初始化存储set_term_and_votedfor(): 设置term和投票信息get_term_and_votedfor(): 获取term和投票信息delete_meta(): 删除元数据run_tasks(): 执行批量写入任务_db: leveldb实例_queue_id: 任务队列ID_path: 存储路径- 元数据存储初始化流程
- 写入元数据流程
项目内部头文件
1. 类设计
MetaStorageManager (单例类)
管理所有KVBasedMergedMetaStorageImpl实例。
主要成员函数:
主要成员变量:
混合元数据存储实现,同时使用文件和KV存储。
主要成员变量:
FileBasedSingleMetaStorage
基于文件的单实例元数据存储。
主要成员函数:
主要成员变量:
基于KV存储的合并元数据存储。
主要成员变量:
KVBasedMergedMetaStorageImpl
KV存储的具体实现类。
主要成员函数:
主要成员变量:
类图
classDiagram
class RaftMetaStorage {
<<interface>>
+init()
+set_term_and_votedfor()
+get_term_and_votedfor()
}
class MetaStorageManager {
-ss_map
+register_meta_storage()
+get_meta_storage()
+remove_instance_from_meta_storage()
}
class MixedMetaStorage {
-single_impl
-merged_impl
+init()
+set_term_and_votedfor()
+get_term_and_votedfor()
}
class FileBasedSingleMetaStorage {
-term
-votedfor
-path
+init()
+set_term_and_votedfor()
+get_term_and_votedfor()
}
class KVBasedMergedMetaStorage {
-merged_impl
+init()
+set_term_and_votedfor()
+get_term_and_votedfor()
+delete_meta()
}
class KVBasedMergedMetaStorageImpl {
-db
-queue_id
-path
+init()
+set_term_and_votedfor()
+get_term_and_votedfor()
+delete_meta()
}
RaftMetaStorage <|-- MixedMetaStorage
RaftMetaStorage <|-- FileBasedSingleMetaStorage
RaftMetaStorage <|-- KVBasedMergedMetaStorage
MixedMetaStorage --> FileBasedSingleMetaStorage
MixedMetaStorage --> KVBasedMergedMetaStorageImpl
KVBasedMergedMetaStorage --> KVBasedMergedMetaStorageImpl
MetaStorageManager --> KVBasedMergedMetaStorageImpl
2. 处理流程
主要处理流程
flowchart TD
A[开始] --> B{检查是否已初始化}
B -- 是 --> C[返回成功]
B -- 否 --> D[创建存储目录]
D --> E{是否是混合存储?}
E -- 是 --> F[初始化单文件存储]
F --> G[初始化KV存储]
E -- 否 --> H{是否是KV存储?}
H -- 是 --> I[初始化LevelDB]
H -- 否 --> J[初始化文件存储]
I --> K[创建执行队列]
G --> L[设置初始化标志]
J --> L
K --> L
L --> M[结束]
flowchart TD
A[开始] --> B{检查是否已初始化}
B -- 否 --> C[返回错误]
B -- 是 --> D{是否是混合存储?}
D -- 是 --> E[写入单文件存储]
E --> F[写入KV存储]
D -- 否 --> G{是否是KV存储?}
G -- 是 --> H[创建写入任务]
H --> I[加入执行队列]
G -- 否 --> J[写入文件]
F --> K[结束]
I --> K
J --> K
3. 时序图
混合存储写入时序
sequenceDiagram
participant Client
participant MixedStorage
participant SingleStorage
participant KVStorage
participant LevelDB
Client->>MixedStorage: set_term_and_votedfor()
MixedStorage->>SingleStorage: set_term_and_votedfor()
SingleStorage->>SingleStorage: save()
MixedStorage->>KVStorage: set_term_and_votedfor()
KVStorage->>KVStorage: create WriteTask
KVStorage->>LevelDB: Write Batch
LevelDB-->>KVStorage: Write Result
KVStorage-->>MixedStorage: Done
MixedStorage-->>Client: Return Status
KV存储批量写入时序
sequenceDiagram
participant Client
participant KVStorage
participant ExecutionQueue
participant LevelDB
Client->>KVStorage: set_term_and_votedfor()
KVStorage->>ExecutionQueue: execute(WriteTask)
ExecutionQueue->>ExecutionQueue: batch tasks
ExecutionQueue->>LevelDB: WriteBatch
LevelDB-->>ExecutionQueue: Write Result
ExecutionQueue->>KVStorage: run_closure
KVStorage-->>Client: Return Status
这个文档详细分析了raft_meta.cpp的实现,包括:
所有用到的头文件
详细的类设计,包括每个类的主要成员和职责
使用Mermaid绘制的类图,展示了类之间的关系
主要处理流程的流程图
关键操作的时序图
文档结构清晰,使用Mermaid图表直观地展示了代码的设计和流程,便于理解代码的整体架构。
No comments yet.