This is an automated email from the ASF dual-hosted git repository.

laurence pushed a commit to branch 1.5
in repository https://gitbox.apache.org/repos/asf/dubbo-go.git


The following commit(s) were added to refs/heads/1.5 by this push:
     new 874f43d  Ftr: compatible with lower versions registering "default." 
keys (#1444)
874f43d is described below

commit 874f43d7832336a51bb151995b0e5dd24f7e6956
Author: ChangedenChan <[email protected]>
AuthorDate: Sat Oct 2 16:01:20 2021 +0800

    Ftr: compatible with lower versions registering "default." keys (#1444)
    
    * 兼容Java低版本的"default."前缀风格
    
    * 调试集成测试
    
    * 调试集成测试
    
    * 回滚代码
    
    * 调整格式
    
    * 优化代码
    
    Co-authored-by: Changeden <[email protected]>
---
 common/constant/key.go               |  3 ++-
 common/url.go                        | 10 ++++++++++
 common/url_test.go                   | 10 ++++++++++
 protocol/invocation/rpcinvocation.go |  7 +++++++
 4 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/common/constant/key.go b/common/constant/key.go
index 917a74b..731fcd1 100644
--- a/common/constant/key.go
+++ b/common/constant/key.go
@@ -49,8 +49,9 @@ const (
        PORT_KEY                 = "port"
        PROTOCOL_KEY             = "protocol"
        PATH_SEPARATOR           = "/"
+       SSL_ENABLED_KEY          = "ssl-enabled"
+       DEFAULT_KEY_PREFIX       = "default."
        //DUBBO_KEY                = "dubbo"
-       SSL_ENABLED_KEY = "ssl-enabled"
 )
 
 const (
diff --git a/common/url.go b/common/url.go
index cdbf20b..18d0a1e 100644
--- a/common/url.go
+++ b/common/url.go
@@ -260,6 +260,16 @@ func NewURL(urlString string, opts ...Option) (*URL, 
error) {
                return &s, perrors.Errorf("url.ParseQuery(raw url string{%s}),  
error{%v}", serviceUrl.RawQuery, err)
        }
 
+       // compatible "default." prefix
+       for key, value := range s.params {
+               if strings.HasPrefix(key, constant.DEFAULT_KEY_PREFIX) && 
len(value) > 0 {
+                       key = key[len(constant.DEFAULT_KEY_PREFIX):]
+                       if s.params.Get(key) == "" {
+                               s.params.Set(key, value[0])
+                       }
+               }
+       }
+
        s.PrimitiveURL = urlString
        s.Protocol = serviceUrl.Scheme
        s.Username = serviceUrl.User.Username()
diff --git a/common/url_test.go b/common/url_test.go
index c645f1a..a062150 100644
--- a/common/url_test.go
+++ b/common/url_test.go
@@ -421,3 +421,13 @@ func TestCompareURLEqualFunc(t *testing.T) {
 func CustomCompareURLEqual(l *URL, r *URL, execludeParam ...string) bool {
        return l.PrimitiveURL == r.PrimitiveURL
 }
+
+func TestURLWithLowerVersion(t *testing.T) {
+       url1, _ := 
NewURL("dubbo://127.0.0.1:20880/com.xxx.XxxService?default.version=1.0.0&default.group=test")
+       url2, _ := 
NewURL("dubbo://127.0.0.1:20880/com.xxx.XxxService?version=1.0.0&group=test")
+       url3, _ := 
NewURL("dubbo://127.0.0.1:20880/com.xxx.XxxService?default.version=1.0.1&default.group=test1&version=1.0.0&group=test")
+       assert.Equal(t, url1.GetParam(constant.VERSION_KEY, ""), "1.0.0")
+       assert.Equal(t, url1.GetParam(constant.GROUP_KEY, ""), "test")
+       assert.True(t, url1.URLEqual(url2))
+       assert.True(t, url2.URLEqual(url3))
+}
diff --git a/protocol/invocation/rpcinvocation.go 
b/protocol/invocation/rpcinvocation.go
index 0f879c0..8edba62 100644
--- a/protocol/invocation/rpcinvocation.go
+++ b/protocol/invocation/rpcinvocation.go
@@ -165,6 +165,13 @@ func (r *RPCInvocation) SetAttachments(key string, value 
interface{}) {
        if r.attachments == nil {
                r.attachments = make(map[string]interface{})
        }
+       // compatible "default." prefix
+       if strings.HasPrefix(key, constant.DEFAULT_KEY_PREFIX) {
+               key = key[len(constant.DEFAULT_KEY_PREFIX):]
+               if _, ok := r.attachments[key]; ok { // ignore common key when 
key existed
+                       return
+               }
+       }
        r.attachments[key] = value
 }
 

Reply via email to