Prhub

#7132 [CI] Optimize log cleanup and isolation in unittest

PaddlePaddle/FastDeploy · 作者 EmmonsCurse · 合并时间 2026-04-01 22:07

分析状态 已生成
文件变更 1提交数 1 · 评论 3
代码增减 +12 / -10
CI test Logging

执行摘要

优化单元测试日志清理逻辑,解决残留日志和空目录问题。

根据 PR body 描述,单元测试日志清理存在三个问题:1) 某些日志(如 console_error.log)可能被后台进程重新生成;2) 空目录未能完全删除;3) 难以确保只保留失败用例的日志目录。这些问题的存在影响了日志隔离的可靠性,可能导致不必要的日志残留和调试困难。

该 PR 变更聚焦于 CI 脚本优化,逻辑清晰且风险低。对于关注 CI 流程和测试隔离的工程师,值得快速浏览以了解日志清理的最佳实践;对于其他开发者,无需深入阅读。

讨论亮点

Review 中只有 AI bot 的自动化评论,没有人工讨论。AI bot 的评论肯定了变更的合理性,指出主要改进包括:代码顺序调整以避免竞态条件、新增 console_error.log 清理、多轮空目录清理。评论认为代码逻辑清晰,错误处理完善,符合 shell 脚本最佳实践。

实现拆解

主要修改了 scripts/coverage_run.sh 文件中的两个函数:1) 在 run_test_with_logging 函数中,将日志清理逻辑从端口进程清理之前移到之后,以避免清理后文件被重新生成的竞态条件;2) 在脚本末尾的日志打包前清理部分,新增了删除 console_error.log* 文件的命令,并引入了 while 循环递归删除空目录的逻辑,确保嵌套空目录也能被完全清理。

文件 模块 状态 重要度
scripts/coverage_run.sh CI/ 测试脚本 modified 7.0

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

关键符号

run_test_with_logging

评论区精华

日志清理顺序调整以避免竞态条件 正确性

AI bot 评论指出将日志清理移到端口进程清理之后是正确的做法,先终止可能写日志的后台进程再清理文件,避免清理后文件被重新生成。

结论:变更被认可为合理改进,符合 shell 脚本最佳实践。 · 已解决

新增 console_error.log 清理和多轮空目录删除 设计

AI bot 评论肯定了新增 console_error.log* 文件清理和 while 循环递归删除空目录的逻辑,认为这解决了残留日志和空目录问题。

结论:变更被认可为有效的优化,提升了清理彻底性。 · 已解决

风险与影响

风险较低,主要涉及脚本执行逻辑:1) 顺序调整可能影响极端情况下的进程清理和日志删除的时序,但 AI bot 认为这是正确的做法;2) 新增的 find 删除命令和 while 循环如果路径异常可能导致意外删除,但使用了 || true 错误抑制;3) 变更仅影响 CI 脚本,不涉及核心业务逻辑。

影响范围限于 CI 测试环境:1) 对用户无直接影响;2) 对系统:提升单元测试日志的隔离性和清理彻底性,减少磁盘空间占用,便于失败日志分析;3) 对团队:简化 CI 维护,减少因日志残留导致的调试干扰。影响程度为低到中,主要改善运维体验。

脚本时序调整 文件删除逻辑

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

执行摘要

  • 一句话:优化单元测试日志清理逻辑,解决残留日志和空目录问题。
  • 推荐动作:该 PR 变更聚焦于 CI 脚本优化,逻辑清晰且风险低。对于关注 CI 流程和测试隔离的工程师,值得快速浏览以了解日志清理的最佳实践;对于其他开发者,无需深入阅读。

功能与动机

根据 PR body 描述,单元测试日志清理存在三个问题:1) 某些日志(如 console_error.log)可能被后台进程重新生成;2) 空目录未能完全删除;3) 难以确保只保留失败用例的日志目录。这些问题的存在影响了日志隔离的可靠性,可能导致不必要的日志残留和调试困难。

实现拆解

主要修改了 scripts/coverage_run.sh 文件中的两个函数:1) 在 run_test_with_logging 函数中,将日志清理逻辑从端口进程清理之前移到之后,以避免清理后文件被重新生成的竞态条件;2) 在脚本末尾的日志打包前清理部分,新增了删除 console_error.log* 文件的命令,并引入了 while 循环递归删除空目录的逻辑,确保嵌套空目录也能被完全清理。

关键文件:

  • scripts/coverage_run.sh(模块 CI/测试脚本): 唯一修改的文件,包含了日志清理逻辑的全部优化点,直接决定了单元测试日志的隔离和清理行为。

关键符号:run_test_with_logging

评论区精华

Review 中只有 AI bot 的自动化评论,没有人工讨论。AI bot 的评论肯定了变更的合理性,指出主要改进包括:代码顺序调整以避免竞态条件、新增 console_error.log 清理、多轮空目录清理。评论认为代码逻辑清晰,错误处理完善,符合 shell 脚本最佳实践。

  • 日志清理顺序调整以避免竞态条件 (correctness): 变更被认可为合理改进,符合 shell 脚本最佳实践。
  • 新增 console_error.log 清理和多轮空目录删除 (design): 变更被认可为有效的优化,提升了清理彻底性。

风险与影响

  • 风险:风险较低,主要涉及脚本执行逻辑:1) 顺序调整可能影响极端情况下的进程清理和日志删除的时序,但 AI bot 认为这是正确的做法;2) 新增的 find 删除命令和 while 循环如果路径异常可能导致意外删除,但使用了 || true 错误抑制;3) 变更仅影响 CI 脚本,不涉及核心业务逻辑。
  • 影响:影响范围限于 CI 测试环境:1) 对用户无直接影响;2) 对系统:提升单元测试日志的隔离性和清理彻底性,减少磁盘空间占用,便于失败日志分析;3) 对团队:简化 CI 维护,减少因日志残留导致的调试干扰。影响程度为低到中,主要改善运维体验。
  • 风险标记:脚本时序调整, 文件删除逻辑

关联脉络

  • PR #7085 [CI] Optimize test execution with single-GPU parallelism: 同样涉及 CI 测试优化,修改了相同文件 scripts/coverage_run.sh,关注测试执行和日志收集的改进。
  • PR #7098 [Feature] Add logging parameters and error output to terminal: 涉及日志系统优化,虽然聚焦于应用层日志参数,但与本 PR 的日志清理主题相关,共同提升日志管理效率。

参与讨论