Repository navigation
Conversation
|
ea1c657 to
9b4062f
Compare
robocanic
left a comment
There was a problem hiding this comment.
审查意见
整体方向(让 ZK/Nacos 的 discovery 与 governor 支持 affinity / script 规则)没有问题,但发现以下需要处理的问题:
1. 回归:condition / tag 规则的布尔值保护被移除(高置信度)
pkg/governor/zk/governor.go:141-146、pkg/governor/nacos2/governor.go:181-186:新增的marshalRule对非 affinity/script 的 kind 直接走yaml.Marshal(r.ResourceSpec()),不再调用meshresource.MarshalRuleSpec。- 而
MarshalRuleSpec正是 #1595(preserve condition and tag rule boolean values)为ConditionRoute/TagRoute引入的:protobuf 的 JSON tag 带omitempty,enabled/force/runtime = false会被省略,运行时对“缺省”和“显式 false”的处理不同。 - 现在
CreateRule/UpdateRule写 ZK / Nacos 时又会丢掉enabled: false等字段,等于把 #1595 的修复回滚了;同时MarshalRuleSpec在非测试代码中已没有调用方。 - 建议:
marshalRule的 default 分支改为meshresource.MarshalRuleSpec(r.ResourceSpec())(或让EncodeRule的 default 分支调用它),并把两个 governor 中重复的marshalRule合并到meshresource包中。
2. 缺失测试(与 PR 描述不一致)
- PR 描述写明“add focused ZooKeeper factory and governor coverage”,并列出了
go test ./pkg/discovery/zk ./pkg/governor/zk;但最终 diff 中没有任何测试文件——2be080f8把pkg/discovery/zk/factory_test.go、pkg/governor/zk/governor_test.go整个删掉了。我在 PR head 上执行go test ./pkg/governor/... ./pkg/discovery/...,这些包均为[no test files]。 - 本 PR 新增的关键逻辑完全没有覆盖:
zkConfigName的路径解析、ensurePath、UpdateRule在ErrNoNode时回退Create、affinity/script 的 upsert/delete 分发、GetConfigAndUpdateStore的新分支。上面第 1 点的回归如果有测试(condition/tag 的enabled:false写入内容断言)本可以被发现。 - 建议至少补:
zkConfigName表驱动测试;marshalRule对 condition/tag(enabled/force/runtime=false仍存在)与 affinity/script 的输出断言。
3. 兼容性:所有 ZK 规则的存储路径由 /dubbo/config/<name> 改为 /dubbo/config/dubbo/<name>
pkg/discovery/zk/factory.go:149-157、pkg/governor/zk/governor.go:148-154:路径变更对既有的 configurators / condition-router / tag-router 也生效,不只是新增的两种规则。zkConfigName只接受 4 段分组路径,升级后之前写在扁平路径/dubbo/config/<name>下的规则不会再被发现,在控制台 Update 也会在新路径创建一个新节点,旧的扁平节点会残留在 ZK 中且不再被管理。- 按 Dubbo 3 的分组路径是合理的,但这是对现有用户的行为变更,建议在 PR 描述里明确说明(或提供兼容读取 / 迁移说明),并补上对应测试。
|
之前好像把 #1595 的部分内容覆盖了,我起个zk看下现在的情况 |
AsperforMias
left a comment
There was a problem hiding this comment.
LGTM
本地用 ZooKeeper 3.9.6 走了真实 RuleGovernor.CreateRule / UpdateRule 再读回节点:condition/tag 的显式 enabled/force/runtime: false 会保留;affinity/script 显式 false 同样保留。#1595 指出的 yaml.Marshal / omitempty 回归路径不在当前 governor 写入链上。
缺省(省略)affinity/script enabled 会被规范化成 true 再发布——这是有意行为,不等于冲掉显式 false。CI 也全绿。
AlexStocks
left a comment
There was a problem hiding this comment.
结论:整体质量高,有一处语义变更需要确认后再合入
25 个文件,changed_files=25 与 Diff 一致。新增 affinity / script 两类路由规则的 Console API、编解码、版本历史与回滚,并补齐 ZooKeeper / Nacos 的 governor 与 discovery 支持。
做得好的地方
RuleResourceKinds同步加入了AffinityRouteKind/ScriptRouteKind,ZK 订阅者的 upsert / delete 与extractRuleEventContext都补齐了,链路完整。createRule/updateRule在加锁前统一调用ValidateRule,避免把非法规则写进历史版本。validRouterRuleName返回 400,与既有的condition_rule.go约定一致,没有另造一套。RouterRuleSearchResp特意不回传脚本文本,只在详情接口返回,减少了列表接口的数据暴露面。
P2 · enabled 的默认值从「省略」翻转为 true
DecodeRule 现在对 Affinity 和 Script 都先执行 res.Spec.Enabled = true,只有 YAML 显式给出 enabled 时才覆盖;EncodeRule 也改成始终写出 Enabled。注释给出的理由是「consumer 对省略值处理不安全」,对 ScriptRouter 来说这个理由成立。
但对 Affinity 而言,这会把历史上省略 enabled 的存量配置从「运行时按 false 处理」变成「下次写入后变成 true」。也就是说,管理员只是在 Console 里打开并保存一次规则,就可能把一条原本未启用的规则真正启用。这是可观察的行为变化,建议确认:
- dubbo-go 的 AffinityRouter 对缺省
enabled的实际处理确实是 false 吗? - 如果是,是否需要在迁移时保留「来源是省略」的信息,而不是统一归一化为 true?
如果这是有意为之(比如线上从未依赖省略语义),请在 PR 描述里明确写出,避免升级方误判。
P3 · 两个 Search 的错误处理不一致
SearchAffinityRules 在 PageListByIndexes 失败时包装成 bizerror.InternalError 并记录日志;SearchScriptRules 直接 return nil, err。两者行为应该一致,否则同一类后端错误在两个接口上会呈现不同的业务码。
P3 · GetScriptRule 缺少日志
GetAffinityRule 在出错时会 logger.Warnf,GetScriptRule 直接返回。不影响正确性,但排障时两条路径的可观测性不一致。
|



Scope
Consolidates the original config-center work in #1553 with the Console API work from #1554.
falsevalues for existing condition/tag router booleans.ZooKeeper compatibility
Rules use the canonical grouped path
/dubbo/config/dubbo/<name>. The legacy flat path/dubbo/config/<name>is intentionally neither read nor modified; existing flat entries remain untouched and must be migrated explicitly if needed.Verification
go test ./pkg/core/resource/apis/mesh/v1alpha1 ./pkg/governor/zk ./pkg/governor/nacos2 ./pkg/discovery/zk ./pkg/console/router ./pkg/console/serviceSupersedes #1554.