Pull Request已成功合入, 合并人@CANN-robot
(感谢 LQ_oy 的贡献)变更摘要
该 PR 主要修复单边通信场景下 channel 与 socket 资源的释放问题。此前各 channel 析构时通过 SocketMgr::PutSocket 归还 socket,且依赖的 socketConfig_ 指针指向的是 BuildSocket 内的栈上局部配置对象,析构时可能已失效。本次改动将归还语义改为按配置销毁:SocketMgr 新增 DestroySocket(const Hccl::SocketConfig&) 重载,并引入引用计数机制;各 channel 在 BuildSocket 时通过新增的 socketConfigHolder_ 持有 SocketConfig 副本,保证 socketConfig_ 在整个生命周期内有效,析构时统一调用 DestroySocket,仅在引用计数归零时真正销毁 socket。
主要改动
- 析构改为按配置销毁 socket:
AicpuTsP2pChannel、AicpuTsRoceChannelV2、AicpuTsUboeUbRtpChannelHelper、AicpuTsUrmaChannel、HostCpuRoceChannel、HostCpuUrmaChannel、AivUrmaChannel的析构/回收逻辑从PutSocket(socketConfig_, socket_)改为SocketMgr::DestroySocket(*socketConfig_),并增加socketConfig_ != nullptr判断,确保单边通信结束时释放 socket 资源。 - 新增
socketConfigHolder_持有配置副本:多个 channel 的BuildSocket中通过std::make_unique<Hccl::SocketConfig>保存 socket 配置的拷贝并赋值给socketConfig_,避免socketConfig_指向函数内临时对象导致析构时悬垂。 SocketMgr新增DestroySocket(const SocketConfig&)并引入引用计数:GetSocket在命中或新建 socket 时对refCount_自增;新接口按配置查找 socket,释放占用标记并通知等待者,refCount_减一后仅在归零时调用socket->Destroy()并移除socketInUseMap_与socketMap_中的记录,未找到时仅告警不报错。SocketConfig增加mutable refCount_字段:socket_config.h新增由SocketMgr维护的引用计数字段(mutable以支持作为unordered_map的 const key 时修改),且不参与 hash/equal 比较。


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.
You can self-configure the PR merge rules for this repository. For more details, please refer to Here.
For more, you also can visit HICANN.
PR Approval Progress
✅ Congratulations! All modules have met the lgtm and approve requirements.
Module Approval Details
| module | lgtm status | approve status |
|---|---|---|
| src/base_comm | ✅ 孙哲芃, 欧阳茜, 严正行 (3/2) | ✅ 孙哲芃 (1/1) |
| src/base_comm/resources/endpoint_pairs/channels/channel.h | ✅ 严正行, 欧阳茜 (2/2) | ✅ 严正行 (1/1) |
| test | ✅ 孙哲芃, 欧阳茜, 严正行 (3/2) | ✅ 孙哲芃 (1/1) |
💡 Tip:
- Committer can comment
/approveor/lgtm- Commenting
/approveimplies both code review (lgtm) and intent to merge (approve)
CLA Signature Pass
LQ_OY, thanks for your pull request. All authors of the commits have signed the CLA. 👍


/approve


/lgtm


描述
memcache故障场景,2P 2D,client端销毁重建链,重建链失败,server端白名单配额耗尽,当前HcommChannelDestroy时,没有进行socket资源的销毁,需要对socket资源进行引用计数统计,进行资源销毁。
变更类型
请选择本次引入的变更类型:
关联的Issue
测试
已完成的测试用例和场景:
补充的UT用例:
UT 变更说明
文件:ut_socket_process.cc(复用既有 SocketProcessTest 测试夹具与 ResetSocketMgrForTest、StubSocketMgrHrtGetDeviceCountNoDevice 等辅助函数,无需改动 CMakeLists)。
新增两个辅助函数(匿名命名空间内):
BuildRefCountConfig(tag):构造一个 SocketConfig,不同 tag 即不同 key,避免相互影响。
InsertSocketEntryForRefCount(mgr, config, refCount):直接向 socketMap_/socketInUseMap_ 预置一个未 Listen/Connect 的 Hccl::Socket(Destroy() 为空操作),绕过真实建链,聚焦验证引用计数逻辑。
新增 3 个用例:
用例 覆盖点
1、Ut_SocketMgr_RefCount_TwoDestroySocket_RemoveAtZero 复用路径 GetSocket 使 refCount 1→2;首次 DestroySocket 减到 1(entry 仍在),再次 DestroySocket 归 0 后才从 socketMap_ 移除
2、Ut_SocketMgr_DestroySocket_MissConfig_NotAffectOtherEntries DestroySocket 未命中 config 时不影响其他 entry 的引用计数
3、Ut_SocketMgr_PutSocket_RefCount_Pairing GetSocket 递增 refCount 并置借用标记,PutSocket 对称递减并释放借用标记
要点说明:用例①按"已有 holder 持引用(refCount=1)并已释放借用,第二个 holder 复用同一 socket"建模,因复用路径在借用标记为 true 时会阻塞等待,单纯串行 GetSocket 两次无法达到 refCount=2。
文档更新
合入检查