You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by la...@apache.org on 2021/11/12 08:16:23 UTC
[dubbo-go] branch bugfix-3.0 created (now 6111d1a)
This is an automated email from the ASF dual-hosted git repository.
laurence pushed a change to branch bugfix-3.0
in repository https://gitbox.apache.org/repos/asf/dubbo-go.git.
at 6111d1a fix: some bugs
This branch includes the following new commits:
new 6111d1a fix: some bugs
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
[dubbo-go] 01/01: fix: some bugs
Posted by la...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
laurence pushed a commit to branch bugfix-3.0
in repository https://gitbox.apache.org/repos/asf/dubbo-go.git
commit 6111d1a82daf3e42c33267468f6409e3c1a837af
Author: LaurenceLiZhixin <38...@qq.com>
AuthorDate: Fri Nov 12 16:16:10 2021 +0800
fix: some bugs
---
common/proxy/proxy.go | 31 ++++++++++++++++++++++++-------
config_center/nacos/listener.go | 2 +-
go.mod | 4 ++--
go.sum | 8 ++++----
protocol/dubbo3/dubbo3_invoker.go | 19 +++++++++++++++++--
protocol/dubbo3/dubbo3_protocol.go | 8 +-------
registry/base_registry.go | 6 +++---
remoting/zookeeper/listener.go | 2 +-
8 files changed, 53 insertions(+), 27 deletions(-)
diff --git a/common/proxy/proxy.go b/common/proxy/proxy.go
index e1c6222..c32eedc 100644
--- a/common/proxy/proxy.go
+++ b/common/proxy/proxy.go
@@ -19,6 +19,7 @@ package proxy
import (
"context"
+ "errors"
"reflect"
"sync"
)
@@ -116,13 +117,6 @@ func DefaultProxyImplementFunc(p *Proxy, v common.RPCService) {
valueOf := reflect.ValueOf(v)
valueOfElem := valueOf.Elem()
- typeOf := valueOfElem.Type()
-
- // check incoming interface, incoming interface's elem must be a struct.
- if typeOf.Kind() != reflect.Struct {
- logger.Errorf("The type of RPCService(=\"%T\") must be a pointer of a struct.", v)
- return
- }
makeDubboCallProxy := func(methodName string, outs []reflect.Type) func(in []reflect.Value) []reflect.Value {
return func(in []reflect.Value) []reflect.Value {
@@ -227,6 +221,18 @@ func DefaultProxyImplementFunc(p *Proxy, v common.RPCService) {
}
}
+ if err := refectAndMakeObjectFunc(valueOfElem, makeDubboCallProxy); err != nil {
+ logger.Errorf("The type or combination type of RPCService %T must be a pointer of a struct. error is %s", v, err)
+ return
+ }
+}
+
+func refectAndMakeObjectFunc(valueOfElem reflect.Value, makeDubboCallProxy func(methodName string, outs []reflect.Type) func(in []reflect.Value) []reflect.Value) error {
+ typeOf := valueOfElem.Type()
+ // check incoming interface, incoming interface's elem must be a struct.
+ if typeOf.Kind() != reflect.Struct {
+ return errors.New("invalid type kind")
+ }
numField := valueOfElem.NumField()
for i := 0; i < numField; i++ {
t := typeOf.Field(i)
@@ -258,6 +264,17 @@ func DefaultProxyImplementFunc(p *Proxy, v common.RPCService) {
// do method proxy here:
f.Set(reflect.MakeFunc(f.Type(), makeDubboCallProxy(methodName, funcOuts)))
logger.Debugf("set method [%s]", methodName)
+ } else if f.IsValid() && f.CanSet() {
+ // for struct combination
+ valueOfSub := reflect.New(t.Type)
+ valueOfElemInterface := valueOfSub.Elem()
+ if valueOfElemInterface.Type().Kind() == reflect.Struct {
+ if err := refectAndMakeObjectFunc(valueOfElemInterface, makeDubboCallProxy); err != nil {
+ return err
+ }
+ f.Set(valueOfElemInterface)
+ }
}
}
+ return nil
}
diff --git a/config_center/nacos/listener.go b/config_center/nacos/listener.go
index 3d60d2a..a4cf589 100644
--- a/config_center/nacos/listener.go
+++ b/config_center/nacos/listener.go
@@ -22,6 +22,7 @@ import (
)
import (
+ constant2 "github.com/nacos-group/nacos-sdk-go/common/constant"
"github.com/nacos-group/nacos-sdk-go/vo"
)
@@ -30,7 +31,6 @@ import (
"dubbo.apache.org/dubbo-go/v3/common/logger"
"dubbo.apache.org/dubbo-go/v3/config_center"
"dubbo.apache.org/dubbo-go/v3/remoting"
- constant2 "github.com/nacos-group/nacos-sdk-go/common/constant"
)
func callback(listener config_center.ConfigurationListener, _, _, dataId, data string) {
diff --git a/go.mod b/go.mod
index 30d3bb8..b8081b2 100644
--- a/go.mod
+++ b/go.mod
@@ -13,8 +13,8 @@ require (
github.com/creasty/defaults v1.5.2
github.com/dubbogo/go-zookeeper v1.0.3
github.com/dubbogo/gost v1.11.19
- github.com/dubbogo/grpc-go v1.42.4-triple
- github.com/dubbogo/triple v1.1.2
+ github.com/dubbogo/grpc-go v1.42.5-triple
+ github.com/dubbogo/triple v1.1.3
github.com/emicklei/go-restful/v3 v3.7.1
github.com/fsnotify/fsnotify v1.5.1
github.com/ghodss/yaml v1.0.0
diff --git a/go.sum b/go.sum
index 2fbdc68..a98656a 100644
--- a/go.sum
+++ b/go.sum
@@ -177,13 +177,13 @@ github.com/dubbogo/gost v1.11.12/go.mod h1:vIcP9rqz2KsXHPjsAwIUtfJIJjppQLQDcYaZT
github.com/dubbogo/gost v1.11.18/go.mod h1:vIcP9rqz2KsXHPjsAwIUtfJIJjppQLQDcYaZTy/61jI=
github.com/dubbogo/gost v1.11.19 h1:R1rZ3TNJKV9W5XHLMv+GDO2Wy6UDnwGQtVWbsWYvo0A=
github.com/dubbogo/gost v1.11.19/go.mod h1:vIcP9rqz2KsXHPjsAwIUtfJIJjppQLQDcYaZTy/61jI=
-github.com/dubbogo/grpc-go v1.42.4-triple h1:ysiabUrEGcaeXgnjSBT0bB1M7EexSJFiO0Mebg/Iqa4=
-github.com/dubbogo/grpc-go v1.42.4-triple/go.mod h1:F1T9hnUvYGW4JLK1QNriavpOkhusU677ovPzLkk6zHM=
+github.com/dubbogo/grpc-go v1.42.5-triple h1:Ed5z/ikkpdZHBMA4mTEthQFTQeKlHtkdAsQrZjTbFk8=
+github.com/dubbogo/grpc-go v1.42.5-triple/go.mod h1:F1T9hnUvYGW4JLK1QNriavpOkhusU677ovPzLkk6zHM=
github.com/dubbogo/jsonparser v1.0.1/go.mod h1:tYAtpctvSP/tWw4MeelsowSPgXQRVHHWbqL6ynps8jU=
github.com/dubbogo/net v0.0.4/go.mod h1:1CGOnM7X3he+qgGNqjeADuE5vKZQx/eMSeUkpU3ujIc=
github.com/dubbogo/triple v1.0.9/go.mod h1:1t9me4j4CTvNDcsMZy6/OGarbRyAUSY0tFXGXHCp7Iw=
-github.com/dubbogo/triple v1.1.2 h1:7lmQ0uNvcIYlMj5gNwPQadFx8w8UDEtcYl4DL6X+idM=
-github.com/dubbogo/triple v1.1.2/go.mod h1:x+H41M5yP1ULnJu4b+o8VrgsIKdTPslTum2yUqA9N1I=
+github.com/dubbogo/triple v1.1.3 h1:XKSh42lE2HLud++g4Fif7XY2hSMEsohFpegZPvsNXVQ=
+github.com/dubbogo/triple v1.1.3/go.mod h1:suMeAfZliq0p/lWIytgEdiuKcRlmeJC9pYeNHVE7FWU=
github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
diff --git a/protocol/dubbo3/dubbo3_invoker.go b/protocol/dubbo3/dubbo3_invoker.go
index c978f85..da42a32 100644
--- a/protocol/dubbo3/dubbo3_invoker.go
+++ b/protocol/dubbo3/dubbo3_invoker.go
@@ -27,6 +27,8 @@ import (
)
import (
+ "github.com/dubbogo/grpc-go/metadata"
+
tripleConstant "github.com/dubbogo/triple/pkg/common/constant"
triConfig "github.com/dubbogo/triple/pkg/config"
"github.com/dubbogo/triple/pkg/triple"
@@ -134,7 +136,19 @@ func (di *DubboInvoker) Invoke(ctx context.Context, invocation protocol.Invocati
}
// append interface id to ctx
- ctx = context.WithValue(ctx, tripleConstant.CtxAttachmentKey, invocation.Attachments())
+ gRPCMD := make(metadata.MD, 0)
+ for k, v := range invocation.Attachments() {
+ if str, ok := v.(string); ok {
+ gRPCMD.Set(k, str)
+ continue
+ }
+ if str, ok := v.([]string); ok {
+ gRPCMD.Set(k, str...)
+ continue
+ }
+ logger.Warnf("triple attachment value with key = %s is invalid, which should be string or []string", k)
+ }
+ ctx = metadata.NewOutgoingContext(ctx, gRPCMD)
ctx = context.WithValue(ctx, tripleConstant.InterfaceKey, di.BaseInvoker.GetURL().GetParam(constant.InterfaceKey, ""))
in := make([]reflect.Value, 0, 16)
in = append(in, reflect.ValueOf(ctx))
@@ -146,8 +160,9 @@ func (di *DubboInvoker) Invoke(ctx context.Context, invocation protocol.Invocati
methodName := invocation.MethodName()
triAttachmentWithErr := di.client.Invoke(methodName, in, invocation.Reply())
result.Err = triAttachmentWithErr.GetError()
+ result.Attrs = make(map[string]interface{})
for k, v := range triAttachmentWithErr.GetAttachments() {
- result.Attachment(k, v)
+ result.Attrs[k] = v
}
result.Rest = invocation.Reply()
return &result
diff --git a/protocol/dubbo3/dubbo3_protocol.go b/protocol/dubbo3/dubbo3_protocol.go
index 3e097c7..2ad3dff 100644
--- a/protocol/dubbo3/dubbo3_protocol.go
+++ b/protocol/dubbo3/dubbo3_protocol.go
@@ -190,13 +190,7 @@ func (d *UnaryService) GetReqParamsInterfaces(methodName string) ([]interface{},
}
func (d *UnaryService) InvokeWithArgs(ctx context.Context, methodName string, arguments []interface{}) (interface{}, error) {
- dubboAttachment := make(map[string]interface{})
- tripleAttachment, ok := ctx.Value(tripleConstant.TripleAttachement).(tripleCommon.TripleAttachment)
- if ok {
- for k, v := range tripleAttachment {
- dubboAttachment[k] = v
- }
- }
+ dubboAttachment, _ := ctx.Value(tripleConstant.TripleAttachement).(tripleCommon.DubboAttachment)
res := d.proxyImpl.Invoke(ctx, invocation.NewRPCInvocation(methodName, arguments, dubboAttachment))
return res, res.Error()
}
diff --git a/registry/base_registry.go b/registry/base_registry.go
index 7ac9f2b..c6151e8 100644
--- a/registry/base_registry.go
+++ b/registry/base_registry.go
@@ -358,7 +358,7 @@ func (r *BaseRegistry) consumerRegistry(c *common.URL, params url.Values, f crea
rawURL string
err error
)
- dubboPath = fmt.Sprintf("/%s/%s/%s", r.URL.GetParam(constant.RegistryGroupKey, "dubbo"), r.service(c), common.DubboNodes[common.PROVIDER])
+ dubboPath = fmt.Sprintf("/%s/%s/%s", r.URL.GetParam(constant.RegistryGroupKey, "dubbo"), r.service(c), common.DubboNodes[common.CONSUMER])
if f != nil {
err = f(dubboPath)
@@ -412,7 +412,7 @@ func (r *BaseRegistry) Subscribe(url *common.URL, notifyListener NotifyListener)
listener.Close()
break
} else {
- logger.Infof("[Zookeeper Registry] update begin, service event: %v", serviceEvent.String())
+ logger.Debugf("[Zookeeper Registry] update begin, service event: %v", serviceEvent.String())
notifyListener.Notify(serviceEvent)
}
}
@@ -443,7 +443,7 @@ func (r *BaseRegistry) UnSubscribe(url *common.URL, notifyListener NotifyListene
listener.Close()
break
} else {
- logger.Infof("[Zookeeper Registry] update begin, service event: %v", serviceEvent.String())
+ logger.Debugf("[Zookeeper Registry] update begin, service event: %v", serviceEvent.String())
notifyListener.Notify(serviceEvent)
}
}
diff --git a/remoting/zookeeper/listener.go b/remoting/zookeeper/listener.go
index b4a2503..fbe4749 100644
--- a/remoting/zookeeper/listener.go
+++ b/remoting/zookeeper/listener.go
@@ -175,7 +175,7 @@ func (l *ZkEventListener) handleZkNodeEvent(zkPath string, children []string, li
for _, n := range newChildren {
newNode = path.Join(zkPath, n)
- logger.Infof("[Zookeeper Listener] add zkNode{%s}", newNode)
+ logger.Debugf("[Zookeeper Listener] add zkNode{%s}", newNode)
content, _, connErr := l.client.Conn.Get(newNode)
if connErr != nil {
logger.Errorf("Get new node path {%v} 's content error,message is {%v}",