| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
fix: dflow对aclInit重复初始化场景做兼容处理 Co-authored-by: lining23666<lining.li@huawei.com> # message auto-generated for no-merge-commit merge: !4441 merge fix/dflow-acl-repeat-init into develop fix: dflow对aclInit重复初始化场景做兼容处理 Created-by: lining23666 Commit-by: lining23666 Merged-by: cann-robot Description: # Pull Request ## 描述 dflow 两处 aclInit 调用(dflow_api.cc 的 DFlowInitialize 和 engine_daemon.cc 的 InitializeWithArgs)用进程内局部 acl_initialized flag 判断是否已初始化,存在两个问题: ### 问题1:重复初始化被误判为致命错误 当同进程其他组件已调过 aclInit() 时,dflow 重复调用会得到 ACL_ERROR_REPEAT_INITIALIZE(100002),被 ret != ACL_SUCCESS 误判为致命错误返回 FAILED。按 ACL 文档定义,此返回码表示"重复初始化或重复加载",ACL 已处于正确的已初始化状态,不应视为错误。 ### 问题2:重复初始化场景下误调用 aclFinalize aclInit 返回 ACL_ERROR_REPEAT_INITIALIZE 时表示外部已初始化 ACL,但 dflow 仍将 acl_initialized 置为 true,导致 DFlowFinalize/EngineDaemon::Finalize 时调用 aclFinalize 把外部初始化的 ACL 给 teardown 了。 ### 修复方案 1. **兼容重复初始化**:两处调用点将 ACL_ERROR_REPEAT_INITIALIZE 当成功处理(置 acl_initialized = true,继续执行),同时失败日志补充 acl 返回码便于定位 2. **正确管理 ACL 生命周期**:引入 acl_owned_by_dflow 标志区分 ACL 生命周期归属,仅当 dflow 自己 aclInit 成功(返回 ACL_SUCCESS)时才置 true,Finalize 时仅在该标志为 true 时才调用 aclFinalize | 场景 | aclInit 返回 | acl_owned_by_dflow | Finalize 时调 aclFinalize? | |------|---------------|---------------------|-------------------------------| | dflow 自己初始化 | ACL_SUCCESS | true | 是 | | 外部已初始化 | ACL_ERROR_REPEAT_INITIALIZE | false | 否 | | 初始化失败 | 其他错误码 | false | 否 | ## 变更类型 - [x] 🐛 Bug 修复 ## 关联的Issue ## 如何测试 ### UT(ut_libge_helper_utest) 1. DFlowInitialize_acl_repeat_init:mock aclInit 返回 ACL_ERROR_REPEAT_INITIALIZE,断言 DFlowInitialize 返回 SUCCESS,且 DFlowFinalize 后不调用 aclFinalize 2. DFlowInitialize_acl_init_failed:mock aclInit 返回 ACL_ERROR_INVALID_PARAM,断言 DFlowInitialize 返回 FAILED,且不调用 aclFinalize 3. TestEngineDaemonAclRepeatInit:同上,针对 EngineDaemon::InitializeWithArgs 4. TestEngineDaemonAclInitFailed:同上,针对 EngineDaemon::InitializeWithArgs ### ST(helper_runtime_test) 1. DataFlowApiTest.DFlowInitialize_acl_repeat_init:同 UT 场景1 2. DataFlowApiTest.DFlowInitialize_acl_init_failed:同 UT 场景2 3. STEST_helper_runtime.TestEngineDaemonAclRepeatInit:同 UT 场景3 4. STEST_helper_runtime.TestEngineDaemonAclInitFailed:同 UT 场景4 ### 覆盖率 UT 和 ST 新增分支覆盖率均为 **100%**(4/4 分支),覆盖了 ACL_SUCCESS、ACL_ERROR_REPEAT_INITIALIZE、其他错误码三个路径。 ### 回归验证 - UT 28 个相关用例全部通过 - ST 8 个相关用例全部通过 ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 无 See merge request: cann/ge!4441 | 30 天前 | |
fix: dflow对aclInit重复初始化场景做兼容处理 Co-authored-by: lining23666<lining.li@huawei.com> # message auto-generated for no-merge-commit merge: !4441 merge fix/dflow-acl-repeat-init into develop fix: dflow对aclInit重复初始化场景做兼容处理 Created-by: lining23666 Commit-by: lining23666 Merged-by: cann-robot Description: # Pull Request ## 描述 dflow 两处 aclInit 调用(dflow_api.cc 的 DFlowInitialize 和 engine_daemon.cc 的 InitializeWithArgs)用进程内局部 acl_initialized flag 判断是否已初始化,存在两个问题: ### 问题1:重复初始化被误判为致命错误 当同进程其他组件已调过 aclInit() 时,dflow 重复调用会得到 ACL_ERROR_REPEAT_INITIALIZE(100002),被 ret != ACL_SUCCESS 误判为致命错误返回 FAILED。按 ACL 文档定义,此返回码表示"重复初始化或重复加载",ACL 已处于正确的已初始化状态,不应视为错误。 ### 问题2:重复初始化场景下误调用 aclFinalize aclInit 返回 ACL_ERROR_REPEAT_INITIALIZE 时表示外部已初始化 ACL,但 dflow 仍将 acl_initialized 置为 true,导致 DFlowFinalize/EngineDaemon::Finalize 时调用 aclFinalize 把外部初始化的 ACL 给 teardown 了。 ### 修复方案 1. **兼容重复初始化**:两处调用点将 ACL_ERROR_REPEAT_INITIALIZE 当成功处理(置 acl_initialized = true,继续执行),同时失败日志补充 acl 返回码便于定位 2. **正确管理 ACL 生命周期**:引入 acl_owned_by_dflow 标志区分 ACL 生命周期归属,仅当 dflow 自己 aclInit 成功(返回 ACL_SUCCESS)时才置 true,Finalize 时仅在该标志为 true 时才调用 aclFinalize | 场景 | aclInit 返回 | acl_owned_by_dflow | Finalize 时调 aclFinalize? | |------|---------------|---------------------|-------------------------------| | dflow 自己初始化 | ACL_SUCCESS | true | 是 | | 外部已初始化 | ACL_ERROR_REPEAT_INITIALIZE | false | 否 | | 初始化失败 | 其他错误码 | false | 否 | ## 变更类型 - [x] 🐛 Bug 修复 ## 关联的Issue ## 如何测试 ### UT(ut_libge_helper_utest) 1. DFlowInitialize_acl_repeat_init:mock aclInit 返回 ACL_ERROR_REPEAT_INITIALIZE,断言 DFlowInitialize 返回 SUCCESS,且 DFlowFinalize 后不调用 aclFinalize 2. DFlowInitialize_acl_init_failed:mock aclInit 返回 ACL_ERROR_INVALID_PARAM,断言 DFlowInitialize 返回 FAILED,且不调用 aclFinalize 3. TestEngineDaemonAclRepeatInit:同上,针对 EngineDaemon::InitializeWithArgs 4. TestEngineDaemonAclInitFailed:同上,针对 EngineDaemon::InitializeWithArgs ### ST(helper_runtime_test) 1. DataFlowApiTest.DFlowInitialize_acl_repeat_init:同 UT 场景1 2. DataFlowApiTest.DFlowInitialize_acl_init_failed:同 UT 场景2 3. STEST_helper_runtime.TestEngineDaemonAclRepeatInit:同 UT 场景3 4. STEST_helper_runtime.TestEngineDaemonAclInitFailed:同 UT 场景4 ### 覆盖率 UT 和 ST 新增分支覆盖率均为 **100%**(4/4 分支),覆盖了 ACL_SUCCESS、ACL_ERROR_REPEAT_INITIALIZE、其他错误码三个路径。 ### 回归验证 - UT 28 个相关用例全部通过 - ST 8 个相关用例全部通过 ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 无 See merge request: cann/ge!4441 | 30 天前 | |
fix: precommit整改 Co-authored-by: yelongjian<yelongjian1@huawei.com> # message auto-generated for no-merge-commit merge: !3726 merge dev-precommit into develop fix: precommit整改 Created-by: yelongjian Commit-by: yelongjian Merged-by: cann-robot Description: # Pull Request ## 描述 precommit整改 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新功能 - [x] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: 1.NA ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如: feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/ge!3726 | 2 个月前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 30 天前 | ||
| 30 天前 | ||
| 2 个月前 |