From 78b3972ff338734b50310c155bf5f905ba17a00f Mon Sep 17 00:00:00 2001 From: yifeizhuang Date: Mon, 26 Feb 2024 16:33:20 -0800 Subject: [PATCH] xds: fix xdsNameResolver virtual host lookup authority, use service authority instead of ldsResourceName (#10960) --- xds/src/main/java/io/grpc/xds/XdsNameResolver.java | 2 +- .../test/java/io/grpc/xds/XdsNameResolverTest.java | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/xds/src/main/java/io/grpc/xds/XdsNameResolver.java b/xds/src/main/java/io/grpc/xds/XdsNameResolver.java index a345c7eb26..23e32e9fde 100644 --- a/xds/src/main/java/io/grpc/xds/XdsNameResolver.java +++ b/xds/src/main/java/io/grpc/xds/XdsNameResolver.java @@ -696,7 +696,7 @@ final class XdsNameResolver extends NameResolver { // called in syncContext private void updateRoutes(List virtualHosts, long httpMaxStreamDurationNano, @Nullable List filterConfigs) { - String authority = overrideAuthority != null ? overrideAuthority : ldsResourceName; + String authority = overrideAuthority != null ? overrideAuthority : encodedServiceAuthority; VirtualHost virtualHost = RoutingUtils.findVirtualHostForHostName(virtualHosts, authority); if (virtualHost == null) { String error = "Failed to find virtual host matching hostname: " + authority; diff --git a/xds/src/test/java/io/grpc/xds/XdsNameResolverTest.java b/xds/src/test/java/io/grpc/xds/XdsNameResolverTest.java index d93a9c9935..add3d545f1 100644 --- a/xds/src/test/java/io/grpc/xds/XdsNameResolverTest.java +++ b/xds/src/test/java/io/grpc/xds/XdsNameResolverTest.java @@ -333,6 +333,18 @@ public class XdsNameResolverTest { RouteAction.forCluster( cluster2, Collections.emptyList(), TimeUnit.SECONDS.toNanos(20L), null), ImmutableMap.of()); + bootstrapInfo = BootstrapInfo.builder() + .servers(ImmutableList.of(ServerInfo.create( + "td.googleapis.com", InsecureChannelCredentials.create()))) + .clientDefaultListenerResourceNameTemplate("test-%s") + .node(Node.newBuilder().build()) + .build(); + resolver = new XdsNameResolver(null, AUTHORITY, null, + serviceConfigParser, syncContext, scheduler, + xdsClientPoolFactory, mockRandom, FilterRegistry.getDefaultRegistry(), null); + // use different ldsResourceName and service authority. The virtualhost lookup should use + // service authority. + expectedLdsResourceName = "test-" + expectedLdsResourceName; resolver.start(mockListener); FakeXdsClient xdsClient = (FakeXdsClient) resolver.getXdsClient();