Pull Request已成功合入, 合并人@CANN-robot
(感谢 GengChao 的贡献)Thanks for your pull-request.
The full list of commands accepted by me can be found at here。
You can get sig-info at here
PR Approval Progress
✅ Congratulations! All modules have met the lgtm and approve requirements.
Module Approval Details
| module | lgtm status | approve status |
|---|---|---|
| repo-cann/ge | ✅ tangqunzhang, yangyongqiang0606, stevenaw0 (3/2) | ✅ yangyongqiang0606 (1/1) |
💡 Tip:
- Committer can comment
/approveor/lgtm- Commenting
/approveimplies both code review (lgtm) and intent to merge (approve)


compile


流水线任务触发成功
任务链接 [fb82f07a41e14db7b0b5856cfb09e538][流水线指导]
| 任务名称 | 状态 | 日志 | 下载链接 |
|---|---|---|---|
| pre_comment | ✅ SUCCESS | >>>>> | |
| Compile_X86_compiler | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_X86_executor | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_X86_dflow | ✅ SUCCESS | >>>>> | >>>>> |
| UT_Test_dflow | ✅ SUCCESS | ||
| UT_Test_ge_common | ✅ SUCCESS | ||
| UT_Test_parser | ✅ SUCCESS | ||
| UT_Test_python | ✅ SUCCESS | >>>>> | |
| UT_Test_rt | ✅ SUCCESS | ||
| UT_Test_acl | ✅ SUCCESS | ||
| UT_Test_autofuse | ✅ SUCCESS | ||
| UT_Test_executor | ✅ SUCCESS | ||
| UT_Test_autofuse_ascendc_api | ✅ SUCCESS | ||
| ST_Test_dflow | ✅ SUCCESS | ||
| ST_Test_ge_common | ✅ SUCCESS | ||
| ST_Test_parser | ✅ SUCCESS | ||
| ST_Test_python | ✅ SUCCESS | >>>>> | |
| ST_Test_rt | ✅ SUCCESS | ||
| ST_Test_autofuse | ✅ SUCCESS | ||
| ST_Test_executor | ✅ SUCCESS | ||
| ST_Test_hetero | ✅ SUCCESS | ||
| ST_Test_autofuse_ascendc_api | ✅ SUCCESS | ||
| ST_Test_autofuse_e2e | ✅ SUCCESS | ||
| UT_Test_fe | ✅ SUCCESS | ||
| UT_Test_tefusion | ✅ SUCCESS | ||
| ST_Test_fe | ✅ SUCCESS | ||
| ST_Test_tefusion | ✅ SUCCESS | ||
| ST_Test_ge_common_atc | ✅ SUCCESS | ||
| UT_Test_Report_graphengine | ✅ SUCCESS | >>>>> | |
| UT_Test_Report_ge_executor_c | ✅ SUCCESS | >>>>> | |
| UT_Test_Report_ge_autofuse | ✅ SUCCESS | >>>>> | |
| ST_Test_Report_graphengine | ✅ SUCCESS | >>>>> | |
| ST_Test_Report_ge_executor_c | ✅ SUCCESS | >>>>> | |
| ST_Test_Report_ge_autofuse | ✅ SUCCESS | >>>>> | |
| UT_Test_Report_fe | ✅ SUCCESS | >>>>> | |
| ST_Test_Report_fe | ✅ SUCCESS | >>>>> |
[2026-06-25 21:38:42] CI执行结束


流水线任务触发成功
任务链接 [d35368bb78184d5a9f3f82f16da06fb5][流水线指导]
| 任务名称 | 状态 | 日志 | 下载链接 |
|---|---|---|---|
| pre_comment | ✅ SUCCESS | >>>>> | |
| Compile_ARM_compiler | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_ARM_executor | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_ARM_dflow | ✅ SUCCESS | >>>>> | >>>>> |
| API_Check | ✅ SUCCESS | >>>>> | |
| PreSmoke_A900_npupool | ✅ SUCCESS | >>>>> |
[2026-06-25 21:32:21] CI执行结束


根据 PR 标题、描述及代码变更分析,此 PR 主要针对 cmake/generate_es_package.cmake 进行了两项修复性改动:一是修复 issue #466 中脚本缓存导致 --asan=false 配置不生效的问题;二是添加 es_gen_esb_serial job pool 以串行化 gen_esb 相关构建,避免 ar 和 ld 的文件竞态。
变更摘要
此变更主要修复了 generate_es_package.cmake 中锁脚本(run_gen_esb_with_lock.sh)因缓存陈旧导致 ASan 配置变更不生效的问题(issue #466),同时新增了构建 job pool 机制用于串行化 gen_esb 及其依赖的编译链接,以消除高负载下的文件竞态风险。
主要改动
- 修复脚本缓存导致
--asan=false不生效(issue #466):将锁脚本生成状态的跟踪机制改为GLOBAL property(_ES_LOCK_SCRIPT_GENERATED),该 property 不会被写入CMakeCache.txt,确保每次 CMake 配置时都会重新生成脚本,使ENABLE_ASAN等配置变更即时生效 - 新增
es_gen_esb_serialjob pool:通过set_property(GLOBAL PROPERTY JOB_POOLS es_gen_esb_serial=1)定义全局 job pool,并为gen_esb、gen_esb_impl、geir_collector等 target 以及代码生成自定义命令设置JOB_POOL/JOB_POOL_COMPILE/JOB_POOL_LINK属性,实现串行化构建,避免并行ar和ld产生的文件竞态


流水线任务触发成功
任务链接 [ca18ea57e1074140a63821df57e73bf4][流水线指导]
| 任务名称 | 状态 | 日志 | 下载链接 |
|---|---|---|---|
| codecheck_Pr | ✅ SUCCESS | ||
| codecheck | ✅ SUCCESS | >>>>> | |
| antipoison | ✅ SUCCESS | >>>>> | |
| SCA | ✅ SUCCESS | >>>>> | |
| codecheck_dt | ✅ SUCCESS | >>>>> | |
| codecheck_precommit | ⚠️ WARNING | >>>>> | >>>>> |
| StaticCheck_codespell_check | ✅ SUCCESS | ||
| StaticCheck_link_validity_check | ✅ SUCCESS | ||
| StaticCheck_resource_existence_check | ✅ SUCCESS | ||
| StaticCheck_tag_closed_check | ✅ SUCCESS | ||
| StaticCheck_markdownlint | ✅ SUCCESS |
[2026-06-25 21:31:25] CI执行结束


代码审查
审查结束总结
变更文件:1 个
| 文件 | 审查结果 |
|---|---|
cmake/generate_es_package.cmake |
发现 1 个 P3 问题(过时的提示信息) |
按严重程度统计:
| 严重程度 | 数量 |
|---|---|
| P0 | 0 |
| P1 | 0 |
| P2 | 0 |
| P3 | 1 |
整体风险评估:低风险。
本次变更正确地解决了 issue #466 中描述的两个问题:
-
脚本缓存陈旧导致
--asan=false不生效 — 通过将文件存在性检查 (if (NOT EXISTS ...)) 改为基于 GLOBAL property 的每进程一次性生成策略,确保每次 cmake 配置都会重新生成run_gen_esb_with_lock.sh,使 ENABLE_ASAN 变更即时反映到脚本中。 -
ASAN "nested bug" 退出码 1 不被重试逻辑覆盖 — 在 ASAN 启用时增加了对退出码 1 的重试支持,与已有的 SIGSEGV(退出码 139)重试逻辑一致。
唯一的小瑕疵是最终失败提示中仍保留了"先移除缓存的 run_gen_esb_with_lock.sh"的过时指引,这对功能没有影响,仅在排查体验上可能造成轻微混淆。除此之外,该变更在逻辑正确性、Shell 脚本转义、CMake 变量作用域等方面均无问题。
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 0 |
| 🟡 建议 | 1 |
💬 仅评论


🔵 Low Priority
变更行:第 328 行(生成的 shell 脚本内容)。
本次修复将脚本生成条件从 if (NOT EXISTS ${ES_LOCK_SCRIPT}) 改为基于 GLOBAL property 的每 cmake 进程一次生成(第 185-190 行),使得脚本在每次 cmake 配置时都会重新生成,不再存在"脚本缓存陈旧"的问题。
建议:移除括号中的 "(after removing the cached run_gen_esb_with_lock.sh)",或改为提示用户需要重新执行 cmake 配置让脚本重新生成。
| 328
| - log_debug \" re-run with --asan=false ( |
|
328 | + log_debug \" re-run with --asan=false (re-run cmake to regenerate this script) to confirm.\" |


/lgtm


/lgtm


【MR评价】评价分数:3,
评价意见:
编码规范遵守度:无编码规范问题;
代码设计:不涉及代码设计;
DT质量:基本逻辑DT测试覆盖充足;


/approve


描述
本次 PR 修复 issue #466 报告的两个子问题,涉及
run_gen_esb_with_lock.sh(由cmake/generate_es_package.cmake自动生成)的构建脚本缺陷。在 openEuler 24.03 LTS (x86_64) 环境下,
run_test.sh在 x86 架构默认开启 ASAN,导致 UT 在编译阶段gen_esb崩溃(AddressSanitizer: nested bug),0 用例执行,外部开发者按文档直接执行即可复现。变更类型
关联的Issue
#466
修复内容
1. 重试逻辑盲区(issue #466 子问题2)
run_gen_esb_with_lock.sh的重试逻辑原仅覆盖退出码 139/126/127,ASAN 在 nested bug 场景下返回退出码 1 被判为Non-retriable直接放弃,导致 x86 默认 ASAN 下 UT 编译即失败。gen_esb真实逻辑错误)2. 脚本缓存陈旧(issue #466 子问题3)
run_gen_esb_with_lock.sh原由if (NOT EXISTS ${ES_LOCK_SCRIPT})文件保护,首次 cmake 配置后 ASAN 开关被烘焙进脚本内容,--asan=false形同虚设,必须rm -rf build_ut(或删除该脚本)才能生效。GLOBAL property控制脚本生成:每个 cmake 进程都重新生成一次(property 不写入 CMakeCache.txt),同一 cmake 进程内多个 ES package 调用不重复生成ENABLE_ASAN等开关变化即时反映到脚本,无需手动清理构建目录如何测试
bash tests/run_test.sh --ut=ge_common,观察 ASAN nested bug(退出码 1)是否触发重试而非直接放弃cmake配置(ASAN=true)→ 检查build_ut/cmake/run_gen_esb_with_lock.sh含"true" == "true"分支--asan=false重新cmake→ 脚本应自动更新为"" == "true"分支(无需删除脚本)bash -n语法校验,且退出码判定行为符合预期(ASAN=ON 时 exit 1 可重试,ASAN=OFF 时 exit 1 保持 Non-retriable)核对清单
其他信息
gen_esb处理stub_geir_ops时的内存缺陷根因)不在本次 PR 范围,需单独排查gen_esb源码cmake/generate_es_package.cmake一个文件(+17/-2)ENABLE_ASAN=true时生效