Skip to content

Commit 5199327

Browse files
authored
grpc: Add endpoints in resolverWrapper.NewAddresses (#8149)
1 parent f49c747 commit 5199327

File tree

3 files changed

+69
-7
lines changed

3 files changed

+69
-7
lines changed

resolver_test.go

+52
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,58 @@ func (s) TestResolverAddressesToEndpoints(t *testing.T) {
144144
}
145145
}
146146

147+
// Test ensures one Endpoint is created for each entry in
148+
// resolver.State.Addresses automatically. The test calls the deprecated
149+
// NewAddresses API to send a list of addresses to the channel.
150+
func (s) TestResolverAddressesToEndpointsUsingNewAddresses(t *testing.T) {
151+
ctx, cancel := context.WithTimeout(context.Background(), defaultTestTimeout)
152+
defer cancel()
153+
154+
const scheme = "testresolveraddressestoendpoints"
155+
r := manual.NewBuilderWithScheme(scheme)
156+
157+
stateCh := make(chan balancer.ClientConnState, 1)
158+
bf := stub.BalancerFuncs{
159+
UpdateClientConnState: func(_ *stub.BalancerData, ccs balancer.ClientConnState) error {
160+
stateCh <- ccs
161+
return nil
162+
},
163+
}
164+
balancerName := "stub-balancer-" + scheme
165+
stub.Register(balancerName, bf)
166+
167+
a1 := attributes.New("x", "y")
168+
a2 := attributes.New("a", "b")
169+
addrs := []resolver.Address{
170+
{Addr: "addr1", BalancerAttributes: a1},
171+
{Addr: "addr2", BalancerAttributes: a2},
172+
}
173+
174+
cc, err := NewClient(r.Scheme()+":///",
175+
WithTransportCredentials(insecure.NewCredentials()),
176+
WithResolvers(r),
177+
WithDefaultServiceConfig(fmt.Sprintf(`{"loadBalancingConfig": [{"%s":{}}]}`, balancerName)))
178+
if err != nil {
179+
t.Fatalf("grpc.NewClient() failed: %v", err)
180+
}
181+
cc.Connect()
182+
defer cc.Close()
183+
r.CC.NewAddress(addrs)
184+
185+
select {
186+
case got := <-stateCh:
187+
want := []resolver.Endpoint{
188+
{Addresses: []resolver.Address{{Addr: "addr1"}}, Attributes: a1},
189+
{Addresses: []resolver.Address{{Addr: "addr2"}}, Attributes: a2},
190+
}
191+
if diff := cmp.Diff(got.ResolverState.Endpoints, want); diff != "" {
192+
t.Errorf("Did not receive expected endpoints. Diff (-got +want):\n%v", diff)
193+
}
194+
case <-ctx.Done():
195+
t.Fatalf("timed out waiting for endpoints")
196+
}
197+
}
198+
147199
// Test ensures that there is no panic if the attributes within
148200
// resolver.State.Addresses contains a typed-nil value.
149201
func (s) TestResolverAddressesWithTypedNilAttribute(t *testing.T) {

resolver_wrapper.go

+16-7
Original file line numberDiff line numberDiff line change
@@ -134,12 +134,7 @@ func (ccr *ccResolverWrapper) UpdateState(s resolver.State) error {
134134
return nil
135135
}
136136
if s.Endpoints == nil {
137-
s.Endpoints = make([]resolver.Endpoint, 0, len(s.Addresses))
138-
for _, a := range s.Addresses {
139-
ep := resolver.Endpoint{Addresses: []resolver.Address{a}, Attributes: a.BalancerAttributes}
140-
ep.Addresses[0].BalancerAttributes = nil
141-
s.Endpoints = append(s.Endpoints, ep)
142-
}
137+
s.Endpoints = addressesToEndpoints(s.Addresses)
143138
}
144139
ccr.addChannelzTraceEvent(s)
145140
ccr.curState = s
@@ -172,7 +167,11 @@ func (ccr *ccResolverWrapper) NewAddress(addrs []resolver.Address) {
172167
ccr.cc.mu.Unlock()
173168
return
174169
}
175-
s := resolver.State{Addresses: addrs, ServiceConfig: ccr.curState.ServiceConfig}
170+
s := resolver.State{
171+
Addresses: addrs,
172+
ServiceConfig: ccr.curState.ServiceConfig,
173+
Endpoints: addressesToEndpoints(addrs),
174+
}
176175
ccr.addChannelzTraceEvent(s)
177176
ccr.curState = s
178177
ccr.mu.Unlock()
@@ -210,3 +209,13 @@ func (ccr *ccResolverWrapper) addChannelzTraceEvent(s resolver.State) {
210209
}
211210
channelz.Infof(logger, ccr.cc.channelz, "Resolver state updated: %s (%v)", pretty.ToJSON(s), strings.Join(updates, "; "))
212211
}
212+
213+
func addressesToEndpoints(addrs []resolver.Address) []resolver.Endpoint {
214+
endpoints := make([]resolver.Endpoint, 0, len(addrs))
215+
for _, a := range addrs {
216+
ep := resolver.Endpoint{Addresses: []resolver.Address{a}, Attributes: a.BalancerAttributes}
217+
ep.Addresses[0].BalancerAttributes = nil
218+
endpoints = append(endpoints, ep)
219+
}
220+
return endpoints
221+
}

scripts/vet.sh

+1
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,7 @@ CredsBundle is deprecated:
174174
GetMetadata is deprecated:
175175
internal.Logger is deprecated:
176176
Metadata is deprecated: use Attributes instead.
177+
NewAddress is deprecated:
177178
NewSubConn is deprecated:
178179
OverrideServerName is deprecated:
179180
RemoveSubConn is deprecated:

0 commit comments

Comments
 (0)