This is an automated email from the ASF dual-hosted git repository.
alexstocks pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/dubbo-go.git
The following commit(s) were added to refs/heads/3.0 by this push:
new 9334da05f fix: more invokers with different path (#2000)
9334da05f is described below
commit 9334da05f3aecffe9573a0af109e781929282235
Author: Jason Peng <[email protected]>
AuthorDate: Tue Aug 2 19:08:32 2022 +0800
fix: more invokers with different path (#2000)
---
cluster/cluster/available/cluster_invoker_test.go | 13 +++++++++----
cluster/cluster/broadcast/cluster_invoker_test.go | 14 ++++++--------
cluster/cluster/failback/cluster_test.go | 8 ++++----
cluster/cluster/failfast/cluster_test.go | 6 +++---
cluster/cluster/failsafe/cluster_test.go | 6 +++---
cluster/cluster/forking/cluster_test.go | 10 ++++------
cluster/cluster/zoneaware/cluster_interceptor.go | 3 +--
cluster/cluster/zoneaware/cluster_invoker_test.go | 2 +-
cluster/router/chain/chain.go | 14 +++++++++++++-
cluster/router/tag/router.go | 1 -
cluster/router/tag/router_test.go | 6 ++++--
common/url.go | 11 ++++++++---
12 files changed, 56 insertions(+), 38 deletions(-)
diff --git a/cluster/cluster/available/cluster_invoker_test.go
b/cluster/cluster/available/cluster_invoker_test.go
index 70919e6b9..cf20230e0 100644
--- a/cluster/cluster/available/cluster_invoker_test.go
+++ b/cluster/cluster/available/cluster_invoker_test.go
@@ -19,6 +19,7 @@ package available
import (
"context"
+ "errors"
"fmt"
"strings"
"testing"
@@ -51,7 +52,8 @@ func registerAvailable(invoker *mock.MockInvoker)
protocol.Invoker {
invokers := []protocol.Invoker{}
invokers = append(invokers, invoker)
- invoker.EXPECT().GetUrl().Return(availableUrl)
+ invoker.EXPECT().GetUrl().Return(availableUrl).AnyTimes()
+ invoker.EXPECT().IsAvailable().Return(true).AnyTimes()
staticDir := static.NewDirectory(invokers)
clusterInvoker := availableCluster.Join(staticDir)
@@ -66,8 +68,8 @@ func TestAvailableClusterInvokerSuccess(t *testing.T) {
clusterInvoker := registerAvailable(invoker)
mockResult := &protocol.RPCResult{Rest: clusterpkg.Rest{Tried: 0,
Success: true}}
- invoker.EXPECT().IsAvailable().Return(true)
- invoker.EXPECT().Invoke(gomock.Any()).Return(mockResult)
+ invoker.EXPECT().IsAvailable().Return(true).AnyTimes()
+ invoker.EXPECT().Invoke(gomock.Any()).Return(mockResult).AnyTimes()
result := clusterInvoker.Invoke(context.Background(),
&invocation.RPCInvocation{})
@@ -81,7 +83,10 @@ func TestAvailableClusterInvokerNoAvail(t *testing.T) {
invoker := mock.NewMockInvoker(ctrl)
clusterInvoker := registerAvailable(invoker)
- invoker.EXPECT().IsAvailable().Return(false)
+ invoker.EXPECT().IsAvailable().Return(false).AnyTimes()
+
+ res := &protocol.RPCResult{Err: errors.New("no provider available")}
+ invoker.EXPECT().Invoke(gomock.Any()).Return(res).AnyTimes()
result := clusterInvoker.Invoke(context.TODO(),
&invocation.RPCInvocation{})
diff --git a/cluster/cluster/broadcast/cluster_invoker_test.go
b/cluster/cluster/broadcast/cluster_invoker_test.go
index 74cd8cf3e..bd09e9ee4 100644
--- a/cluster/cluster/broadcast/cluster_invoker_test.go
+++ b/cluster/cluster/broadcast/cluster_invoker_test.go
@@ -49,11 +49,9 @@ func registerBroadcast(mockInvokers ...*mock.MockInvoker)
protocol.Invoker {
extension.SetLoadbalance("random", random.NewRandomLoadBalance)
invokers := []protocol.Invoker{}
- for i, ivk := range mockInvokers {
+ for _, ivk := range mockInvokers {
invokers = append(invokers, ivk)
- if i == 0 {
- ivk.EXPECT().GetUrl().Return(broadcastUrl)
- }
+ ivk.EXPECT().GetUrl().Return(broadcastUrl).AnyTimes()
}
staticDir := static.NewDirectory(invokers)
@@ -72,7 +70,7 @@ func TestBroadcastInvokeSuccess(t *testing.T) {
for i := 0; i < 3; i++ {
invoker := mock.NewMockInvoker(ctrl)
invokers = append(invokers, invoker)
- invoker.EXPECT().Invoke(gomock.Any()).Return(mockResult)
+
invoker.EXPECT().Invoke(gomock.Any()).Return(mockResult).AnyTimes()
}
clusterInvoker := registerBroadcast(invokers...)
@@ -92,17 +90,17 @@ func TestBroadcastInvokeFailed(t *testing.T) {
for i := 0; i < 10; i++ {
invoker := mock.NewMockInvoker(ctrl)
invokers = append(invokers, invoker)
- invoker.EXPECT().Invoke(gomock.Any()).Return(mockResult)
+
invoker.EXPECT().Invoke(gomock.Any()).Return(mockResult).AnyTimes()
}
{
invoker := mock.NewMockInvoker(ctrl)
invokers = append(invokers, invoker)
- invoker.EXPECT().Invoke(gomock.Any()).Return(mockFailedResult)
+
invoker.EXPECT().Invoke(gomock.Any()).Return(mockFailedResult).AnyTimes()
}
for i := 0; i < 10; i++ {
invoker := mock.NewMockInvoker(ctrl)
invokers = append(invokers, invoker)
- invoker.EXPECT().Invoke(gomock.Any()).Return(mockResult)
+
invoker.EXPECT().Invoke(gomock.Any()).Return(mockResult).AnyTimes()
}
clusterInvoker := registerBroadcast(invokers...)
diff --git a/cluster/cluster/failback/cluster_test.go
b/cluster/cluster/failback/cluster_test.go
index 3b01e793b..4bf022f01 100644
--- a/cluster/cluster/failback/cluster_test.go
+++ b/cluster/cluster/failback/cluster_test.go
@@ -56,7 +56,7 @@ func registerFailback(invoker *mock.MockInvoker)
protocol.Invoker {
var invokers []protocol.Invoker
invokers = append(invokers, invoker)
- invoker.EXPECT().GetUrl().Return(failbackUrl)
+ invoker.EXPECT().GetUrl().Return(failbackUrl).AnyTimes()
staticDir := static.NewDirectory(invokers)
clusterInvoker := failbackCluster.Join(staticDir)
@@ -73,10 +73,10 @@ func TestFailbackSuceess(t *testing.T) {
invoker.EXPECT().GetUrl().Return(failbackUrl).AnyTimes()
- invoker.EXPECT().IsAvailable().Return(true)
+ invoker.EXPECT().IsAvailable().Return(true).AnyTimes()
mockResult := &protocol.RPCResult{Rest: clusterpkg.Rest{Tried: 0,
Success: true}}
- invoker.EXPECT().Invoke(gomock.Any()).Return(mockResult)
+ invoker.EXPECT().Invoke(gomock.Any()).Return(mockResult).AnyTimes()
result := clusterInvoker.Invoke(context.Background(),
&invocation.RPCInvocation{})
assert.Equal(t, mockResult, result)
@@ -121,7 +121,7 @@ func TestFailbackRetryOneSuccess(t *testing.T) {
wg.Wait()
assert.Equal(t, int64(0), clusterInvoker.taskList.Len())
- invoker.EXPECT().Destroy().Return()
+ invoker.EXPECT().Destroy().Return().AnyTimes()
clusterInvoker.Destroy()
assert.Equal(t, int64(0), clusterInvoker.taskList.Len())
diff --git a/cluster/cluster/failfast/cluster_test.go
b/cluster/cluster/failfast/cluster_test.go
index aa5dc6a83..ed34e684f 100644
--- a/cluster/cluster/failfast/cluster_test.go
+++ b/cluster/cluster/failfast/cluster_test.go
@@ -55,7 +55,7 @@ func registerFailfast(invoker *mock.MockInvoker)
protocol.Invoker {
invokers = append(invokers, invoker)
invoker.EXPECT().IsAvailable().Return(true).AnyTimes()
- invoker.EXPECT().GetUrl().Return(failfastUrl)
+ invoker.EXPECT().GetUrl().Return(failfastUrl).AnyTimes()
staticDir := static.NewDirectory(invokers)
clusterInvoker := failfastCluster.Join(staticDir)
@@ -74,7 +74,7 @@ func TestFailfastInvokeSuccess(t *testing.T) {
mockResult := &protocol.RPCResult{Rest: clusterpkg.Rest{Tried: 0,
Success: true}}
- invoker.EXPECT().Invoke(gomock.Any()).Return(mockResult)
+ invoker.EXPECT().Invoke(gomock.Any()).Return(mockResult).AnyTimes()
result := clusterInvoker.Invoke(context.Background(),
&invocation.RPCInvocation{})
assert.NoError(t, result.Error())
@@ -95,7 +95,7 @@ func TestFailfastInvokeFail(t *testing.T) {
mockResult := &protocol.RPCResult{Err: perrors.New("error")}
- invoker.EXPECT().Invoke(gomock.Any()).Return(mockResult)
+ invoker.EXPECT().Invoke(gomock.Any()).Return(mockResult).AnyTimes()
result := clusterInvoker.Invoke(context.Background(),
&invocation.RPCInvocation{})
assert.NotNil(t, result.Error())
diff --git a/cluster/cluster/failsafe/cluster_test.go
b/cluster/cluster/failsafe/cluster_test.go
index 819d8fb56..31796a47d 100644
--- a/cluster/cluster/failsafe/cluster_test.go
+++ b/cluster/cluster/failsafe/cluster_test.go
@@ -55,7 +55,7 @@ func registerFailsafe(invoker *mock.MockInvoker)
protocol.Invoker {
invokers = append(invokers, invoker)
invoker.EXPECT().IsAvailable().Return(true).AnyTimes()
- invoker.EXPECT().GetUrl().Return(failsafeUrl)
+ invoker.EXPECT().GetUrl().Return(failsafeUrl).AnyTimes()
staticDir := static.NewDirectory(invokers)
clusterInvoker := failsafeCluster.Join(staticDir)
@@ -75,7 +75,7 @@ func TestFailSafeInvokeSuccess(t *testing.T) {
mockResult := &protocol.RPCResult{Rest: clusterpkg.Rest{Tried: 0,
Success: true}}
- invoker.EXPECT().Invoke(gomock.Any()).Return(mockResult)
+ invoker.EXPECT().Invoke(gomock.Any()).Return(mockResult).AnyTimes()
result := clusterInvoker.Invoke(context.Background(),
&invocation.RPCInvocation{})
assert.NoError(t, result.Error())
@@ -95,7 +95,7 @@ func TestFailSafeInvokeFail(t *testing.T) {
mockResult := &protocol.RPCResult{Err: perrors.New("error")}
- invoker.EXPECT().Invoke(gomock.Any()).Return(mockResult)
+ invoker.EXPECT().Invoke(gomock.Any()).Return(mockResult).AnyTimes()
result := clusterInvoker.Invoke(context.Background(),
&invocation.RPCInvocation{})
assert.NoError(t, result.Error())
diff --git a/cluster/cluster/forking/cluster_test.go
b/cluster/cluster/forking/cluster_test.go
index 0787300ee..427ba8718 100644
--- a/cluster/cluster/forking/cluster_test.go
+++ b/cluster/cluster/forking/cluster_test.go
@@ -51,11 +51,9 @@ func registerForking(mockInvokers ...*mock.MockInvoker)
protocol.Invoker {
extension.SetLoadbalance(constant.LoadBalanceKeyRoundRobin,
roundrobin.NewRRLoadBalance)
var invokers []protocol.Invoker
- for i, ivk := range mockInvokers {
+ for _, ivk := range mockInvokers {
invokers = append(invokers, ivk)
- if i == 0 {
- ivk.EXPECT().GetUrl().Return(forkingUrl)
- }
+ ivk.EXPECT().GetUrl().Return(forkingUrl).AnyTimes()
}
staticDir := static.NewDirectory(invokers)
@@ -145,14 +143,14 @@ func TestForkingInvokeHalfTimeout(t *testing.T) {
func(protocol.Invocation) protocol.Result {
wg.Done()
return mockResult
- })
+ }).AnyTimes()
} else {
invoker.EXPECT().Invoke(gomock.Any()).DoAndReturn(
func(protocol.Invocation) protocol.Result {
time.Sleep(2 * time.Second)
wg.Done()
return mockResult
- })
+ }).AnyTimes()
}
}
diff --git a/cluster/cluster/zoneaware/cluster_interceptor.go
b/cluster/cluster/zoneaware/cluster_interceptor.go
index c92edc7e6..cb988cbcb 100644
--- a/cluster/cluster/zoneaware/cluster_interceptor.go
+++ b/cluster/cluster/zoneaware/cluster_interceptor.go
@@ -27,8 +27,7 @@ import (
"dubbo.apache.org/dubbo-go/v3/protocol"
)
-type interceptor struct {
-}
+type interceptor struct{}
func (z *interceptor) Invoke(ctx context.Context, invoker protocol.Invoker,
invocation protocol.Invocation) protocol.Result {
key := constant.RegistryKey + "." + constant.RegistryZoneForceKey
diff --git a/cluster/cluster/zoneaware/cluster_invoker_test.go
b/cluster/cluster/zoneaware/cluster_invoker_test.go
index a9ae7c95d..db9ac4185 100644
--- a/cluster/cluster/zoneaware/cluster_invoker_test.go
+++ b/cluster/cluster/zoneaware/cluster_invoker_test.go
@@ -63,7 +63,7 @@ func TestZoneWareInvokerWithPreferredSuccess(t *testing.T) {
invoker.EXPECT().Invoke(gomock.Any()).DoAndReturn(
func(invocation protocol.Invocation)
protocol.Result {
return mockResult
- })
+ }).AnyTimes()
} else {
invoker.EXPECT().Invoke(gomock.Any()).DoAndReturn(
func(invocation protocol.Invocation)
protocol.Result {
diff --git a/cluster/router/chain/chain.go b/cluster/router/chain/chain.go
index 037fa5554..a9f9ce5a8 100644
--- a/cluster/router/chain/chain.go
+++ b/cluster/router/chain/chain.go
@@ -52,7 +52,19 @@ type RouterChain struct {
// Route Loop routers in RouterChain and call Route method to determine the
target invokers list.
func (c *RouterChain) Route(url *common.URL, invocation protocol.Invocation)
[]protocol.Invoker {
- finalInvokers := c.invokers
+ finalInvokers := make([]protocol.Invoker, 0, len(c.invokers))
+ // multiple invoker may include different methods, find correct invoker
otherwise
+ // will return the invoker without methods
+ for _, invoker := range c.invokers {
+ if invoker.GetURL().ServiceKey() == url.ServiceKey() {
+ finalInvokers = append(finalInvokers, invoker)
+ }
+ }
+
+ if len(finalInvokers) == 0 {
+ finalInvokers = c.invokers
+ }
+
for _, r := range c.copyRouters() {
finalInvokers = r.Route(finalInvokers, url, invocation)
}
diff --git a/cluster/router/tag/router.go b/cluster/router/tag/router.go
index d728772b9..d642a792a 100644
--- a/cluster/router/tag/router.go
+++ b/cluster/router/tag/router.go
@@ -94,7 +94,6 @@ func (p *PriorityRouter) Notify(invokers []protocol.Invoker) {
return
}
p.Process(&config_center.ConfigChangeEvent{Key: key, Value: value,
ConfigType: remoting.EventTypeAdd})
-
}
func (p *PriorityRouter) Process(event *config_center.ConfigChangeEvent) {
diff --git a/cluster/router/tag/router_test.go
b/cluster/router/tag/router_test.go
index 0ca3d3955..22ddba793 100644
--- a/cluster/router/tag/router_test.go
+++ b/cluster/router/tag/router_test.go
@@ -354,7 +354,8 @@ tags:
- name: tag1
addresses: [192.168.0.1:20881]
- name: tag2
- addresses: [192.168.0.2:20882]`}
+ addresses: [192.168.0.2:20882]`,
+ }
dc, _ := mockFactory.GetDynamicConfiguration(ccUrl)
common_cfg.GetEnvInstance().SetDynamicConfiguration(dc)
p.Notify(invokerList)
@@ -380,7 +381,8 @@ tags:
extension.SetDefaultConfigurator(configurator.NewMockConfigurator)
ccUrl, _ := common.NewURL("mock://127.0.0.1:1111")
mockFactory := &config_center.MockDynamicConfigurationFactory{
- Content: `xxxxxx`}
+ Content: `xxxxxx`,
+ }
dc, _ := mockFactory.GetDynamicConfiguration(ccUrl)
common_cfg.GetEnvInstance().SetDynamicConfiguration(dc)
p.Notify(invokerList)
diff --git a/common/url.go b/common/url.go
index c143cb2f1..75e207010 100644
--- a/common/url.go
+++ b/common/url.go
@@ -284,6 +284,11 @@ func (c *URL) Group() string {
return c.GetParam(constant.GroupKey, "")
}
+// Interface get interface
+func (c *URL) Interface() string {
+ return c.GetParam(constant.InterfaceKey, "")
+}
+
// Version get group
func (c *URL) Version() string {
return c.GetParam(constant.VersionKey, "")
@@ -356,7 +361,7 @@ func (c *URL) Key() string {
return buildString
}
-//GetCacheInvokerMapKey get directory cacheInvokerMap key
+// GetCacheInvokerMapKey get directory cacheInvokerMap key
func (c *URL) GetCacheInvokerMapKey() string {
urlNew, _ := NewURL(c.PrimitiveURL)
@@ -369,7 +374,7 @@ func (c *URL) GetCacheInvokerMapKey() string {
// ServiceKey gets a unique key of a service.
func (c *URL) ServiceKey() string {
- return ServiceKey(c.GetParam(constant.InterfaceKey,
strings.TrimPrefix(c.Path, "/")),
+ return ServiceKey(c.GetParam(constant.InterfaceKey,
strings.TrimPrefix(c.Path, constant.PathSeparator)),
c.GetParam(constant.GroupKey, ""),
c.GetParam(constant.VersionKey, ""))
}
@@ -861,7 +866,7 @@ func GetCompareURLEqualFunc() CompareURLEqualFunc {
return compareURLEqualFunc
}
-//GetParamDuration get duration if param is invalid or missing will return 3s
+// GetParamDuration get duration if param is invalid or missing will return 3s
func (c *URL) GetParamDuration(s string, d string) time.Duration {
if t, err := time.ParseDuration(c.GetParam(s, d)); err == nil {
return t