mirror of https://github.com/grpc/grpc-java.git
grpclb: force GRPCLB policy when NameResolver returns at least one balancer. (#3291)
Previously only when all addresses returned by NameResolver are balancers would GRPCLB be forced. This change is a follow-up of https://github.com/grpc/grpc/pull/10258
This commit is contained in:
parent
9be41ba0e8
commit
f54a2df67f
|
|
@ -184,14 +184,11 @@ class GrpclbLoadBalancer extends LoadBalancer implements WithLogId {
|
|||
}
|
||||
}
|
||||
|
||||
if (newBackendServers.isEmpty()) {
|
||||
// handleResolvedAddressGroups()'s javadoc has guaranteed updatedServers is never empty.
|
||||
checkState(!newLbAddressGroups.isEmpty(),
|
||||
"No backend address nor LB address. updatedServers=%s", updatedServers);
|
||||
if (!newLbAddressGroups.isEmpty()) {
|
||||
if (newLbPolicy != LbPolicy.GRPCLB) {
|
||||
newLbPolicy = LbPolicy.GRPCLB;
|
||||
logger.log(Level.FINE, "[{0}] Switching to GRPCLB because all addresses are balancers",
|
||||
logId);
|
||||
logger.log(
|
||||
Level.FINE, "[{0}] Switching to GRPCLB because there is at least one balancer", logId);
|
||||
}
|
||||
}
|
||||
if (newLbPolicy == null) {
|
||||
|
|
|
|||
|
|
@ -755,7 +755,7 @@ public class GrpclbLoadBalancerTest {
|
|||
|
||||
// Switch to PICK_FIRST
|
||||
List<EquivalentAddressGroup> pickFirstResolutionList =
|
||||
createResolvedServerAddresses(true, false);
|
||||
createResolvedServerAddresses(false, false);
|
||||
Attributes pickFirstResolutionAttrs = Attributes.newBuilder()
|
||||
.set(GrpclbConstants.ATTR_LB_POLICY, LbPolicy.PICK_FIRST).build();
|
||||
verify(pickFirstBalancerFactory, never()).newLoadBalancer(any(Helper.class));
|
||||
|
|
@ -769,7 +769,7 @@ public class GrpclbLoadBalancerTest {
|
|||
verify(pickFirstBalancerFactory).newLoadBalancer(same(helper));
|
||||
// Only non-LB addresses are passed to the delegate
|
||||
verify(pickFirstBalancer).handleResolvedAddressGroups(
|
||||
eq(Arrays.asList(pickFirstResolutionList.get(1))), same(pickFirstResolutionAttrs));
|
||||
eq(pickFirstResolutionList), same(pickFirstResolutionAttrs));
|
||||
assertSame(LbPolicy.PICK_FIRST, balancer.getLbPolicy());
|
||||
assertSame(pickFirstBalancer, balancer.getDelegate());
|
||||
// GRPCLB connection is closed
|
||||
|
|
@ -778,7 +778,7 @@ public class GrpclbLoadBalancerTest {
|
|||
|
||||
// Switch to ROUND_ROBIN
|
||||
List<EquivalentAddressGroup> roundRobinResolutionList =
|
||||
createResolvedServerAddresses(true, false, false);
|
||||
createResolvedServerAddresses(false, false, false);
|
||||
Attributes roundRobinResolutionAttrs = Attributes.newBuilder()
|
||||
.set(GrpclbConstants.ATTR_LB_POLICY, LbPolicy.ROUND_ROBIN).build();
|
||||
verify(roundRobinBalancerFactory, never()).newLoadBalancer(any(Helper.class));
|
||||
|
|
@ -787,13 +787,13 @@ public class GrpclbLoadBalancerTest {
|
|||
verify(roundRobinBalancerFactory).newLoadBalancer(same(helper));
|
||||
// Only non-LB addresses are passed to the delegate
|
||||
verify(roundRobinBalancer).handleResolvedAddressGroups(
|
||||
eq(roundRobinResolutionList.subList(1, 3)), same(roundRobinResolutionAttrs));
|
||||
eq(roundRobinResolutionList), same(roundRobinResolutionAttrs));
|
||||
assertSame(LbPolicy.ROUND_ROBIN, balancer.getLbPolicy());
|
||||
assertSame(roundRobinBalancer, balancer.getDelegate());
|
||||
|
||||
// Special case: if all addresses are loadbalancers, use GRPCLB no matter what the NameResolver
|
||||
// says.
|
||||
grpclbResolutionList = createResolvedServerAddresses(true, true, true);
|
||||
// Special case: if at least one address is loadbalancer, use GRPCLB no matter what the
|
||||
// NameResolver says.
|
||||
grpclbResolutionList = createResolvedServerAddresses(true, false, true, false);
|
||||
grpclbResolutionAttrs = Attributes.newBuilder()
|
||||
.set(GrpclbConstants.ATTR_LB_POLICY, LbPolicy.PICK_FIRST).build();
|
||||
deliverResolvedAddresses(grpclbResolutionList, grpclbResolutionAttrs);
|
||||
|
|
@ -802,7 +802,6 @@ public class GrpclbLoadBalancerTest {
|
|||
assertNull(balancer.getDelegate());
|
||||
EquivalentAddressGroup combinedEag = new EquivalentAddressGroup(Arrays.asList(
|
||||
grpclbResolutionList.get(0).getAddresses().get(0),
|
||||
grpclbResolutionList.get(1).getAddresses().get(0),
|
||||
grpclbResolutionList.get(2).getAddresses().get(0)));
|
||||
verify(helper).createOobChannel(eq(combinedEag), eq(lbAuthority(0)));
|
||||
assertEquals(1, fakeOobChannels.size());
|
||||
|
|
@ -810,7 +809,7 @@ public class GrpclbLoadBalancerTest {
|
|||
verify(mockLbService, times(2)).balanceLoad(lbResponseObserverCaptor.capture());
|
||||
|
||||
// Special case: PICK_FIRST is the default
|
||||
pickFirstResolutionList = createResolvedServerAddresses(true, false, false);
|
||||
pickFirstResolutionList = createResolvedServerAddresses(false, false, false);
|
||||
pickFirstResolutionAttrs = Attributes.EMPTY;
|
||||
verify(pickFirstBalancerFactory).newLoadBalancer(any(Helper.class));
|
||||
assertFalse(oobChannel.isShutdown());
|
||||
|
|
@ -819,7 +818,7 @@ public class GrpclbLoadBalancerTest {
|
|||
verify(pickFirstBalancerFactory, times(2)).newLoadBalancer(same(helper));
|
||||
// Only non-LB addresses are passed to the delegate
|
||||
verify(pickFirstBalancer).handleResolvedAddressGroups(
|
||||
eq(pickFirstResolutionList.subList(1, 3)), same(pickFirstResolutionAttrs));
|
||||
eq(pickFirstResolutionList), same(pickFirstResolutionAttrs));
|
||||
assertSame(LbPolicy.PICK_FIRST, balancer.getLbPolicy());
|
||||
assertSame(pickFirstBalancer, balancer.getDelegate());
|
||||
// GRPCLB connection is closed
|
||||
|
|
|
|||
Loading…
Reference in New Issue