Files
qiming/qiming-rcoder/.kiro/specs/unified-container-stop/tasks.md
2026-06-01 13:54:52 +08:00

136 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Implementation Plan
## 任务概述
将分散在多个文件中的容器停止逻辑统一到 docker_manager crate 的新模块中,提供两种清理策略:启动时清理和运行时清理。
## 任务列表
- [x] 1. 创建 container_stop 模块基础结构
-`crates/docker_manager/src/` 创建 `container_stop.rs` 文件
- 定义模块常量(超时时间等)
-`lib.rs` 中导出新模块
- _Requirements: 3.6, 5.1_
- [x] 2. 实现启动时清理功能
- [x] 2.1 实现 startup_cleanup_containers 函数
- 实现容器模式匹配查找
- 实现 5 秒超时停止逻辑
- 实现 409 错误过滤
- 返回 CleanupResult 统计信息
- _Requirements: 1.1, 1.2, 1.3, 1.4_
- [x] 2.2 实现 stop_container_startup_mode 辅助函数
- 调用 DockerManager::stop_container_by_id_with_timeout
- 使用 STARTUP_CLEANUP_TIMEOUT_SECONDS 常量
- 实现错误处理和日志记录
- _Requirements: 1.2, 4.1, 4.2_
- [x] 2.3 实现 is_409_conflict_error 辅助函数
- 检查 DockerError 是否包含 "409" 和 "already in progress"
- 返回布尔值
- _Requirements: 1.3_
- [x] 3. 实现运行时清理功能
- [x] 3.1 实现 runtime_cleanup_container 函数
- 实现单个容器停止逻辑
- 使用 3 秒优雅停止超时
- 超时后立即强制停止
- _Requirements: 2.1, 2.2, 2.3_
- [x] 3.2 实现 runtime_cleanup_containers 批量清理函数
- 批量处理多个容器 ID
- 返回 CleanupResult 统计信息
- _Requirements: 2.4, 2.5_
- [x] 3.3 实现 stop_container_runtime_mode 辅助函数
- 调用 DockerManager::stop_container_by_id_with_timeout
- 使用 RUNTIME_CLEANUP_TIMEOUT_SECONDS 常量
- 实现错误处理和日志记录
- _Requirements: 2.2, 4.1, 4.4_
- [x] 4. 更新 main.rs 使用新的启动清理接口
- [x] 4.1 导入 container_stop 模块
- 添加 `use docker_manager::container_stop;`
- _Requirements: 3.3, 5.2_
- [x] 4.2 替换 startup_cleanup_orphaned_containers 函数
- 调用 `container_stop::startup_cleanup_containers`
- 更新错误处理逻辑
- 更新日志输出
- _Requirements: 3.3, 4.2, 4.3_
- [x] 4.3 删除旧的 startup_cleanup_orphaned_containers 实现
- 删除 `startup_cleanup_orphaned_containers` 函数
- 删除 `find_and_cleanup_orphaned_containers` 函数(如果不再使用)
- _Requirements: 5.5_
- [x] 5. 更新 cleanup_task.rs 使用新的运行时清理接口
- [x] 5.1 导入 container_stop 模块
-`destroy_docker_container` 方法中添加导入
- _Requirements: 3.4, 5.3_
- [x] 5.2 替换容器停止逻辑
-`stop_container_by_id_with_timeout` 调用替换为 `container_stop::runtime_cleanup_container`
- 简化错误处理逻辑
- 更新日志输出
- _Requirements: 3.4, 4.4_
- [x] 5.3 清理 cleanup_single_orphaned_container 方法
- 使用新的 runtime_cleanup_container 接口
- 删除重复的停止逻辑
- _Requirements: 5.5_
- [x] 6. 更新 container_manager.rs如需要
- [x] 6.1 检查是否有容器停止逻辑
- 搜索 `stop_container` 相关调用
- 确定是否需要更新
- _Requirements: 3.5, 5.4_
- [x] 6.2 如有需要,替换为新接口
- 导入 container_stop 模块
- 替换停止逻辑
- _Requirements: 3.5, 5.4_
- [x] 7. 添加文档和注释
- [x] 7.1 为 container_stop.rs 添加模块级文档
- 说明两种清理策略的区别
- 提供使用示例
- _Requirements: 5.5_
- [x] 7.2 为公共函数添加详细文档注释
- 包含参数说明
- 包含返回值说明
- 包含使用示例
- _Requirements: 4.5_
- [x] 8. 验证和测试
- [x] 8.1 编译检查
- 运行 `cargo check` 确保无编译错误
- 运行 `cargo clippy` 检查代码质量
- _Requirements: 5.5_
- [x] 8.2 功能测试
- 测试启动时清理(模拟 409 错误场景)
- 测试运行时清理(验证 3 秒超时)
- 验证日志输出正确
- _Requirements: 1.5, 2.5, 4.1-4.5_