You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by al...@apache.org on 2020/09/04 16:05:45 UTC
[dubbo-go-hessian2] 01/01: revert zhantu interface{} attachment
This is an automated email from the ASF dual-hosted git repository.
alexstocks pushed a commit to branch fix/1.6.3-zhantu
in repository https://gitbox.apache.org/repos/asf/dubbo-go-hessian2.git
commit f73922387446d1230c781eb05b48db28085d85d3
Author: AlexStocks <al...@foxmail.com>
AuthorDate: Sat Sep 5 00:05:39 2020 +0800
revert zhantu interface{} attachment
---
contributing.md | 40 +++++++++++++++++++++++++++++++++++++++-
hessian.go | 6 ++----
hessian_test.go | 16 +---------------
request.go | 18 +++++++++---------
request_test.go | 8 ++++----
response.go | 22 ++++++++++------------
response_test.go | 5 +----
7 files changed, 66 insertions(+), 49 deletions(-)
diff --git a/contributing.md b/contributing.md
index 15c9610..5130151 100644
--- a/contributing.md
+++ b/contributing.md
@@ -1,4 +1,4 @@
-Contributing to Hessian2 Protocol Go Implementation
+Contributing to Dubbogo
## 1. Branch
@@ -24,3 +24,41 @@ The title format of the pull request `MUST` follow the following rules:
>- Start with `Dep:` for adding depending libs.
>- Start with `Rem:` for removing feature/struct/function/member/files.
+## 3. Code Style
+
+### 3.1 log
+
+>- 1 when logging the function's input parameter, you should add '@' before input parameter name.
+
+### 3.2 naming
+
+>- 1 do not use an underscore in package name, such as `filter_impl`.
+>- 2 do not use an underscore in constants, such as `DUBBO_PROTOCOL`. use 'DubboProtocol' instead.
+
+### 3.3 comment
+
+>- 1 there should be comment for every export func/var.
+>- 2 the comment should begin with function name/var name.
+
+### 3.4 import
+
+We dubbogo import blocks should be splited into 3 blocks.
+
+```Go
+// block 1: the go internal package
+import (
+ "fmt"
+)
+
+// block 2: the third package
+import (
+ "github.com/dubbogo/xxx"
+
+ "github.com/RoaringBitmap/roaring"
+)
+
+// block 3: the dubbo-go package
+import (
+ "github.com/apache/dubbo-go/common"
+)
+```
\ No newline at end of file
diff --git a/hessian.go b/hessian.go
index 6527604..c80345c 100644
--- a/hessian.go
+++ b/hessian.go
@@ -21,9 +21,7 @@ import (
"bufio"
"encoding/binary"
"time"
-)
-import (
perrors "github.com/pkg/errors"
)
@@ -218,7 +216,7 @@ func (h *HessianCodec) ReadBody(rspObj interface{}) error {
}
// ignore body, but only read attachments
-func (h *HessianCodec) ReadAttachments() (map[string]interface{}, error) {
+func (h *HessianCodec) ReadAttachments() (map[string]string, error) {
if h.reader.Buffered() < h.bodyLen {
return nil, ErrBodyNotEnough
}
@@ -237,7 +235,7 @@ func (h *HessianCodec) ReadAttachments() (map[string]interface{}, error) {
if err = unpackRequestBody(NewDecoderWithSkip(buf[:]), rspObj); err != nil {
return nil, perrors.WithStack(err)
}
- return rspObj[6].(map[string]interface{}), nil
+ return rspObj[6].(map[string]string), nil
case PackageResponse:
rspObj := &Response{}
if err = unpackResponseBody(NewDecoderWithSkip(buf[:]), rspObj); err != nil {
diff --git a/hessian_test.go b/hessian_test.go
index 6f89f0b..653bdfb 100644
--- a/hessian_test.go
+++ b/hessian_test.go
@@ -23,9 +23,7 @@ import (
"reflect"
"testing"
"time"
-)
-import (
"github.com/stretchr/testify/assert"
)
@@ -192,11 +190,10 @@ func TestRequest(t *testing.T) {
}
func TestHessianCodec_ReadAttachments(t *testing.T) {
- RegisterPOJO(&AttachObject{})
body := &Response{
RspObj: &CaseB{A: "A", B: CaseA{A: "a", B: 1, C: Case{A: "c", B: 2}}},
Exception: nil,
- Attachments: map[string]interface{}{DUBBO_VERSION_KEY: "2.6.4", "att": AttachObject{Id: 23, Name: "haha"}},
+ Attachments: map[string]string{DUBBO_VERSION_KEY: "2.6.4"},
}
resp, err := doTestHessianEncodeHeader(t, PackageResponse, Response_OK, body)
assert.NoError(t, err)
@@ -214,17 +211,6 @@ func TestHessianCodec_ReadAttachments(t *testing.T) {
attrs, err := codecR2.ReadAttachments()
assert.NoError(t, err)
assert.Equal(t, "2.6.4", attrs[DUBBO_VERSION_KEY])
- assert.Equal(t, AttachObject{Id: 23, Name: "haha"}, *(attrs["att"].(*AttachObject)))
- assert.NotEqual(t, AttachObject{Id: 24, Name: "nohaha"}, *(attrs["att"].(*AttachObject)))
t.Log(attrs)
}
-
-type AttachObject struct {
- Id int32
- Name string `dubbo:name`
-}
-
-func (AttachObject) JavaClassName() string {
- return "com.test.Test"
-}
diff --git a/request.go b/request.go
index c668fcb..bad438b 100644
--- a/request.go
+++ b/request.go
@@ -23,9 +23,7 @@ import (
"strconv"
"strings"
"time"
-)
-import (
perrors "github.com/pkg/errors"
)
@@ -151,13 +149,13 @@ func getArgsTypeList(args []interface{}) (string, error) {
type Request struct {
Params interface{}
- Attachments map[string]interface{}
+ Attachments map[string]string
}
// NewRequest create a new Request
-func NewRequest(params interface{}, atta map[string]interface{}) *Request {
+func NewRequest(params interface{}, atta map[string]string) *Request {
if atta == nil {
- atta = make(map[string]interface{})
+ atta = make(map[string]string)
}
return &Request{
Params: params,
@@ -327,22 +325,24 @@ func unpackRequestBody(decoder *Decoder, reqObj interface{}) error {
}
if v, ok := attachments.(map[interface{}]interface{}); ok {
v[DUBBO_VERSION_KEY] = dubboVersion
- req[6] = ToMapStringInterface(v)
+ req[6] = ToMapStringString(v)
return nil
}
return perrors.Errorf("get wrong attachments: %+v", attachments)
}
-func ToMapStringInterface(origin map[interface{}]interface{}) map[string]interface{} {
- dest := make(map[string]interface{})
+func ToMapStringString(origin map[interface{}]interface{}) map[string]string {
+ dest := make(map[string]string, len(origin))
for k, v := range origin {
if kv, ok := k.(string); ok {
if v == nil {
dest[kv] = ""
continue
}
- dest[kv] = v
+ if vv, ok := v.(string); ok {
+ dest[kv] = vv
+ }
}
}
return dest
diff --git a/request_test.go b/request_test.go
index 37ec48d..2b7f1f3 100644
--- a/request_test.go
+++ b/request_test.go
@@ -129,7 +129,7 @@ func TestIssue192(t *testing.T) {
tests := []struct {
name string
args args
- want map[string]interface{}
+ want map[string]string
}{
{
name: "not null",
@@ -140,7 +140,7 @@ func TestIssue192(t *testing.T) {
"": "",
},
},
- want: map[string]interface{}{
+ want: map[string]string{
"1": "",
"2": "3",
"": "",
@@ -149,8 +149,8 @@ func TestIssue192(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- if got := ToMapStringInterface(tt.args.origin); !reflect.DeepEqual(got, tt.want) {
- t.Errorf("ToMapStringInterface() = %v, want %v", got, tt.want)
+ if got := ToMapStringString(tt.args.origin); !reflect.DeepEqual(got, tt.want) {
+ t.Errorf("ToMapStringString() = %v, want %v", got, tt.want)
}
})
}
diff --git a/response.go b/response.go
index 910323b..ea7408f 100644
--- a/response.go
+++ b/response.go
@@ -37,13 +37,13 @@ import (
type Response struct {
RspObj interface{}
Exception error
- Attachments map[string]interface{}
+ Attachments map[string]string
}
// NewResponse create a new Response
-func NewResponse(rspObj interface{}, exception error, attachments map[string]interface{}) *Response {
+func NewResponse(rspObj interface{}, exception error, attachments map[string]string) *Response {
if attachments == nil {
- attachments = make(map[string]interface{})
+ attachments = make(map[string]string, 8)
}
return &Response{
RspObj: rspObj,
@@ -176,7 +176,7 @@ func unpackResponseBody(decoder *Decoder, resp interface{}) error {
return perrors.WithStack(err)
}
if v, ok := attachments.(map[interface{}]interface{}); ok {
- atta := ToMapStringInterface(v)
+ atta := ToMapStringString(v)
response.Attachments = atta
} else {
return perrors.Errorf("get wrong attachments: %+v", attachments)
@@ -201,7 +201,7 @@ func unpackResponseBody(decoder *Decoder, resp interface{}) error {
return perrors.WithStack(err)
}
if v, ok := attachments.(map[interface{}]interface{}); ok {
- response.Attachments = ToMapStringInterface(v)
+ response.Attachments = ToMapStringString(v)
} else {
return perrors.Errorf("get wrong attachments: %+v", attachments)
}
@@ -222,7 +222,7 @@ func unpackResponseBody(decoder *Decoder, resp interface{}) error {
return perrors.WithStack(err)
}
if v, ok := attachments.(map[interface{}]interface{}); ok {
- atta := ToMapStringInterface(v)
+ atta := ToMapStringString(v)
response.Attachments = atta
} else {
return perrors.Errorf("get wrong attachments: %+v", attachments)
@@ -338,9 +338,8 @@ var versionInt = make(map[string]int)
// https://github.com/apache/dubbo/blob/dubbo-2.7.1/dubbo-common/src/main/java/org/apache/dubbo/common/Version.java#L96
// isSupportResponseAttachment is for compatibility among some dubbo version
-func isSupportResponseAttachment(ver interface{}) bool {
- version, ok := ver.(string)
- if !ok || len(version) == 0 {
+func isSupportResponseAttachment(version string) bool {
+ if len(version) == 0 {
return false
}
@@ -358,9 +357,8 @@ func isSupportResponseAttachment(ver interface{}) bool {
return v >= LOWEST_VERSION_FOR_RESPONSE_ATTACHMENT
}
-func version2Int(ver interface{}) int {
- version, ok := ver.(string)
- if !ok || len(version) == 0 {
+func version2Int(version string) int {
+ if len(version) == 0 {
return 0
}
var v = 0
diff --git a/response_test.go b/response_test.go
index 5f0e07a..7299389 100644
--- a/response_test.go
+++ b/response_test.go
@@ -168,10 +168,7 @@ func TestCopySlice(t *testing.T) {
}
func TestIsSupportResponseAttachment(t *testing.T) {
- is := isSupportResponseAttachment("2.X")
- assert.False(t, is)
-
- is = isSupportResponseAttachment("2.0.10")
+ is := isSupportResponseAttachment("2.0.10")
assert.False(t, is)
is = isSupportResponseAttachment("2.5.3")