Merged
[fix] 通信域重复创建时 RPT_INPUT_ERR 补充规范报错 #4965
guanzhongkangAdd on Aug 31
[fix] 通信域重复创建时 RPT_INPUT_ERR 补充规范报错 #4965
Merged
guanzhongkangAdd on Aug 31
guanzhongkang
Aug 31

描述

通信域创建入口在 identifier 查重命中时,此前仅打印 HCCL_ERROR 日志,未向错误管理器上报 EI0003,用户侧拿不到带错误码的规范报错。本 PR 补充 RPT_INPUT_ERR 规范上报并顺带消除重复 find 查询:

  • 命中条件提为 commExists 变量,hcclGroupMap.find 只执行一次(RPT/CHK_PRT_RET 复用)
  • RPT_INPUT_ERR 按 EI0003 模板填参:value 填真实 identifier,expect 槽填期望值描述("an identifier that is not in use"),与模板 "The expected value is %s" 语义匹配
  • 上报范围收敛为 RootInfo 路径(评审讨论后确认该判断仅在 InitRootInfo 场景使用):保留 CreateCommConfigRootInfo / CommInitRootInfo / HcclCommInitRootInfoConfigV2 三处,ccl_op 统一填对外接口名 HcclCommInitRootInfo;ClusterInfo 路径(CreateCommConfig / HcclCommInitClusterInfoV2)不上报,保持原有 CHK_PRT_RET 查重报错行为不变
  • HCCL_ERROR 日志保持原样不动
  • EI0003 模板删除 "(operator name)" 括号注释(error_code.cc 与中英文档同步):本次 RPT_INPUT_ERR 上报的 ccl_op 槽位会直接渲染实际算子名,报错文案中已含算子名,模板中冗余的 "(operator name)" 注释不再需要。该模板变更为顺手修复,并非本 PR 主要目标,特此单独声明:EI0003 为通用模板,其余复用该错误码的上报点文案也会同步去掉该注释,请 committer 评审时一并确认影响面

变更类型

关联的Issue

NA

测试

已完成的测试用例和场景:

  1. HcclCommInitRootInfo 通信域重复创建场景下,确认 error manager 输出 EI0003 规范报错,含正确的 ccl_op(HcclCommInitRootInfo)/value/parameter/expect 四个槽位内容
  2. 正常通信域创建不受影响(查重不命中时不触发上报)
  3. ClusterInfo 路径(HcclCommInitClusterInfo / HcclCommInitClusterInfoConfig)重复创建行为与基线一致:仍打印 HCCL_ERROR 并返回 HCCL_E_PARA,无 EI0003 上报

补充的UT用例(位于 test/legacy/ut/framework/interface/op_base/ut_op_base_v2.cc,hccl_v2_utest 目标):

用例名 覆盖场景 断言点
Ut_HcclCommInitRootInfoV2_When_DuplicateCreation_Expect_Return_HCCL_E_PARA HcclCommInitRootInfoV2 相同 identifier 重复创建(首次创建成功后二次调用) 二次调用返回 HCCL_E_PARA;EI0003 上报触发且槽位正确
Ut_HcclCommInitRootInfoConfigV2_When_DuplicateCreation_Expect_Return_HCCL_E_PARA HcclCommInitRootInfoConfigV2 相同 hcclCommName 重复创建 同上,value 槽位为通信域名
Ut_CreateCommConfigRootInfo_When_DuplicateCreation_Expect_Return_HCCL_E_PARA CreateCommConfigRootInfo 内部查重分支(被外层入口查重遮蔽,预置 map 后直接调用) 返回 HCCL_E_PARA;EI0003 上报触发且槽位正确

用例通过 mock RptInputErr 捕获上报内容做断言(error_code=EI0003,ccl_op=HcclCommInitRootInfo,value=identifier,parameter=identifier),确保查重命中分支的规范上报行为被真实验证,而非仅断言返回值;查重不命中(首次创建)时断言不触发上报。

位置说明:

  • 检视意见提到的 test/ut/framework/communicator/ut_HcclCommInitRootInfo_API_test.cc 链接的 hccl_utest_framework_communicator 目标只含 ascend910 路径代码,不含本 PR 改动的 op_base_v2.cc(ascend950 V2 路径),故用例补在编译该文件的 hccl_v2_utest 目标下,与既有 OpbaseTestV2 用例同 fixture。
  • CreateCommConfigRootInfo 的查重分支被 HcclCommInitRootInfoConfigV2 入口查重遮蔽(公共 API 无法触达),采用预置 hcclGroupMap 后直接调用的方式覆盖。

执行结果:以 CI 门禁(/compile)UT 结果为准。

文档更新

  • docs/zh/error_codes/EI0003-Invalid_Argument_Collective_Communication_Operator.md
  • docs/en/error_codes/EI0003-Invalid_Argument_Collective_Communication_Operator.md

(内容:错误格式与报错示例中删除 "(operator name)" 注释,与 error_code.cc 中 EI0003 模板的变更保持同步)

合入检查

likedislike
Pull Request has been successfully merged by CANN-robot.
(Thank you for guanzhongkang's contribution.)
guanzhongkangguanzhongkang
Aug 31 Created pull request, commit f33ea55f
atomgit-bot
atomgit-bot
Aug 31 Comments:

变更摘要

本 PR 针对通信域重复创建场景修复规范报错缺失问题:此前 identifier 查重命中时仅打印 HCCL_ERROR 日志,未向错误管理器上报带错误码 EI0003 的规范报错,用户侧无法拿到结构化错误信息。改动将 op_base_v2.cc 中五个通信域创建入口的查重逻辑统一重构:先提取 commExists 布尔变量保存 hcclGroupMap.find 的结果,使 hcclGroupMap.find 只执行一次供 RPT_INPUT_ERR 上报与 CHK_PRT_RET 检查复用,消除重复查询;随后按 EI0003 模板补齐 RPT_INPUT_ERR 上报,其中 ccl_op 填实际入口函数名、value 填真实的 identifier/commId、expect 填期望值描述("not already in use"),与模板 "The expected value is %s" 语义匹配。查重不命中的正常创建流程不受影响。

主要改动

  • 提取 commExists 变量消除重复 find 查询: 在 CreateCommConfig、CreateCommConfigRootInfo、HcclCommInitClusterInfoV2、CommInitRootInfo、HcclCommInitRootInfoConfigV2 五个入口中,将 opbasedCommInfoV2.hcclGroupMap.find(...) 的判定结果提前存入 commExists,hcclGroupMap.find 仅执行一次,CHK_PRT_RET 改为复用该变量判断,避免重复查询 Group2Comm map。
  • 补充 RPT_INPUT_ERR EI0003 规范报错: 在查重命中(commExists 为 true)时调用 RPT_INPUT_ERR 按 EI0003 模板上报,填充 ccl_op/value/parameter/expect 四个槽位,使错误管理器输出含正确错误码与参数的规范报错;value 槽位按入口分别填入 commId 或 identifier 的真实值,ccl_op 填入对应入口函数名。
  • 覆盖五个通信域创建入口: 本次改动统一覆盖 CreateCommConfig(填 commId)、CreateCommConfigRootInfo(填 identifier)、HcclCommInitClusterInfoV2(填 HCCL_WORLD_GROUP 对应的 commId)、CommInitRootInfo(填 identifier)、HcclCommInitRootInfoConfigV2(填 identifier),保证各入口在重复创建时均能向用户侧返回带 EI0003 错误码的规范报错。
likedislike
Incorrect?
atomgit-bot
atomgit-bot
Aug 31 Comments:

代码审查

✅ 未发现问题

likedislike
Incorrect?
guanzhongkang
guanzhongkang
Aug 31 Comments:

/compile

likedislike
guanzhongkangguanzhongkang
Aug 31 Pre merge succeeded (commit_id: a45496c32ad7c84e0c6c1b8ad086ce8d3655036a)
182 messages are collapsed here。 See more
zangyanCollaborators
Sep 2 Comments:

/approve

likedislike
CANN-robotCANN-robotCollaborators
Sep 2 Added label: lgtmapproved
CANN-robot
CANN-robotCollaborators
Sep 2 Comments:

The MR can not be merged, because of CodeReview discussion not resolved

If you want to solve this problem, you can click here to do it in the FAQs.

likedislike
丁炜秦丁炜秦Collaborators
Sep 2 Resolved final issue
CANN-robotCANN-robotCollaborators
Sep 2 Merged pull request