已合并
fix: ASCEND_WORK_PATH指定trace日志产出文件的落盘路径,实际落盘到默认路径下 (#758) #3746
fix: ASCEND_WORK_PATH指定trace日志产出文件的落盘路径,实际落盘到默认路径下 (#758) #3746
已合并
GuoWenbo创建于 7月21日
GuoWenbo成员
7月21日

Pull Request

描述

  • 修复摘要: 修复 ASCEND_WORK_PATH=./trace 等相对路径无法作为 atrace 落盘根目录的问题,避免回退到默认 $HOME/ascend 路径。
  • 变更文件:
  • src/dfx/trace/atrace/utrace/recorder/trace_recorder.c
  • tests/ut/atrace/ut/utrace/testcase/trace_recorder_utest.cc

Diff 摘要

.../trace/atrace/utrace/recorder/trace_recorder.c  | 29 +++++++
 .../ut/utrace/testcase/trace_recorder_utest.cc     | 90 ++++++++++++++++++----
 2 files changed, 102 insertions(+), 17 deletions(-)

变更类型

关联的Issue

https://gitcode.com/cann/runtime/issues/758

如何测试

  1. cmake --build build --target utrace_utest -j8
  2. ./build/tests/ut/atrace/ut/utrace/utrace_utest --gtest_filter=TraceRecorderUtest.TestRecordEnvRelativePath
  3. ./build/tests/ut/atrace/ut/utrace/utrace_utest
  4. git diff --check

核对清单

其他信息

  • 测试结论: PASS
  • Code review: 已修复 reviewer 指出的 cwd/env 清理问题,新增 ScopedCwdAndEnv 保护用例现场。
likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 GuoWenbo 的贡献)
GGuoWenbo成员
7月21日 创建了 pull request,commit 9617f405
GGuoWenbo成员
7月21日 关联了issue:[Bug-Report|缺陷反馈]: ASCEND_WORK_PATH指定trace日志产出文件的落盘路径,实际落盘到默认路径下
atomgit-bot
atomgit-bot
7月21日 评论:

变更摘要

本次 PR 修复了当 ASCEND_WORK_PATH 环境变量设置为相对路径(如 ./trace)时,atrace 日志文件无法正确落盘到指定路径、而是回退到默认 $HOME/ascend 路径的问题。核心思路是在路径校验前新增路径规范化步骤:对于非绝对路径,通过 getcwd 获取当前工作目录并拼接为绝对路径,再继续后续的目录存在性检查和创建逻辑。同时补充了针对相对路径场景的单元测试。

主要改动

  • 新增 TraceNormalizeEnvPath 函数:在 trace_recorder.c 中新增该静态函数,用于检测 ASCEND_WORK_PATH 是否为绝对路径;若不是,则获取当前工作目录并拼接出绝对路径写回 envDir,确保后续操作基于绝对路径进行。
  • TraceGetValidPath 增加路径规范化调用:在原有的目录存在性检查和递归创建之前,先调用 TraceNormalizeEnvPath 对路径进行规范化,避免相对路径直接传入 TraceAccess 导致行为异常。
  • 新增 ScopedCwdAndEnv 测试辅助类:在 trace_recorder_utest.cc 中引入 RAII 风格的辅助类,负责在测试期间保存/恢复当前工作目录并清理环境变量,为相对路径测试提供隔离的运行环境。
  • 新增 TestRecordEnvRelativePath 测试用例:通过切换到测试目录、设置 ASCEND_WORK_PATH=./trace、写入 trace 数据并断言生成的文件路径包含正确的绝对前缀,验证相对路径场景下日志文件落盘位置的正确性。
likedislike
不准确?
atomgit-bot
atomgit-bot
7月21日 评论:

代码审查

关闭总结

已审查文件

文件 审查结果
src/dfx/trace/atrace/utrace/recorder/trace_recorder.c 发现 1 个 P2 问题(strcpy_s 缓冲区大小边界条件)
tests/ut/atrace/ut/utrace/testcase/trace_recorder_utest.cc 发现 2 个 P3 建议(重复 TraceRecorderExit() 调用、oldCwd_ 缓冲区偏小)

问题汇总

  • P0: 0
  • P1: 0
  • P2: 1 — TraceNormalizeEnvPathstrcpy_s(envDir, len, absPath) 在标准化后路径恰好为 MAX_FILEDIR_LEN(255)字符时,目标缓冲区偏小 1 字节导致 strcpy_s 截断失败
  • P3: 2 — 测试中的冗余 TraceRecorderExit() 调用和 ScopedCwdAndEnvoldCwd_ 缓冲区在深层路径下可能过小

整体风险评估

低风险。核心修复逻辑(相对路径转绝对路径)设计正确,能有效解决 Issue #758 描述的问题。P2 问题触发窗口极窄(需 strlen(cwd) + strlen(envDir) == 254),在常规使用场景下几乎不会触发,但建议修复以消除边界条件隐患。测试代码的 P3 建议不影响功能正确性。

类型 数量
🔴 阻塞 0
🟡 建议 1

💬 仅评论

likedislike
不准确?
CANN-robotCANN-robot成员
7月21日 添加了label:cann-cla/yes
此处折叠了48条消息 查看更多
zhuliangying成员
7月23日 评论:

/approve

likedislike
CANN-robotCANN-robot成员
7月23日 添加了label:approved
zhangjie
zhangjie成员
7月23日 评论:

/lgtm

likedislike
CANN-robotCANN-robot成员
7月23日 添加了label:lgtm
CANN-robotCANN-robot成员
7月23日 合入了pull request