目录

snapshot.cpp

snapshot.h

Snapshot 模块分析

  • butil/time.h
  • butil/string_printf.h
  • brpc/uri.h
  • braft/util.h
  • braft/protobuf_file.h
  • braft/local_storage.pb.h
  • braft/remote_file_copier.h
  • braft/snapshot.h
  • braft/node.h
  • braft/file_service.h

1. 类设计

主要类及其成员

LocalSnapshotMetaTable

    • _file_map: 文件元数据映射表
    • _meta: 快照元数据
  • 主要函数:

      LocalSnapshotWriter

      • 成员变量:
        • _path: 快照路径
        • _meta_table: 元数据表
        • _fs: 文件系统适配器
      • 主要函数:
        • init(): 初始化写入器
        • save_meta(): 保存元数据
        • add_file(): 添加文件
        • sync(): 同步数据到磁盘

      • 成员变量:
        • _path: 快照路径
        • _meta_table: 元数据表
        • _addr: 服务器地址
        • _reader_id: 读取器ID
      • 主要函数:
        • init(): 初始化读取器
        • load_meta(): 加载元数据
        • generate_uri_for_copy(): 生成复制URI

      LocalSnapshotStorage

        • _path: 存储路径
        • _last_snapshot_index: 最新快照索引
        • _ref_map: 引用计数映射
      • 主要函数:

          类图

          classDiagram class SnapshotStorage { <<abstract>> +init() +create() +open() } class LocalSnapshotStorage { -string _path -int64_t _last_snapshot_index -map<int64_t, int> _ref_map +init() +create() +open() } class LocalSnapshotWriter { -string _path -LocalSnapshotMetaTable _meta_table +init() +save_meta() +add_file() } class LocalSnapshotReader { -string _path -LocalSnapshotMetaTable _meta_table -EndPoint _addr +init() +load_meta() +generate_uri_for_copy() } SnapshotStorage <|-- LocalSnapshotStorage LocalSnapshotStorage ..> LocalSnapshotWriter : creates LocalSnapshotStorage ..> LocalSnapshotReader : creates LocalSnapshotWriter --> LocalSnapshotMetaTable : uses LocalSnapshotReader --> LocalSnapshotMetaTable : uses

          2. 处理流程

          flowchart TD A[创建快照] --> B{初始化写入器} B -->|成功| C[保存元数据] B -->|失败| D[返回错误] C --> E[添加文件] E --> F[同步到磁盘] F -->|成功| G[重命名临时目录] F -->|失败| H[清理临时文件] G --> I[更新最新快照索引]

          快照安装流程

          3. 时序图

          快照创建时序

          sequenceDiagram participant Node participant Storage participant Writer participant MetaTable Node->>Storage: create() Storage->>Writer: new Writer() Writer->>Writer: init() Writer->>MetaTable: save_meta() loop 每个文件 Writer->>Writer: add_file() Writer->>MetaTable: add_file() end Writer->>Writer: sync() Storage->>Storage: update_last_snapshot()

          快照复制时序

          sequenceDiagram participant Source participant Copier participant Target Source->>Copier: start_to_copy_from() Copier->>Source: load_meta() Copier->>Target: create_snapshot() loop 每个文件 Copier->>Source: copy_file() Copier->>Target: add_file() end Copier->>Target: sync()

          安全性保证

          1. 使用临时目录避免部分写入
          2. 引用计数管理快照生命周期
          3. 元数据校验确保完整性

          1. 异步复制机制
          2. 文件级别的增量复制
          3. 支持并发读取

          资源管理

            5. 最佳实践建议

            实现建议

            1. 合理设置快照间隔
            2. 实现高效的文件系统适配器
            3. 添加快照压缩功能
            4. 优化元数据存储格式

            使用建议

            1. 定期触发快照
            2. 监控快照大小和耗时
            3. 合理配置存储路径
            4. 做好容量规划