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。增量重建或配置缩小时可能触发。
scripts/kernel/binary_script/binary_util/util.py
最新 master 95b0d8c04245d7136125b7b4e9b2c1dc83c5b0e0;macOS arm64 Host、Python 3.12.14。仅实际文件 I/O 与真实辅助 CLI,无真实 CANN/NPU 编译执行。
95b0d8c04245d7136125b7b4e9b2c1dc83c5b0e0
python scripts/kernel/binary_script/test_binary_json_rewrite.py -v
回归对较长原文写入较短 dict/空 dict/UTF-8 内容;真实 impl-mode CLI 连续生成同一文件,再由真实 threadnum CLI 消费。修复及回归代码:61fc7141b40b6d388c40dcfb4d78d8c30b2a164a。
61fc7141b40b6d388c40dcfb4d78d8c30b2a164a
每次成功写出只包含当前 JSON 文档,缩小时去除旧尾部,保证后续消费者可解析。保留已有文件权限及新文件的 0600 创建模式。
修复前:三个较短重写子场景文件大小仍为 383 字节;真实消费者退出 1,json.decoder.JSONDecodeError: Extra data: line 8 column 2 (char 95);权限控制通过。 修复后:3 项测试全部通过,无跳过;真实分片产物为当前 Fixture_0_hp,所有重写内容及新/已有文件权限均验证。全部适用 pre-commit/Ruff/OAT 和 diff 检查通过。
json.decoder.JSONDecodeError: Extra data: line 8 column 2 (char 95)
检索完整当日 Issue/all、open PR 快照并刷新最新第一页,未发现此 writer 问题;已有 JSON BOM/哈希尾部/算子 tiling 条目是其他原因。只加入 O_TRUNC 标志;适用 Ruff 格式整理之外,所有其他函数和常量的 AST 经核对完全相同。属于简单工具 bug 修复,AI 辅助编写,PR 保持一个源提交。
/assign @Ethan_Zou
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 / 重现步骤
回归对较长原文写入较短 dict/空 dict/UTF-8 内容;真实 impl-mode CLI 连续生成同一文件,再由真实 threadnum CLI 消费。修复及回归代码:
61fc7141b40b6d388c40dcfb4d78d8c30b2a164a。Describe the expected behavior / 预期结果
每次成功写出只包含当前 JSON 文档,缩小时去除旧尾部,保证后续消费者可解析。保留已有文件权限及新文件的 0600 创建模式。
Related log / screenshot / 日志
修复前:三个较短重写子场景文件大小仍为 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 保持一个源提交。