rls: fix wrong server field in lookup request again
The previous fix #7878 didn't work because the server field is expected to be full hostname (without port number). Need strip the port part from the authority.
diff --git a/rls/src/main/java/io/grpc/rls/CachingRlsLbClient.java b/rls/src/main/java/io/grpc/rls/CachingRlsLbClient.java
index 492c7f1..69e3bb2 100644
--- a/rls/src/main/java/io/grpc/rls/CachingRlsLbClient.java
+++ b/rls/src/main/java/io/grpc/rls/CachingRlsLbClient.java
@@ -63,6 +63,8 @@
import io.grpc.rls.Throttler.ThrottledException;
import io.grpc.stub.StreamObserver;
import io.grpc.util.ForwardingLoadBalancerHelper;
+import java.net.URI;
+import java.net.URISyntaxException;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ScheduledExecutorService;
@@ -137,8 +139,20 @@
builder.evictionListener,
scheduledExecutorService,
timeProvider);
+ logger = helper.getChannelLogger();
+ String serverHost = null;
+ try {
+ serverHost = new URI(null, helper.getAuthority(), null, null, null).getHost();
+ } catch (URISyntaxException ignore) {
+ // handled by the following null check
+ }
+ if (serverHost == null) {
+ logger.log(
+ ChannelLogLevel.DEBUG, "Can not get hostname from authority: {0}", helper.getAuthority());
+ serverHost = helper.getAuthority();
+ }
RlsRequestFactory requestFactory = new RlsRequestFactory(
- lbPolicyConfig.getRouteLookupConfig(), helper.getAuthority());
+ lbPolicyConfig.getRouteLookupConfig(), serverHost);
rlsPicker = new RlsPicker(requestFactory);
// It is safe to use helper.getUnsafeChannelCredentials() because the client authenticates the
// RLS server using the same authority as the backends, even though the RLS server’s addresses
@@ -147,7 +161,6 @@
ManagedChannelBuilder<?> rlsChannelBuilder = helper.createResolvingOobChannelBuilder(
rlsConfig.getLookupService(), helper.getUnsafeChannelCredentials());
rlsChannelBuilder.overrideAuthority(helper.getAuthority());
- logger = helper.getChannelLogger();
if (enableOobChannelDirectPath) {
logger.log(
ChannelLogLevel.DEBUG,
diff --git a/rls/src/test/java/io/grpc/rls/CachingRlsLbClientTest.java b/rls/src/test/java/io/grpc/rls/CachingRlsLbClientTest.java
index 9ad4bc1..7a41887 100644
--- a/rls/src/test/java/io/grpc/rls/CachingRlsLbClientTest.java
+++ b/rls/src/test/java/io/grpc/rls/CachingRlsLbClientTest.java
@@ -583,7 +583,7 @@
@Override
public String getAuthority() {
- return "bigtable.googleapis.com";
+ return "bigtable.googleapis.com:443";
}
@Override