From b5960bced36956018c002e9ef96be964a31b031a Mon Sep 17 00:00:00 2001 From: Terry Wilson Date: Mon, 10 Apr 2023 13:54:53 -0700 Subject: [PATCH 1/2] rls: Refresh name resolution on rejected addresses If a child load balancer rejects the addresses it if given all we can do is to trigger a name resolution refresh and hope for a better set of addresses. --- .../main/java/io/grpc/rls/LbPolicyConfiguration.java | 9 ++++++--- .../java/io/grpc/rls/LbPolicyConfigurationTest.java | 10 +++++++++- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/rls/src/main/java/io/grpc/rls/LbPolicyConfiguration.java b/rls/src/main/java/io/grpc/rls/LbPolicyConfiguration.java index 0abef014f8a..47b02687cd7 100644 --- a/rls/src/main/java/io/grpc/rls/LbPolicyConfiguration.java +++ b/rls/src/main/java/io/grpc/rls/LbPolicyConfiguration.java @@ -302,9 +302,12 @@ public ChildPolicyWrapper( new Runnable() { @Override public void run() { - lb.handleResolvedAddresses( - childLbResolvedAddressFactory.create(lbConfig.getConfig())); - lb.requestConnection(); + if (lb.acceptResolvedAddresses( + childLbResolvedAddressFactory.create(lbConfig.getConfig()))) { + lb.requestConnection(); + } else { + helper.refreshNameResolution(); + } } }); } diff --git a/rls/src/test/java/io/grpc/rls/LbPolicyConfigurationTest.java b/rls/src/test/java/io/grpc/rls/LbPolicyConfigurationTest.java index 36022cb25e6..760be9a8501 100644 --- a/rls/src/test/java/io/grpc/rls/LbPolicyConfigurationTest.java +++ b/rls/src/test/java/io/grpc/rls/LbPolicyConfigurationTest.java @@ -57,6 +57,7 @@ public class LbPolicyConfigurationTest { private final Helper helper = mock(Helper.class); private final LoadBalancerProvider lbProvider = mock(LoadBalancerProvider.class); + private final LoadBalancer lb = mock(LoadBalancer.class); private final SubchannelStateManager subchannelStateManager = new SubchannelStateManagerImpl(); private final SubchannelPicker picker = mock(SubchannelPicker.class); private final ChildLbStatusListener childLbStatusListener = mock(ChildLbStatusListener.class); @@ -91,7 +92,7 @@ public void uncaughtException(Thread t, Throwable e) { } })) .when(helper).getSynchronizationContext(); - doReturn(mock(LoadBalancer.class)).when(lbProvider).newLoadBalancer(any(Helper.class)); + doReturn(lb).when(lbProvider).newLoadBalancer(any(Helper.class)); doReturn(ConfigOrError.fromConfig(new Object())) .when(lbProvider).parseLoadBalancingPolicyConfig(ArgumentMatchers.>any()); } @@ -120,6 +121,13 @@ public void childPolicyWrapper_refCounted() { } } + @Test + public void childPolicyWrapper_addressesRejected() { + when(lb.acceptResolvedAddresses(any(ResolvedAddresses.class))).thenReturn(false); + factory.createOrGet("target"); + verify(helper).refreshNameResolution(); + } + @Test public void childLoadBalancingPolicy_effectiveChildPolicy() { LoadBalancerProvider mockProvider = mock(LoadBalancerProvider.class); From dc67620ffec4b83107e3122bf4ae9f96db521a50 Mon Sep 17 00:00:00 2001 From: Terry Wilson Date: Tue, 11 Apr 2023 15:27:26 -0700 Subject: [PATCH 2/2] Make call to lb.requestConnection() unconditional --- rls/src/main/java/io/grpc/rls/LbPolicyConfiguration.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/rls/src/main/java/io/grpc/rls/LbPolicyConfiguration.java b/rls/src/main/java/io/grpc/rls/LbPolicyConfiguration.java index 47b02687cd7..5b8dde3d39c 100644 --- a/rls/src/main/java/io/grpc/rls/LbPolicyConfiguration.java +++ b/rls/src/main/java/io/grpc/rls/LbPolicyConfiguration.java @@ -302,12 +302,11 @@ public ChildPolicyWrapper( new Runnable() { @Override public void run() { - if (lb.acceptResolvedAddresses( + if (!lb.acceptResolvedAddresses( childLbResolvedAddressFactory.create(lbConfig.getConfig()))) { - lb.requestConnection(); - } else { helper.refreshNameResolution(); } + lb.requestConnection(); } }); }