Skip to content

Commit 01012f2

Browse files
authored
Limit resolving concurrency (#4)
* early return when ResolveNow is already resolving in another goroutine * fix broken test
1 parent 1067653 commit 01012f2

File tree

2 files changed

+31
-15
lines changed

2 files changed

+31
-15
lines changed

resolver.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,11 @@ type resolver struct {
3232
}
3333

3434
func (c *resolver) ResolveNow(grpcresolver.ResolveNowOptions) {
35-
c.mu.RLock()
36-
defer c.mu.RUnlock()
35+
locked := c.mu.TryLock()
36+
if !locked { // already resolving
37+
return
38+
}
39+
defer c.mu.Unlock()
3740

3841
if c.isClosed {
3942
return

target_test.go

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package cloudmap
22

33
import (
4+
"net/url"
45
"reflect"
56
"testing"
67

@@ -65,7 +66,9 @@ func Test_parseTarget(t *testing.T) {
6566
name: "unexpected scheme",
6667
args: args{
6768
t: grpcresolver.Target{
68-
Scheme: "https",
69+
URL: url.URL{
70+
Scheme: "https",
71+
},
6972
},
7073
},
7174
wantErr: true,
@@ -74,7 +77,9 @@ func Test_parseTarget(t *testing.T) {
7477
name: "empty namespace",
7578
args: args{
7679
t: grpcresolver.Target{
77-
Scheme: "https",
80+
URL: url.URL{
81+
Scheme: Scheme,
82+
},
7883
},
7984
},
8085
wantErr: true,
@@ -83,8 +88,10 @@ func Test_parseTarget(t *testing.T) {
8388
name: "empty service",
8489
args: args{
8590
t: grpcresolver.Target{
86-
Scheme: Scheme,
87-
Authority: "test-namespace",
91+
URL: url.URL{
92+
Scheme: Scheme,
93+
Host: "test-namespace",
94+
},
8895
},
8996
},
9097
wantErr: true,
@@ -93,9 +100,11 @@ func Test_parseTarget(t *testing.T) {
93100
name: "normal",
94101
args: args{
95102
t: grpcresolver.Target{
96-
Scheme: Scheme,
97-
Authority: "test-namespace",
98-
Endpoint: "test-service",
103+
URL: url.URL{
104+
Scheme: Scheme,
105+
Host: "test-namespace",
106+
Path: "test-service",
107+
},
99108
},
100109
},
101110
want: &target{
@@ -107,9 +116,11 @@ func Test_parseTarget(t *testing.T) {
107116
name: "with slash",
108117
args: args{
109118
t: grpcresolver.Target{
110-
Scheme: Scheme,
111-
Authority: "test-namespace",
112-
Endpoint: "test/service",
119+
URL: url.URL{
120+
Scheme: Scheme,
121+
Host: "test-namespace",
122+
Path: "test/service",
123+
},
113124
},
114125
},
115126
want: &target{
@@ -121,9 +132,11 @@ func Test_parseTarget(t *testing.T) {
121132
name: "with whitespace",
122133
args: args{
123134
t: grpcresolver.Target{
124-
Scheme: Scheme,
125-
Authority: "test-namespace",
126-
Endpoint: "test%20service",
135+
URL: url.URL{
136+
Scheme: Scheme,
137+
Host: "test-namespace",
138+
Path: "test%20service",
139+
},
127140
},
128141
},
129142
want: &target{

0 commit comments

Comments
 (0)