Skip to content

fix: Make sure the new resource version is returned after update when using Nacos as storage#166

Merged
johnlanni merged 1 commit into
higress-group:mainfrom
CH3CHO:fix/nacos-resource-version
Jun 10, 2025
Merged

fix: Make sure the new resource version is returned after update when using Nacos as storage#166
johnlanni merged 1 commit into
higress-group:mainfrom
CH3CHO:fix/nacos-resource-version

Conversation

@CH3CHO
Copy link
Copy Markdown
Collaborator

@CH3CHO CH3CHO commented May 17, 2025

No description provided.

@CH3CHO CH3CHO requested a review from johnlanni as a code owner May 17, 2025 13:46
@lingma-agents
Copy link
Copy Markdown

lingma-agents Bot commented May 17, 2025

修复使用Nacos存储时更新后资源版本返回问题

变更文件

文件路径 变更说明
src/​apiserver/​pkg/​registry/​nacos_rest.go 在write方法中新增oldResourceVersion变量存储原始版本值,根据nacos写入结果决定最终版本:成功时使用新内容的MD5值,失败时恢复原版本。修改了旧有的直接调用写入的单行代码为条件分支结构。

时序图

sequenceDiagram
    participant CR as nacosREST.write
    participant WR as nacosREST.writeRaw
    CR->>CR: 保存oldResourceVersion
    CR->>WR: 调用writeRaw执行写入
    opt 写入成功
        WR-->>CR: 返回nil
        CR->>CR: 设置新MD5为资源版本
    else 写入失败
        WR-->>CR: 返回错误
        CR->>CR: 恢复oldResourceVersion
    end
Loading

💡 小贴士

与 lingma-agents 交流的方式

📜 直接回复评论
直接回复本条评论,lingma-agents 将自动处理您的请求。例如:

  • 在当前代码中添加详细的注释说明。

  • 请详细介绍一下你说的 LRU 改造方案,并使用伪代码加以说明。

📜 在代码行处标记
在文件的特定位置创建评论并 @lingma-agents。例如:

  • @Lingma-Agent 分析这个方法的性能瓶颈并提供优化建议。

  • @Lingma-Agent 对这个方法生成优化代码。

📜 在讨论中提问
在任何讨论中 @lingma-agents 来获取帮助。例如:

  • @Lingma-Agent 请总结上述讨论并提出解决方案。

  • @Lingma-Agent 请根据讨论内容生成优化代码。

Copy link
Copy Markdown

@lingma-agents lingma-agents Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔍 代码评审报告

📋 评审意见详情

💡 单文件建议

✅ 未发现需要特别关注的代码问题。

🚀 跨文件建议

以下是对代码架构和设计的综合分析,聚焦于跨文件交互、系统一致性和潜在优化空间。
🔍 1. 资源版本管理与存储后端架构的一致性问题

当前修改在Nacos存储适配器中引入了资源版本回滚逻辑(保存旧版本并在写入失败时恢复),但需要验证该设计是否与系统其他存储后端(如Etcd、MySQL等)的版本管理机制保持一致。若其他存储驱动未实现类似的版本回退机制,可能导致跨存储类型的资源版本管理不一致,破坏系统级的一致性保障。

📌 关键代码:

oldResourceVersion := accessor.GetResourceVersion()
...
if err == nil {
  accessor.SetResourceVersion(calculateMd5(content))
} else {
  accessor.SetResourceVersion(oldResourceVersion)
}

⚠️ 潜在风险: 若其他存储适配器未实现失败回滚逻辑,可能导致不同存储类型间资源版本管理不一致,引发跨环境部署时的版本冲突或数据不一致问题。

🔍 2. 资源版本状态管理的技术债务风险

当前通过临时变量保存旧版本并在错误分支恢复的实现方式,可能引发技术债务。若未来需要管理更多状态(如事务上下文、操作链路等),此类散落的变量操作将增加代码维护成本。建议考虑引入结构化状态管理对象或事务机制,以统一处理资源版本变更的原子性。

📌 关键代码:

oldResourceVersion := accessor.GetResourceVersion()
...
accessor.SetResourceVersion(oldResourceVersion)

⚠️ 潜在风险: 随着业务复杂度增加,分散的状态管理逻辑可能导致代码冗余和维护困难,增加未来重构成本。

🔍 3. 跨组件资源版本依赖的潜在不一致性

资源版本的更新逻辑变更可能影响依赖该版本的其他组件(如API服务器的乐观锁机制、缓存同步模块等)。需要验证系统中所有依赖ResourceVersion的组件是否能正确处理"写入失败时版本回退"的新行为,避免出现版本号与实际数据状态不匹配的情况。

⚠️ 潜在风险: 若存在未适配该变更的组件,可能导致缓存不一致、并发操作冲突或数据覆盖问题。


💡 小贴士

与 lingma-agents 交流的方式

📜 直接回复评论
直接回复本条评论,lingma-agents 将自动处理您的请求。例如:

  • 在当前代码中添加详细的注释说明。

  • 请详细介绍一下你说的 LRU 改造方案,并使用伪代码加以说明。

📜 在代码行处标记
在文件的特定位置创建评论并 @lingma-agents。例如:

  • @Lingma-Agent 分析这个方法的性能瓶颈并提供优化建议。

  • @Lingma-Agent 对这个方法生成优化代码。

📜 在讨论中提问
在任何讨论中 @lingma-agents 来获取帮助。例如:

  • @Lingma-Agent 请总结上述讨论并提出解决方案。

  • @Lingma-Agent 请根据讨论内容生成优化代码。

Copy link
Copy Markdown
Contributor

@johnlanni johnlanni left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@johnlanni johnlanni merged commit 758b548 into higress-group:main Jun 10, 2025
3 checks passed
@CH3CHO CH3CHO deleted the fix/nacos-resource-version branch June 10, 2025 13:23
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.

2 participants