xds: fix xdsNameResolver virtual host lookup authority, use service authority instead of ldsResourceName (#10960)

This commit is contained in:
yifeizhuang 2024-02-26 16:33:20 -08:00 committed by GitHub
parent 0ffcd40ab6
commit 78b3972ff3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 13 additions and 1 deletions

View File

@ -696,7 +696,7 @@ final class XdsNameResolver extends NameResolver {
// called in syncContext
private void updateRoutes(List<VirtualHost> virtualHosts, long httpMaxStreamDurationNano,
@Nullable List<NamedFilterConfig> 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;

View File

@ -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();