已关闭
[Bug-Report|缺陷反馈]: 二进制 JSON 配置缩短重写后残留旧尾部 #6370
tianjun创建于  21 天前关闭于  8 天前
tianjun
21 天前 创建

Describe the current behavior / 问题描述

scripts/kernel/binary_script/binary_util/util.py 的 wr_json 以 O_WRONLY | O_CREAT 打开输出,再将已有文件描述符交给 fdopen(..., "w")。该操作没有截断原文件。重复生成相同路径且新 JSON 较短时,旧文件尾部仍存在,产物不再是有效 JSON。
真实调用链包括 gen_opc_json_with_impl_mode.py → gen_opc_json_with_threadnum.py。第一次使用较长的 impl_mode,再对同一输出使用较短模式,两次生成 CLI 均返回 0,但下一步真实分片 CLI 的 json.load 报 Extra data。增量重建或配置缩小时可能触发。

Environment Information / 环境信息

最新 master 95b0d8c04245d7136125b7b4e9b2c1dc83c5b0e0;macOS arm64 Host、Python 3.12.14。仅实际文件 I/O 与真实辅助 CLI,无真实 CANN/NPU 编译执行。

Steps to reproduce the issue / 重现步骤

python scripts/kernel/binary_script/test_binary_json_rewrite.py -v

回归对较长原文写入较短 dict/空 dict/UTF-8 内容;真实 impl-mode CLI 连续生成同一文件,再由真实 threadnum CLI 消费。修复及回归代码:61fc7141b40b6d388c40dcfb4d78d8c30b2a164a。

Describe the expected behavior / 预期结果

每次成功写出只包含当前 JSON 文档,缩小时去除旧尾部,保证后续消费者可解析。保留已有文件权限及新文件的 0600 创建模式。

修复前:三个较短重写子场景文件大小仍为 383 字节;真实消费者退出 1,json.decoder.JSONDecodeError: Extra data: line 8 column 2 (char 95);权限控制通过。
修复后:3 项测试全部通过,无跳过;真实分片产物为当前 Fixture_0_hp,所有重写内容及新/已有文件权限均验证。全部适用 pre-commit/Ruff/OAT 和 diff 检查通过。

Special notes / 备注

检索完整当日 Issue/all、open PR 快照并刷新最新第一页,未发现此 writer 问题;已有 JSON BOM/哈希尾部/算子 tiling 条目是其他原因。只加入 O_TRUNC 标志;适用 Ruff 格式整理之外,所有其他函数和常量的 AST 经核对完全相同。属于简单工具 bug 修复,AI 辅助编写,PR 保持一个源提交。

likedislike
Ttianjun
21 天前 添加了label:bug-report
tianjun
21 天前 评论:

/assign @Ethan_Zou

likedislike
CANN-robotCANN-robot成员
21 天前 将 Ethan_Zou 设为负责人
Ttianjun
21 天前 关联了pull request:fix: 截断重复生成的二进制 JSON 配置
CANN-robotCANN-robot成员
8 天前 关闭了 issue
CANN-robotCANN-robot成员
8 天前 添加了label:resolved