From d122d3a257f92d80ef4bd9ba02a0e140febbdda3 Mon Sep 17 00:00:00 2001 From: Terry Wilson Date: Fri, 7 Apr 2023 15:30:16 -0700 Subject: [PATCH 1/3] api: Deprecate the old way of handling resolved addresses in LoadBalancer --- api/src/main/java/io/grpc/LoadBalancer.java | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/api/src/main/java/io/grpc/LoadBalancer.java b/api/src/main/java/io/grpc/LoadBalancer.java index 5617d279862..e0144b09982 100644 --- a/api/src/main/java/io/grpc/LoadBalancer.java +++ b/api/src/main/java/io/grpc/LoadBalancer.java @@ -22,6 +22,7 @@ import com.google.common.base.MoreObjects; import com.google.common.base.Objects; import com.google.common.base.Preconditions; +import com.google.errorprone.annotations.InlineMe; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -126,7 +127,13 @@ public abstract class LoadBalancer { * * @param resolvedAddresses the resolved server addresses, attributes, and config. * @since 1.21.0 + * @deprecated Please override {@code acceptResolvedAddresses()} instead. Also note that + * {@code canHandleEmptyAddressListFromNameResolution()} is deprecated as well as + * {@code acceptResolvedAddresses()} should now indicate the acceptance of the addresses with + * its return value. */ + @Deprecated + @InlineMe(replacement = "acceptResolvedAddresses(resolvedAddresses)") public void handleResolvedAddresses(ResolvedAddresses resolvedAddresses) { if (recursionCount++ == 0) { // Note that the information about the addresses actually being accepted will be lost @@ -141,7 +148,9 @@ public void handleResolvedAddresses(ResolvedAddresses resolvedAddresses) { * EquivalentAddressGroup} addresses should be considered equivalent but may be flattened into a * single list if needed. * - *

Implementations can choose to reject the given addresses by returning {@code false}. + *

Implementations can choose to reject the given addresses by returning {@code false}. Please + * note that an empty list of addresses could be provided and that the deprecated {@code + * canHandleEmptyAddressListFromNameResolution()} will be ignored when this method is overwritten. * *

Implementations should not modify the given {@code addresses}. * @@ -379,7 +388,16 @@ public void handleSubchannelState( * *

This method should always return a constant value. It's not specified when this will be * called. + * + *

Note that this method is only called when the deprecated {@code handleResolvedAddresses()} + * is overwritten. + * + * @deprecated Instead of overwriting this and {@code handleResolvedAddresses()} please only + * overwrite {@code acceptResolvedAddresses()}. In that method you can indicate if the + * addresses provided by the name resolver are acceptable with the {@code boolean} return + * value. */ + @Deprecated public boolean canHandleEmptyAddressListFromNameResolution() { return false; } From 8d1b1321115910016174f9eff7e245af8596b3d5 Mon Sep 17 00:00:00 2001 From: Terry Wilson Date: Mon, 10 Apr 2023 08:58:02 -0700 Subject: [PATCH 2/3] Forwarding and GracefulSwitch LBS to ignore deprecation --- api/src/main/java/io/grpc/LoadBalancer.java | 4 ++-- core/src/main/java/io/grpc/util/ForwardingLoadBalancer.java | 2 ++ .../main/java/io/grpc/util/GracefulSwitchLoadBalancer.java | 1 + 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/api/src/main/java/io/grpc/LoadBalancer.java b/api/src/main/java/io/grpc/LoadBalancer.java index e0144b09982..0db99f30c93 100644 --- a/api/src/main/java/io/grpc/LoadBalancer.java +++ b/api/src/main/java/io/grpc/LoadBalancer.java @@ -22,7 +22,6 @@ import com.google.common.base.MoreObjects; import com.google.common.base.Objects; import com.google.common.base.Preconditions; -import com.google.errorprone.annotations.InlineMe; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -133,7 +132,7 @@ public abstract class LoadBalancer { * its return value. */ @Deprecated - @InlineMe(replacement = "acceptResolvedAddresses(resolvedAddresses)") + @SuppressWarnings("InlineMeSuggester") public void handleResolvedAddresses(ResolvedAddresses resolvedAddresses) { if (recursionCount++ == 0) { // Note that the information about the addresses actually being accepted will be lost @@ -398,6 +397,7 @@ public void handleSubchannelState( * value. */ @Deprecated + @SuppressWarnings("InlineMeSuggester") public boolean canHandleEmptyAddressListFromNameResolution() { return false; } diff --git a/core/src/main/java/io/grpc/util/ForwardingLoadBalancer.java b/core/src/main/java/io/grpc/util/ForwardingLoadBalancer.java index cefcbf344ea..dfb11e6b938 100644 --- a/core/src/main/java/io/grpc/util/ForwardingLoadBalancer.java +++ b/core/src/main/java/io/grpc/util/ForwardingLoadBalancer.java @@ -30,6 +30,7 @@ public abstract class ForwardingLoadBalancer extends LoadBalancer { protected abstract LoadBalancer delegate(); @Override + @SuppressWarnings("deprecation") public void handleResolvedAddresses(ResolvedAddresses resolvedAddresses) { delegate().handleResolvedAddresses(resolvedAddresses); } @@ -52,6 +53,7 @@ public void shutdown() { } @Override + @SuppressWarnings("deprecation") public boolean canHandleEmptyAddressListFromNameResolution() { return delegate().canHandleEmptyAddressListFromNameResolution(); } diff --git a/core/src/main/java/io/grpc/util/GracefulSwitchLoadBalancer.java b/core/src/main/java/io/grpc/util/GracefulSwitchLoadBalancer.java index 7cba3098ca6..f98ecce0266 100644 --- a/core/src/main/java/io/grpc/util/GracefulSwitchLoadBalancer.java +++ b/core/src/main/java/io/grpc/util/GracefulSwitchLoadBalancer.java @@ -43,6 +43,7 @@ public final class GracefulSwitchLoadBalancer extends ForwardingLoadBalancer { private final LoadBalancer defaultBalancer = new LoadBalancer() { @Override + @SuppressWarnings("deprecation") public void handleResolvedAddresses(ResolvedAddresses resolvedAddresses) { // Most LB policies using this class will receive child policy configuration within the // service config, so they are naturally calling switchTo() just before From 4b51da5eccd37a0fbbd351c3267f7354114860ee Mon Sep 17 00:00:00 2001 From: Terry Wilson Date: Mon, 10 Apr 2023 10:41:22 -0700 Subject: [PATCH 3/3] Ignore deprectaion on GrpclbLoadBalancer --- grpclb/src/main/java/io/grpc/grpclb/GrpclbLoadBalancer.java | 1 + 1 file changed, 1 insertion(+) diff --git a/grpclb/src/main/java/io/grpc/grpclb/GrpclbLoadBalancer.java b/grpclb/src/main/java/io/grpc/grpclb/GrpclbLoadBalancer.java index 14b06a3b57c..228986d671b 100644 --- a/grpclb/src/main/java/io/grpc/grpclb/GrpclbLoadBalancer.java +++ b/grpclb/src/main/java/io/grpc/grpclb/GrpclbLoadBalancer.java @@ -153,6 +153,7 @@ public void handleNameResolutionError(Status error) { } @Override + @SuppressWarnings("deprecation") public boolean canHandleEmptyAddressListFromNameResolution() { return true; }