@@ -113,6 +113,7 @@ public String getPolicyName() {
113
113
public LoadBalancer newLoadBalancer (Helper helper ) {
114
114
childHelpers .add (helper );
115
115
LoadBalancer childBalancer = mock (LoadBalancer .class );
116
+ when (childBalancer .acceptResolvedAddresses (any ())).thenReturn (Status .OK );
116
117
childBalancers .add (childBalancer );
117
118
fooLbCreated ++;
118
119
return childBalancer ;
@@ -139,6 +140,7 @@ public String getPolicyName() {
139
140
public LoadBalancer newLoadBalancer (Helper helper ) {
140
141
childHelpers .add (helper );
141
142
LoadBalancer childBalancer = mock (LoadBalancer .class );
143
+ when (childBalancer .acceptResolvedAddresses (any ())).thenReturn (Status .OK );
142
144
childBalancers .add (childBalancer );
143
145
barLbCreated ++;
144
146
return childBalancer ;
@@ -180,7 +182,7 @@ public void tearDown() {
180
182
}
181
183
182
184
@ Test
183
- public void handleResolvedAddresses () {
185
+ public void acceptResolvedAddresses () {
184
186
ArgumentCaptor <ResolvedAddresses > resolvedAddressesCaptor =
185
187
ArgumentCaptor .forClass (ResolvedAddresses .class );
186
188
Attributes .Key <Object > fakeKey = Attributes .Key .create ("fake_key" );
@@ -203,20 +205,21 @@ public void handleResolvedAddresses() {
203
205
eag2 = AddressFilter .setPathFilter (eag2 , ImmutableList .of ("target2" ));
204
206
EquivalentAddressGroup eag3 = new EquivalentAddressGroup (socketAddresses [3 ]);
205
207
eag3 = AddressFilter .setPathFilter (eag3 , ImmutableList .of ("target3" ));
206
- weightedTargetLb .handleResolvedAddresses (
208
+ Status status = weightedTargetLb .acceptResolvedAddresses (
207
209
ResolvedAddresses .newBuilder ()
208
210
.setAddresses (ImmutableList .of (eag0 , eag1 , eag2 , eag3 ))
209
211
.setAttributes (Attributes .newBuilder ().set (fakeKey , fakeValue ).build ())
210
212
.setLoadBalancingPolicyConfig (new WeightedTargetConfig (targets ))
211
213
.build ());
214
+ assertThat (status .isOk ()).isTrue ();
212
215
verify (helper ).updateBalancingState (eq (CONNECTING ), pickerReturns (PickResult .withNoResult ()));
213
216
assertThat (childBalancers ).hasSize (4 );
214
217
assertThat (childHelpers ).hasSize (4 );
215
218
assertThat (fooLbCreated ).isEqualTo (2 );
216
219
assertThat (barLbCreated ).isEqualTo (2 );
217
220
218
221
for (int i = 0 ; i < childBalancers .size (); i ++) {
219
- verify (childBalancers .get (i )).handleResolvedAddresses (resolvedAddressesCaptor .capture ());
222
+ verify (childBalancers .get (i )).acceptResolvedAddresses (resolvedAddressesCaptor .capture ());
220
223
ResolvedAddresses resolvedAddresses = resolvedAddressesCaptor .getValue ();
221
224
assertThat (resolvedAddresses .getLoadBalancingPolicyConfig ()).isEqualTo (configs [i ]);
222
225
assertThat (resolvedAddresses .getAttributes ().get (fakeKey )).isEqualTo (fakeValue );
@@ -226,6 +229,11 @@ public void handleResolvedAddresses() {
226
229
.containsExactly (socketAddresses [i ]);
227
230
}
228
231
232
+ // Even when a child return an error from the update, the other children should still receive
233
+ // their updates.
234
+ Status acceptReturnStatus = Status .UNAVAILABLE .withDescription ("Didn't like something" );
235
+ when (childBalancers .get (2 ).acceptResolvedAddresses (any ())).thenReturn (acceptReturnStatus );
236
+
229
237
// Update new weighted target config for a typical workflow.
230
238
// target0 removed. target1, target2, target3 changed weight and config. target4 added.
231
239
int [] newWeights = new int []{11 , 22 , 33 , 44 };
@@ -243,11 +251,12 @@ public void handleResolvedAddresses() {
243
251
"target4" ,
244
252
new WeightedPolicySelection (
245
253
newWeights [3 ], newChildConfig (fooLbProvider , newConfigs [3 ])));
246
- weightedTargetLb .handleResolvedAddresses (
254
+ status = weightedTargetLb .acceptResolvedAddresses (
247
255
ResolvedAddresses .newBuilder ()
248
256
.setAddresses (ImmutableList .<EquivalentAddressGroup >of ())
249
257
.setLoadBalancingPolicyConfig (new WeightedTargetConfig (newTargets ))
250
258
.build ());
259
+ assertThat (status .getCode ()).isEqualTo (acceptReturnStatus .getCode ());
251
260
verify (helper , atLeast (2 ))
252
261
.updateBalancingState (eq (CONNECTING ), pickerReturns (PickResult .withNoResult ()));
253
262
assertThat (childBalancers ).hasSize (5 );
@@ -258,7 +267,7 @@ public void handleResolvedAddresses() {
258
267
verify (childBalancers .get (0 )).shutdown ();
259
268
for (int i = 1 ; i < childBalancers .size (); i ++) {
260
269
verify (childBalancers .get (i ), atLeastOnce ())
261
- .handleResolvedAddresses (resolvedAddressesCaptor .capture ());
270
+ .acceptResolvedAddresses (resolvedAddressesCaptor .capture ());
262
271
assertThat (resolvedAddressesCaptor .getValue ().getLoadBalancingPolicyConfig ())
263
272
.isEqualTo (newConfigs [i - 1 ]);
264
273
}
@@ -286,7 +295,7 @@ public void handleNameResolutionError() {
286
295
"target2" , weightedLbConfig2 ,
287
296
// {foo, 40, config3}
288
297
"target3" , weightedLbConfig3 );
289
- weightedTargetLb .handleResolvedAddresses (
298
+ weightedTargetLb .acceptResolvedAddresses (
290
299
ResolvedAddresses .newBuilder ()
291
300
.setAddresses (ImmutableList .<EquivalentAddressGroup >of ())
292
301
.setLoadBalancingPolicyConfig (new WeightedTargetConfig (targets ))
@@ -313,7 +322,7 @@ public void balancingStateUpdatedFromChildBalancers() {
313
322
"target2" , weightedLbConfig2 ,
314
323
// {foo, 40, config3}
315
324
"target3" , weightedLbConfig3 );
316
- weightedTargetLb .handleResolvedAddresses (
325
+ weightedTargetLb .acceptResolvedAddresses (
317
326
ResolvedAddresses .newBuilder ()
318
327
.setAddresses (ImmutableList .<EquivalentAddressGroup >of ())
319
328
.setLoadBalancingPolicyConfig (new WeightedTargetConfig (targets ))
@@ -395,7 +404,7 @@ public void raceBetweenShutdownAndChildLbBalancingStateUpdate() {
395
404
Map <String , WeightedPolicySelection > targets = ImmutableMap .of (
396
405
"target0" , weightedLbConfig0 ,
397
406
"target1" , weightedLbConfig1 );
398
- weightedTargetLb .handleResolvedAddresses (
407
+ weightedTargetLb .acceptResolvedAddresses (
399
408
ResolvedAddresses .newBuilder ()
400
409
.setAddresses (ImmutableList .<EquivalentAddressGroup >of ())
401
410
.setLoadBalancingPolicyConfig (new WeightedTargetConfig (targets ))
@@ -421,7 +430,7 @@ public void noDuplicateOverallBalancingStateUpdate() {
421
430
weights [0 ], newChildConfig (fakeLbProvider , configs [0 ])),
422
431
"target3" , new WeightedPolicySelection (
423
432
weights [3 ], newChildConfig (fakeLbProvider , configs [3 ])));
424
- weightedTargetLb .handleResolvedAddresses (
433
+ weightedTargetLb .acceptResolvedAddresses (
425
434
ResolvedAddresses .newBuilder ()
426
435
.setAddresses (ImmutableList .<EquivalentAddressGroup >of ())
427
436
.setLoadBalancingPolicyConfig (new WeightedTargetConfig (targets ))
@@ -470,9 +479,10 @@ static class FakeLoadBalancer extends LoadBalancer {
470
479
}
471
480
472
481
@ Override
473
- public void handleResolvedAddresses (ResolvedAddresses resolvedAddresses ) {
482
+ public Status acceptResolvedAddresses (ResolvedAddresses resolvedAddresses ) {
474
483
helper .updateBalancingState (
475
484
TRANSIENT_FAILURE , new FixedResultPicker (PickResult .withError (Status .INTERNAL )));
485
+ return Status .OK ;
476
486
}
477
487
478
488
@ Override
0 commit comments