datai/docs/archive/sessions/20260119-version-rollback.md

10 KiB
Raw Blame History

会话记录 - 版本回溯功能

现状

当前项目已经完成了文件存储和解压处理REQ-010-7和文件哈希对比和增量检测REQ-010-12功能需要在此基础上实现版本回溯功能以便在出现问题时能够查看和恢复历史版本的元数据文件。

目标

实现版本回溯功能,支持查看和恢复历史版本的元数据文件。包括:

  1. 版本历史记录 - 记录每次拉取和部署的版本
  2. 版本对比 - 对比不同版本的元数据文件
  3. 版本恢复 - 恢复到指定的历史版本
  4. 版本回滚 - 回滚到上一个版本

输入链接

Prompt 文件

Context Snapshot

记录本次会话参考了哪些 Canvas 节点:

执行过程

1. 创建版本历史记录服务

执行时间: 2026-01-19 00:00:00

操作:

  • 创建 MetadataVersion 实体类
  • 创建 MetadataVersionMapper 接口
  • 创建 IMetadataVersionService 服务接口
  • 创建 MetadataVersionServiceImpl 服务实现
  • 使用 MyBatis Plus 的 BaseMapper 实现版本历史记录
  • 使用时间戳记录版本时间
  • 支持按时间查询版本、按任务查询版本、分页查询

遇到的问题:

关键决策:

  • 使用 MyBatis Plus 的 BaseMapper 实现版本历史记录
  • 使用时间戳记录版本时间
  • 支持按时间查询版本、按任务查询版本、分页查询

2. 创建版本对比服务

执行时间: 2026-01-19 00:00:00

操作:

  • 创建 IVersionComparisonService 服务接口
  • 创建 VersionComparisonServiceImpl 服务实现
  • 使用 Google Diff Match Patch 库实现 Diff 算法
  • 使用哈希值对比文件差异
  • 支持文件内容对比、文件哈希对比
  • 支持差异高亮显示

遇到的问题:

关键决策:

  • 使用 Google Diff Match Patch 库实现 Diff 算法
  • 使用哈希值对比文件差异
  • 支持差异高亮显示

3. 创建版本恢复服务

执行时间: 2026-01-19 00:00:00

操作:

  • 创建 IVersionRecoveryService 服务接口
  • 创建 VersionRecoveryServiceImpl 服务实现
  • 使用历史版本的文件进行恢复
  • 使用 @Transactional 注解确保恢复原子性
  • 支持选择历史版本进行恢复
  • 记录恢复日志

遇到的问题:

关键决策:

  • 使用历史版本的文件进行恢复
  • 使用 @Transactional 注解确保恢复原子性
  • 记录恢复日志

4. 创建版本回滚服务

执行时间: 2026-01-19 00:00:00

操作:

  • 创建 IVersionRollbackService 服务接口
  • 创建 VersionRollbackServiceImpl 服务实现
  • 使用上一个版本的文件进行回滚
  • 使用 @Transactional 注解确保回滚原子性
  • 支持一键回滚到上一个版本
  • 记录回滚日志

遇到的问题:

关键决策:

  • 使用上一个版本的文件进行回滚
  • 使用 @Transactional 注解确保回滚原子性
  • 记录回滚日志

5. 创建控制器

执行时间: 2026-01-19 00:00:00

操作:

  • 创建 VersionHistoryController 控制器
  • 创建 VersionComparisonController 控制器
  • 创建 VersionRecoveryController 控制器
  • 创建 VersionRollbackController 控制器
  • 使用 RESTful API 接口,支持版本历史记录、版本对比、版本恢复、版本回滚

遇到的问题:

关键决策:

  • 使用 RESTful API 接口,保持接口一致性

6. 创建 DTO 类

执行时间: 2026-01-19 00:00:00

操作:

  • 创建 VersionHistoryCreateRequest、VersionHistoryCreateResponse
  • 创建 VersionHistoryQueryRequest、VersionHistoryQueryResponse
  • 创建 VersionComparisonRequest、VersionComparisonResponse
  • 创建 FileContentComparisonRequest、FileContentComparisonResponse
  • 创建 FileHashComparisonRequest、FileHashComparisonResponse
  • 创建 VersionRecoveryRequest、VersionRecoveryResponse
  • 创建 VersionRollbackRequest、VersionRollbackResponse

遇到的问题:

关键决策:

  • 使用 Lombok 的 @Data 注解,简化代码

7. 创建异常类

执行时间: 2026-01-19 00:00:00

操作:

  • 创建 VersionHistoryException 异常类
  • 创建 VersionComparisonException 异常类
  • 创建 VersionRecoveryException 异常类
  • 创建 VersionRollbackException 异常类

遇到的问题:

关键决策:

  • 为每个服务创建对应的异常类,提高代码的可维护性

8. 创建单元测试

执行时间: 2026-01-19 00:00:00

操作:

  • 创建 MetadataVersionServiceImplTest 单元测试
  • 创建 VersionComparisonServiceImplTest 单元测试

遇到的问题:

关键决策:

  • 使用 Spring Boot Test 框架,简化测试代码

9. 创建数据库表

执行时间: 2026-01-19 00:00:00

操作:

  • 创建 datai_metadata_version 表
  • 为 task_id、org_config_id、file_path、version_time 字段创建索引

遇到的问题:

关键决策:

  • 为常用查询字段创建索引,提高查询性能

10. 更新配置文件

执行时间: 2026-01-19 00:00:00

操作:

  • 更新 application.yml添加线程池配置
  • 添加 version-rollback 配置项

遇到的问题:

关键决策:

  • 复用现有的线程池配置,保持代码一致性
  • 添加版本回滚配置项,限制版本历史记录的数量和保留天数

关键产出

记录本次会话的关键产出,例如:

  • 生成的代码文件:
    • MetadataVersion 实体类
    • MetadataVersionMapper 接口
    • IMetadataVersionService 服务接口
    • MetadataVersionServiceImpl 服务实现
    • IVersionComparisonService 服务接口
    • VersionComparisonServiceImpl 服务实现
    • IVersionRecoveryService 服务接口
    • VersionRecoveryServiceImpl 服务实现
    • IVersionRollbackService 服务接口
    • VersionRollbackServiceImpl 服务实现
    • VersionHistoryController 控制器
    • VersionComparisonController 控制器
    • VersionRecoveryController 控制器
    • VersionRollbackController 控制器
    • DTO 类VersionHistoryCreateRequest、VersionHistoryCreateResponse 等)
    • 异常类VersionHistoryException、VersionComparisonException 等)
    • 单元测试MetadataVersionServiceImplTest、VersionComparisonServiceImplTest 等)
  • 更新的文档:
    • index.md
  • 创建的文档:
    • 0022-version-rollback.md
    • 023-version-rollback.md
    • 20260119-version-rollback.md
  • 解决的问题:
    • 版本历史记录问题 - 使用 MyBatis Plus 的 BaseMapper 实现版本历史记录
    • 版本对比准确性问题 - 使用 Diff 算法和哈希值对比两种方式
    • 版本恢复和回滚安全性问题 - 使用事务确保恢复和回滚的原子性
  • 达成的共识:
    • 使用 MyBatis Plus 的 BaseMapper 实现版本历史记录
    • 使用 Google Diff Match Patch 库实现 Diff 算法
    • 使用事务确保恢复和回滚的原子性
    • 复用现有的服务接口,保持代码一致性

质疑与替代方案

记录在执行过程中提出的质疑和考虑的替代方案:

  • 质疑:是否需要使用 Git 进行版本管理?

    • 替代方案:使用 Git 进行版本管理
    • 评估Git 是成熟的版本管理系统,但增加依赖和复杂度,不符合项目需求
  • 质疑:是否需要使用文件系统快照?

    • 替代方案:使用文件系统快照
    • 评估:文件系统快照占用大量存储空间,不支持细粒度的版本管理
  • 质疑:是否需要使用数据库存储文件内容?

    • 替代方案:使用数据库存储文件内容
    • 评估:数据库存储文件内容占用大量数据库空间,可能影响数据库性能

结论

总结本次会话的结果,包括:

  • 完成的工作:
    • 实现了版本历史记录功能
    • 实现了版本对比功能
    • 实现了版本恢复功能
    • 实现了版本回滚功能
    • 创建了完整的单元测试
    • 创建了数据库表
    • 更新了配置文件
  • 达成的目标:
    • 所有版本回溯功能均已实现
    • 代码符合项目编码规范,有清晰的注释
    • 代码结构清晰,易于扩展和维护
    • 代码易于单元测试和集成测试
  • 后续的行动计划:
    • 进行集成测试,确保功能正常
    • 进行性能测试,确保性能满足要求
    • 编写用户文档,说明如何使用版本回溯功能
  • 需要跟进的事项:
    • 监控版本历史记录的存储空间
    • 定期清理过期的版本历史记录
    • 监控版本恢复和回滚的性能

Design Update

  • 是否需要更新 Canvas?
  • Authentication.canvas - 需要添加版本回溯功能相关的节点
  • 其他 Canvas 文件: 无

复现步骤

提供复现本次会话结果的具体步骤:

  1. 创建 MetadataVersion 实体类和 MetadataVersionMapper 接口
  2. 创建 IMetadataVersionService 服务接口和 MetadataVersionServiceImpl 服务实现
  3. 创建 IVersionComparisonService 服务接口和 VersionComparisonServiceImpl 服务实现
  4. 创建 IVersionRecoveryService 服务接口和 VersionRecoveryServiceImpl 服务实现
  5. 创建 IVersionRollbackService 服务接口和 VersionRollbackServiceImpl 服务实现
  6. 创建 VersionHistoryController、VersionComparisonController、VersionRecoveryController、VersionRollbackController 控制器
  7. 创建 DTO 类和异常类
  8. 创建单元测试
  9. 创建数据库表 datai_metadata_version
  10. 更新配置文件 application.yml
  11. 运行单元测试,确保所有测试通过
  12. 进行集成测试,确保功能正常
  13. 进行性能测试,确保性能满足要求