已合并
修复共享锁问题 #213
修复共享锁问题 #213
已合并
wenjinhust创建于 6月22日
wenjinhust
wenjinhust
6月22日

1. 合入背景

请描述为什么要做这个PR内的改动。
如涉及,请关联前序PR或同特性/需求下的其他PR。
如果是修复之前PR引入的问题,请关联引入问题的PR。
请通过#ISSUE ID关联issue。
注意:Fixes #ISSUE ID会自动关闭issue,如问题部分解决请不要使用Fixes,可以用Fix part of #ISSUE ID替代.

Fixes #169

2. 修改内容

描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列。
如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容)。

  • 将 AddFaultNode()、RemoveFaultNode()、UpdateExtraInfo() 全部改为 std::unique_lockstd::shared_mutex

3. 资料变更

请确认是否涉及资料变更
如涉及,需要在PR中体现,并简要说明修改内容。
如不涉及,需填写“不涉及”。

  • 不涉及

4. 接口变更

请确认是否涉及跨代码仓或者客户面可见的接口变更
如涉及,需详细说明接口以及对应的变更内容,同时需要在资料中体现。
如不涉及,需填写“不涉及”。

  • 不涉及

5. 测试结果

需体现测试场景,测试方法以及测试结果
测试用例设计时需考虑硬件、部署方式、功能、性能、精度、显存等维度。

  • OK

6. CheckList

PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x]

[x] 代码注释完备

[x] 正确记录维测日志

[x] 是否有UT用例

likedislike
Pull Request已成功合入, 合并人@wangyang
(感谢 wenjinhust 的贡献)
ascend-robotascend-robot成员
6月22日 添加了label:stat/needs-squash
ascend-robotascend-robot成员
6月22日 添加了label:ascend-cla/yes
ascend-robot
ascend-robot成员
6月22日 评论:

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

⚠️ This PR does not yet meet the following requirements:lgtm (requires ≥ 2 person(s) per module)、approve (requires ≥ 1 person(s) per module)

Module Approval Details

module lgtm status approve status
repo-Ascend/MindIE-Motor ganglv (1/2)(You can also ask: 纪涛, dljzx, 吴铭泾, renxiaolong12, zhoujing101) ❌ (0/1)(You can also ask: 康宇昕, coding-lz, 柯展, guanxinghua, 王洋)

💡 Tip:

  • Committer can comment /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)

CLA Signature Pass

wenjinhust, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
ascend-robotascend-robot成员
6月22日 添加了label:ci-pipeline-running
ascend-robot
ascend-robot成员
6月22日 评论:

✅ 流水线任务触发成功(流水线编号: 1367),正在执行, 请稍候。 任务链接 点此跳转 ...

likedislike
ascend-robot
ascend-robot成员
6月22日 评论:

Ascend docs pipeline is running...

likedislike
ascend-robotascend-robot成员
6月22日 添加了label:docs-ci-pipeline-running
atomgit-bot
atomgit-bot
6月22日 评论:

变更摘要

本次 PR 主要修复 ClusterNodes.cpp 中三处共享锁误用问题:AddFaultNodeRemoveFaultNodeUpdateExtraInfo 原本使用 std::shared_lock(只读锁),却对 faultIdsfaultVirtualIdsvirtualToIdsMap 等成员容器进行了插入/删除/修改操作,存在并发数据竞争风险。修复方式是将这三处改为 std::unique_lock(写锁),确保写操作的线程安全性。其余改动为代码风格整理(include 顺序调整、函数签名格式化、缩进规范化、命名空间闭合注释)。

主要改动

  • AddFaultNode 锁类型修正:将 std::shared_lock 改为 std::unique_lock,该函数会向 faultVirtualIdsfaultIdsvirtualIdToDelTimeMapidToDelTimeMap 写入数据,必须持有写锁。
  • RemoveFaultNode 锁类型修正:将 std::shared_lock 改为 std::unique_lock,该函数会从 faultVirtualIdsfaultIdsvirtualIdToDelTimeMapidToDelTimeMapvirtualToIdsMap 中擦除数据,必须持有写锁。
  • UpdateExtraInfo 锁类型修正:将 std::shared_lock 改为 std::unique_lock,该函数会修改 InstanceInfo 内部字段以及 virtualToIdsMap 容器,必须持有写锁。
  • Include 顺序与代码格式整理ClusterNodes.h 移至首位(保证头文件自包含),标准库头文件与项目头文件分组;大量函数签名合并为一行,缩进/换行统一规范化。
likedislike
ascend-robot
ascend-robot成员
6月22日 评论:

✅ 跳过 docs ci 检查,没有需要检查的文档文件

likedislike
ascend-robotascend-robot成员
6月22日 删除了label:docs-ci-pipeline-running
ascend-robotascend-robot成员
6月22日 添加了label:docs-ci-pipeline-success
atomgit-bot
atomgit-bot
6月22日 评论:

代码审查

✅ 未发现问题

likedislike
wenjinhustwenjinhust
6月22日 修改了pull request 的描述
ascend-robotascend-robot成员
6月22日 删除了label:ci-pipeline-running
ascend-robotascend-robot成员
6月22日 添加了label:ci-pipeline-failed
wenjinhust
wenjinhust
6月22日 评论:

/retry

likedislike
wenjinhust
wenjinhust
6月22日 评论:

retry

likedislike
ascend-robotascend-robot成员
6月22日 删除了label:ci-pipeline-failed
ascend-robotascend-robot成员
6月22日 添加了label:ci-pipeline-running
ascend-robotascend-robot成员
6月22日 删除了label:ci-pipeline-running
ascend-robotascend-robot成员
6月22日 添加了label:ci-pipeline-passed
ascend-robot
ascend-robot成员
6月22日 评论:
流水线 PR-pipeline_MindIE-Motor_gitcode#1367 (重试第1次) [ commitID:5a648c6c ] 已完成
>>>代码风格自动修复执行成功(无修复内容)
阶段 任务名 状态 详情
编译构建 Build_linux_x86_abi1 >>>
Build_linux_arm_abi1 >>>
Build_linux_arm_abi0 >>>
恶意代码检查 Antipoison >>>
开源片段检查 SCA >>>
pre-commit >>>
开发者测试 UT_linux_x86_ms >>>
流水线 PR-pipeline_MindIE-Motor_gitcode >>>
此流水线已支持下列评论快捷指令,仅PR创建者和白名单成员评论有效
  • compile : 运行流水线
  • retry : 重试流水线所有失败子任务
  • retry <任务名> : 仅重试指定失败子任务
  • stop : 停止流水线
likedislike
ganglv成员
6月22日 评论:

/lgtm

likedislike
zhoujing
zhoujing成员6月22日进行代码检视2
mindie_motor/src/coordinator/cluster_monitor/ClusterNodes.cpp
@@ -143,2 +132,2 @@
143-{
144- std::shared_lock<std::shared_mutex> lock(mtx);
132+void ClusterNodes::RemoveFaultNode(uint64_t id) {
133+ std::unique_lock<std::shared_mutex> lock(mtx);
zhoujing
zhoujing6月22日评论:

unique_lock:独占锁。同一时刻,只有一个线程可以持有该锁并访问资源。
shared_lock:共享锁。同一时刻,多个线程可以同时持有该锁。

可能出现以前可以正常取锁,修改后变为阻塞。造成的影响需评估后再修改。

likedislike
wenjinhust
wenjinhust
6月22日 评论:

经检视,这些函数的往上调用点,均未对mtx进行加锁。
这3个函数内部实现简单,也不存在重复加锁的情况

zhoujingzhoujing成员
6月27日 解决了最后一个问题
wangyangwangyang成员
6月27日 关闭了关联的issue
wangyangwangyang成员
6月27日 合入了pull request