phpcyy opened a new issue, #3159:
URL: https://github.com/apache/dubbo-go/issues/3159

   ### ✅ 验证清单
   
   - [x] 🔍 我已经搜索过 [现有 
Issues](https://github.com/apache/dubbo-go/issues),确信这不是重复问题
   
   ### 🚀 Go 版本
   
   1.25.5
   
   ### 📦 Dubbo-go 版本
   
   v3.3.1
   
   ### 🖥️ 服务端配置
   
   _No response_
   
   ### 💻 客户端配置
   
   _No response_
   
   ### 🌐 协议配置
   
   _No response_
   
   ### 📋 注册中心配置
   
   _No response_
   
   ### 💾 操作系统
   
   🍎 macOS
   
   ### 📝 Bug 描述
   
   客户端程序运行调用 triple 协议,服务会崩溃,报错「fatal error: concurrent map writes」
   
   
   ### 🔄 重现步骤
   
   ```
   func TestClone(t *testing.T) {
        u1, _ := 
NewURL("dubbo://127.0.0.1:20000/com.ikurento.user.UserProvider?interface=com.ikurento.user.UserProvider&group=&version=2.6.0&configVersion=1.0")
   
        u1.SetAttribute("hello", "world")
   
        for i := 0; i < 1000; i++ {
                go func() {
                        u1.Clone()
                }()
        }
        time.Sleep(2 * time.Second)
   }
   ```
   
   执行 `go test -trimpath -race -v -run TestClone  -timeout 30s | head -n 100`
   
   运行结果
   
   ```
   === RUN   TestClone
   ==================
   WARNING: DATA RACE
   Write at 0x00c0000a1920 by goroutine 34:
     runtime.mapaccess2_faststr()
         internal/runtime/maps/runtime_faststr_swiss.go:162 +0x29c
     dubbo.apache.org/dubbo-go/v3/common.(*URL).SetAttribute()
         dubbo.apache.org/dubbo-go/v3/common/url.go:568 +0x100
     dubbo.apache.org/dubbo-go/v3/common.(*URL).Clone.func2()
         dubbo.apache.org/dubbo-go/v3/common/url.go:883 +0x4c
     dubbo.apache.org/dubbo-go/v3/common.(*URL).RangeAttributes()
         dubbo.apache.org/dubbo-go/v3/common/url.go:893 +0x144
     dubbo.apache.org/dubbo-go/v3/common.(*URL).Clone()
         dubbo.apache.org/dubbo-go/v3/common/url.go:882 +0x148
     dubbo.apache.org/dubbo-go/v3/common.TestClone.func1()
         dubbo.apache.org/dubbo-go/v3/common/url_test.go:421 +0x2c
   ```
   
   ### ✅ 预期行为
   
   代码正常运行,无并发问题。
   
   ### ❌ 实际行为
   
   提示 Data Race,有并发问题。
   
   ### 💡 可能的解决方案
   
   修复 Clone() 逻辑,去掉 copier.Copy() 的浅拷贝,通过加锁和直接赋值避免 map 的浅拷贝。


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to