Skip to content

[BUG] dubbo计算revision的时候参与计算的参数过少,导致无法正确区分不同服务 #3223

@yangpixi

Description

@yangpixi

✅ 验证清单

  • 🔍 我已经搜索过 现有 Issues,确信这不是重复问题

🚀 Go 版本

1.24.0

📦 Dubbo-go 版本

v3.3.2

🖥️ 服务端配置

dubbo-go, v3.3.2

💻 客户端配置

dubbo-go, v3.3.2

🌐 协议配置

Triple

📋 注册中心配置

Nacos v2.4.3

💾 操作系统

🍎 macOS

📝 Bug 描述

目前revision计算代码:

func resolveRevision(urls []*common.URL) string {
	if len(urls) == 0 {
		return "0"
	}
	candidates := make([]string, 0, len(urls))

	for _, u := range urls {
		sk := u.GetParam(constant.InterfaceKey, "")

		if len(u.Methods) == 0 {
			candidates = append(candidates, sk)
		} else {
			for _, m := range u.Methods {
				// methods are part of candidates
				candidates = append(candidates, sk+constant.KeySeparator+m)
			}
		}

		// append url params if we need it
	}
	sort.Strings(candidates)

	// it's nearly impossible to be overflow
	res := uint64(0)
	for _, c := range candidates {
		res += uint64(crc32.ChecksumIEEE([]byte(c)))
	}
	return fmt.Sprint(res)
}

该代码仅会计算方法名称,忽略了version等的计算,导致开启两个不同版本的示例会导致冲突。
该方法注释上说dubbo-java忽略了params,实际并未忽略。(dubbo-java的revision计算方式更新过)

🔄 重现步骤

为两个provider的方法设置不同版本,会产生覆盖。

✅ 预期行为

不同版本的方法应该正确隔离。

❌ 实际行为

当两个provider提供的方法版本不一致的时候,会导致冲突。

💡 可能的解决方案

计算revision的时候参考dubbo-java的代码

Metadata

Metadata

Assignees

Type

No fields configured for Bug.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions