Skip to content

fix: sub task race condition - #11846

Draft
askyrie wants to merge 1 commit into
v6.6from
fix_sub_rsc_66
Draft

fix: sub task race condition#11846
askyrie wants to merge 1 commit into
v6.6from
fix_sub_rsc_66

Conversation

@askyrie

@askyrie askyrie commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

This PR is for:

  • Server

@askyrie

askyrie commented Aug 6, 2026

Copy link
Copy Markdown
Contributor Author

@claude review下当前pr,用中文回复。

@claude

claude Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Claude finished @askyrie's task in 7m 58s —— View job


待办

  • 阅读仓库说明和 PR 上下文
  • 审查变更文件并分析潜在问题
  • 用中文整理并发布 review 结论

Review 结论

我重点看了这次为 kubernetesGatherTaskMap 增加并发保护的几处改动:

  • server/controller/cloud/cloud.go:281-287
  • server/controller/cloud/cloud.go:476-479
  • server/controller/cloud/cloud.go:510-512
  • server/controller/cloud/cloud.go:531-534
  • server/controller/cloud/cloud.go:558-562
  • server/controller/cloud/kubernetes.go:31-33
  • server/controller/cloud/sub_domain.go:38-43
  • server/controller/cloud/sub_domain.go:53-55

目前我没有看到阻塞性的正确性问题

这次修改把 Cloud 层对 kubernetesGatherTaskMap 的几个关键读路径都收敛到了加锁访问:

  • GetKubernetesGatherTaskMap() 改成在读锁内复制 map,避免把可变 map 直接暴露出去;
  • getKubernetesData() / getSubDomainDataByLcuuid() 先在锁内取出 task;
  • getSubDomainData() 先在锁内做快照,再在锁外遍历处理资源;
  • 写路径在 runKubernetesGatherTask() 中继续通过互斥锁保护增删替换。

从这几个访问点来看,这个修复方向是对的,能够避免之前最容易出现的 concurrent map read/write / concurrent map iteration and map write 问题。

建议

非阻塞建议:后续如果方便,最好补一个并发回归测试,覆盖 sub-domain 增删与 GetResource() / GetKubernetesGatherResource() 并发访问的场景;这类问题人工 review 能看出大方向,但配合 -race 会更稳。

验证情况

  • 已人工检查本次变更及相关调用点。
  • 我尝试运行 go test ./server/controller/cloud/...,但当前环境未放行该命令,所以这次没有实际跑到测试。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant