From 59d4691d4c0d778ed85bf3029aace20abf4d9703 Mon Sep 17 00:00:00 2001 From: MV Shiva Prasad Date: Wed, 23 Sep 2026 16:01:04 +0530 Subject: [PATCH] api: move ATTR_ADDRESS_NAME to EquivalentAddressGroup --- .../java/io/grpc/EquivalentAddressGroup.java | 6 +++++ .../grpc/InternalEquivalentAddressGroup.java | 6 +++++ .../java/io/grpc/xds/CdsLoadBalancer2.java | 3 +-- .../io/grpc/xds/ClusterImplLoadBalancer.java | 4 +-- .../xds/internal/XdsInternalAttributes.java | 27 ------------------- .../security/SecurityProtocolNegotiators.java | 4 +-- .../grpc/xds/ClusterImplLoadBalancerTest.java | 8 +++--- .../xds/ClusterResolverLoadBalancerTest.java | 5 ++-- .../grpc/xds/XdsSecurityClientServerTest.java | 5 ++-- .../SecurityProtocolNegotiatorsTest.java | 4 +-- 10 files changed, 28 insertions(+), 44 deletions(-) delete mode 100644 xds/src/main/java/io/grpc/xds/internal/XdsInternalAttributes.java diff --git a/api/src/main/java/io/grpc/EquivalentAddressGroup.java b/api/src/main/java/io/grpc/EquivalentAddressGroup.java index 2dd52fe7f21..092850b6383 100644 --- a/api/src/main/java/io/grpc/EquivalentAddressGroup.java +++ b/api/src/main/java/io/grpc/EquivalentAddressGroup.java @@ -69,6 +69,12 @@ public final class EquivalentAddressGroup { @Attr static final Attributes.Key ATTR_WEIGHT = Attributes.Key.create("io.grpc.EquivalentAddressGroup.ATTR_WEIGHT"); + /** + * Name associated with individual address, if available (e.g., DNS name). + */ + @Attr + static final Attributes.Key ATTR_ADDRESS_NAME = + Attributes.Key.create("io.grpc.EquivalentAddressGroup.ATTR_ADDRESS_NAME"); private final List addrs; private final Attributes attrs; diff --git a/api/src/main/java/io/grpc/InternalEquivalentAddressGroup.java b/api/src/main/java/io/grpc/InternalEquivalentAddressGroup.java index cd171208af7..52c01d8d5a7 100644 --- a/api/src/main/java/io/grpc/InternalEquivalentAddressGroup.java +++ b/api/src/main/java/io/grpc/InternalEquivalentAddressGroup.java @@ -32,4 +32,10 @@ private InternalEquivalentAddressGroup() {} */ public static final Attributes.Key ATTR_BACKEND_SERVICE = EquivalentAddressGroup.ATTR_BACKEND_SERVICE; + + /** + * Name associated with individual address, if available (e.g., DNS name). + */ + public static final Attributes.Key ATTR_ADDRESS_NAME = + EquivalentAddressGroup.ATTR_ADDRESS_NAME; } diff --git a/xds/src/main/java/io/grpc/xds/CdsLoadBalancer2.java b/xds/src/main/java/io/grpc/xds/CdsLoadBalancer2.java index d4ee46da8b4..3a5ba17ac7a 100644 --- a/xds/src/main/java/io/grpc/xds/CdsLoadBalancer2.java +++ b/xds/src/main/java/io/grpc/xds/CdsLoadBalancer2.java @@ -61,7 +61,6 @@ import io.grpc.xds.client.Locality; import io.grpc.xds.client.XdsLogger; import io.grpc.xds.client.XdsLogger.XdsLogLevel; -import io.grpc.xds.internal.XdsInternalAttributes; import java.net.InetSocketAddress; import java.net.SocketAddress; import java.util.ArrayList; @@ -417,7 +416,7 @@ StatusOr edsUpdateToResult( .set(io.grpc.xds.XdsAttributes.ATTR_LOCALITY_WEIGHT, localityLbInfo.localityWeight()) .set(io.grpc.xds.XdsAttributes.ATTR_SERVER_WEIGHT, weight) - .set(XdsInternalAttributes.ATTR_ADDRESS_NAME, endpoint.hostname()) + .set(InternalEquivalentAddressGroup.ATTR_ADDRESS_NAME, endpoint.hostname()) .set(AddressFilter.PATH_CHAIN_KEY, pathChain) .build(); EquivalentAddressGroup eag; diff --git a/xds/src/main/java/io/grpc/xds/ClusterImplLoadBalancer.java b/xds/src/main/java/io/grpc/xds/ClusterImplLoadBalancer.java index 74ad8f01d4c..484e3a0a7c6 100644 --- a/xds/src/main/java/io/grpc/xds/ClusterImplLoadBalancer.java +++ b/xds/src/main/java/io/grpc/xds/ClusterImplLoadBalancer.java @@ -30,6 +30,7 @@ import io.grpc.ConnectivityState; import io.grpc.ConnectivityStateInfo; import io.grpc.EquivalentAddressGroup; +import io.grpc.InternalEquivalentAddressGroup; import io.grpc.InternalLogId; import io.grpc.LoadBalancer; import io.grpc.Metadata; @@ -53,7 +54,6 @@ import io.grpc.xds.client.XdsClient; import io.grpc.xds.client.XdsLogger; import io.grpc.xds.client.XdsLogger.XdsLogLevel; -import io.grpc.xds.internal.XdsInternalAttributes; import io.grpc.xds.internal.security.SecurityProtocolNegotiators; import io.grpc.xds.internal.security.SslContextProviderSupplier; import io.grpc.xds.orca.OrcaPerRequestUtil; @@ -240,7 +240,7 @@ public Subchannel createSubchannel(CreateSubchannelArgs args) { .set(ATTR_CLUSTER_LOCALITY, localityAtomicReference); if (GrpcUtil.getFlag("GRPC_EXPERIMENTAL_XDS_AUTHORITY_REWRITE", false)) { String hostname = args.getAddresses().get(0).getAttributes() - .get(XdsInternalAttributes.ATTR_ADDRESS_NAME); + .get(InternalEquivalentAddressGroup.ATTR_ADDRESS_NAME); if (hostname != null) { attrsBuilder.set(ATTR_SUBCHANNEL_ADDRESS_NAME, hostname); } diff --git a/xds/src/main/java/io/grpc/xds/internal/XdsInternalAttributes.java b/xds/src/main/java/io/grpc/xds/internal/XdsInternalAttributes.java deleted file mode 100644 index b05230ea30b..00000000000 --- a/xds/src/main/java/io/grpc/xds/internal/XdsInternalAttributes.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2025 The gRPC Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.grpc.xds.internal; - -import io.grpc.Attributes; -import io.grpc.EquivalentAddressGroup; - -public final class XdsInternalAttributes { - /** Name associated with individual address, if available (e.g., DNS name). */ - @EquivalentAddressGroup.Attr - public static final Attributes.Key ATTR_ADDRESS_NAME = - Attributes.Key.create("io.grpc.xds.XdsAttributes.addressName"); -} diff --git a/xds/src/main/java/io/grpc/xds/internal/security/SecurityProtocolNegotiators.java b/xds/src/main/java/io/grpc/xds/internal/security/SecurityProtocolNegotiators.java index a93299de11c..80aafd519ad 100644 --- a/xds/src/main/java/io/grpc/xds/internal/security/SecurityProtocolNegotiators.java +++ b/xds/src/main/java/io/grpc/xds/internal/security/SecurityProtocolNegotiators.java @@ -22,6 +22,7 @@ import com.google.common.base.Strings; import io.grpc.Attributes; import io.grpc.Grpc; +import io.grpc.InternalEquivalentAddressGroup; import io.grpc.internal.GrpcUtil; import io.grpc.internal.ObjectPool; import io.grpc.netty.GrpcHttp2ConnectionHandler; @@ -32,7 +33,6 @@ import io.grpc.netty.ProtocolNegotiationEvent; import io.grpc.xds.EnvoyServerProtoData; import io.grpc.xds.EnvoyServerProtoData.UpstreamTlsContext; -import io.grpc.xds.internal.XdsInternalAttributes; import io.grpc.xds.internal.security.trust.CertificateUtils; import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelHandlerAdapter; @@ -150,7 +150,7 @@ public ChannelHandler newHandler(GrpcHttp2ConnectionHandler grpcHandler) { return fallbackProtocolNegotiator.newHandler(grpcHandler); } return new ClientSecurityHandler(grpcHandler, localSslContextProviderSupplier, - grpcHandler.getEagAttributes().get(XdsInternalAttributes.ATTR_ADDRESS_NAME)); + grpcHandler.getEagAttributes().get(InternalEquivalentAddressGroup.ATTR_ADDRESS_NAME)); } @Override diff --git a/xds/src/test/java/io/grpc/xds/ClusterImplLoadBalancerTest.java b/xds/src/test/java/io/grpc/xds/ClusterImplLoadBalancerTest.java index e89c0c3b8d5..276229b083b 100644 --- a/xds/src/test/java/io/grpc/xds/ClusterImplLoadBalancerTest.java +++ b/xds/src/test/java/io/grpc/xds/ClusterImplLoadBalancerTest.java @@ -39,6 +39,7 @@ import io.grpc.ConnectivityStateInfo; import io.grpc.EquivalentAddressGroup; import io.grpc.InsecureChannelCredentials; +import io.grpc.InternalEquivalentAddressGroup; import io.grpc.LoadBalancer; import io.grpc.LoadBalancer.CreateSubchannelArgs; import io.grpc.LoadBalancer.FixedResultPicker; @@ -81,7 +82,6 @@ import io.grpc.xds.client.Stats.ClusterStats; import io.grpc.xds.client.Stats.UpstreamLocalityStats; import io.grpc.xds.client.XdsClient; -import io.grpc.xds.internal.XdsInternalAttributes; import io.grpc.xds.internal.security.CommonTlsContextTestsUtil; import io.grpc.xds.internal.security.SecurityProtocolNegotiators; import io.grpc.xds.internal.security.SslContextProvider; @@ -917,7 +917,7 @@ public void endpointAddressesAttachedWithClusterName() { assertThat(subchannel.getAttributes().get(ATTR_SUBCHANNEL_ADDRESS_NAME)).isEqualTo( "authority-host-name"); for (EquivalentAddressGroup eag : subchannel.getAllAddresses()) { - assertThat(eag.getAttributes().get(XdsInternalAttributes.ATTR_ADDRESS_NAME)) + assertThat(eag.getAttributes().get(InternalEquivalentAddressGroup.ATTR_ADDRESS_NAME)) .isEqualTo("authority-host-name"); } @@ -968,7 +968,7 @@ public void endpointAddressesAttachedWithClusterName() { // Sub Channel wrapper args won't have the address name although addresses will. assertThat(subchannel.getAttributes().get(ATTR_SUBCHANNEL_ADDRESS_NAME)).isNull(); for (EquivalentAddressGroup eag : subchannel.getAllAddresses()) { - assertThat(eag.getAttributes().get(XdsInternalAttributes.ATTR_ADDRESS_NAME)) + assertThat(eag.getAttributes().get(InternalEquivalentAddressGroup.ATTR_ADDRESS_NAME)) .isEqualTo("authority-host-name"); } @@ -1123,7 +1123,7 @@ public String toString() { // Unique but arbitrary string .set(EquivalentAddressGroup.ATTR_LOCALITY_NAME, locality.toString()); if (authorityHostname != null) { - attributes.set(XdsInternalAttributes.ATTR_ADDRESS_NAME, authorityHostname); + attributes.set(InternalEquivalentAddressGroup.ATTR_ADDRESS_NAME, authorityHostname); } EquivalentAddressGroup eag = new EquivalentAddressGroup(new FakeSocketAddress(name), attributes.build()); diff --git a/xds/src/test/java/io/grpc/xds/ClusterResolverLoadBalancerTest.java b/xds/src/test/java/io/grpc/xds/ClusterResolverLoadBalancerTest.java index 388af1a643e..f5fb6beb175 100644 --- a/xds/src/test/java/io/grpc/xds/ClusterResolverLoadBalancerTest.java +++ b/xds/src/test/java/io/grpc/xds/ClusterResolverLoadBalancerTest.java @@ -98,7 +98,6 @@ import io.grpc.xds.client.Bootstrapper.ServerInfo; import io.grpc.xds.client.LoadStatsManager2; import io.grpc.xds.client.XdsClient; -import io.grpc.xds.internal.XdsInternalAttributes; import java.net.InetSocketAddress; import java.net.URI; import java.util.ArrayList; @@ -428,7 +427,7 @@ public void edsClustersEndpointHostname_addedToAddressAttribute() { assertThat( childBalancer.addresses.get(0).getAttributes() - .get(XdsInternalAttributes.ATTR_ADDRESS_NAME)).isEqualTo("hostname1"); + .get(InternalEquivalentAddressGroup.ATTR_ADDRESS_NAME)).isEqualTo("hostname1"); } @Test @@ -931,7 +930,7 @@ public void onlyLogicalDnsCluster_endpointsResolved() { assertThat(childBalancer.addresses.get(0).getAttributes() .get(InternalEquivalentAddressGroup.ATTR_BACKEND_SERVICE)).isEqualTo(CLUSTER); assertThat(childBalancer.addresses.get(0).getAttributes() - .get(XdsInternalAttributes.ATTR_ADDRESS_NAME)).isEqualTo(DNS_HOST_NAME + ":9000"); + .get(InternalEquivalentAddressGroup.ATTR_ADDRESS_NAME)).isEqualTo(DNS_HOST_NAME + ":9000"); } @Test diff --git a/xds/src/test/java/io/grpc/xds/XdsSecurityClientServerTest.java b/xds/src/test/java/io/grpc/xds/XdsSecurityClientServerTest.java index 6b39106f18c..f394182db97 100644 --- a/xds/src/test/java/io/grpc/xds/XdsSecurityClientServerTest.java +++ b/xds/src/test/java/io/grpc/xds/XdsSecurityClientServerTest.java @@ -43,6 +43,7 @@ import io.grpc.Grpc; import io.grpc.InsecureChannelCredentials; import io.grpc.InsecureServerCredentials; +import io.grpc.InternalEquivalentAddressGroup; import io.grpc.ManagedChannelBuilder; import io.grpc.NameResolver; import io.grpc.NameResolverProvider; @@ -71,7 +72,6 @@ import io.grpc.xds.client.Bootstrapper; import io.grpc.xds.client.CommonBootstrapperTestUtils; import io.grpc.xds.internal.Matchers.HeaderMatcher; -import io.grpc.xds.internal.XdsInternalAttributes; import io.grpc.xds.internal.security.CommonTlsContextTestsUtil; import io.grpc.xds.internal.security.SecurityProtocolNegotiators; import io.grpc.xds.internal.security.SslContextProviderSupplier; @@ -843,7 +843,8 @@ private SimpleServiceGrpc.SimpleServiceBlockingStub getBlockingStub( upstreamTlsContext, tlsContextManagerForClient)) : Attributes.newBuilder(); if (addrNameAttribute != null) { - sslContextAttributesBuilder.set(XdsInternalAttributes.ATTR_ADDRESS_NAME, addrNameAttribute); + sslContextAttributesBuilder.set( + InternalEquivalentAddressGroup.ATTR_ADDRESS_NAME, addrNameAttribute); } sslContextAttributes = sslContextAttributesBuilder.build(); fakeNameResolverFactory.setServers( diff --git a/xds/src/test/java/io/grpc/xds/internal/security/SecurityProtocolNegotiatorsTest.java b/xds/src/test/java/io/grpc/xds/internal/security/SecurityProtocolNegotiatorsTest.java index 125b7e65aa6..6fdf59ab5ca 100644 --- a/xds/src/test/java/io/grpc/xds/internal/security/SecurityProtocolNegotiatorsTest.java +++ b/xds/src/test/java/io/grpc/xds/internal/security/SecurityProtocolNegotiatorsTest.java @@ -38,6 +38,7 @@ import io.grpc.Attributes; import io.grpc.ChannelLogger; import io.grpc.ChannelLogger.ChannelLogLevel; +import io.grpc.InternalEquivalentAddressGroup; import io.grpc.internal.FakeClock; import io.grpc.internal.TestUtils.NoopChannelLogger; import io.grpc.netty.GrpcHttp2ConnectionHandler; @@ -50,7 +51,6 @@ import io.grpc.xds.TlsContextManager; import io.grpc.xds.client.Bootstrapper; import io.grpc.xds.client.CommonBootstrapperTestUtils; -import io.grpc.xds.internal.XdsInternalAttributes; import io.grpc.xds.internal.security.SecurityProtocolNegotiators.ClientSecurityHandler; import io.grpc.xds.internal.security.SecurityProtocolNegotiators.ClientSecurityProtocolNegotiator; import io.grpc.xds.internal.security.certprovider.CommonCertProviderTestUtils; @@ -165,7 +165,7 @@ public void clientSecurityProtocolNegotiator_autoHostSni_hostnamePassedToClientS Attributes.newBuilder() .set(SecurityProtocolNegotiators.ATTR_SSL_CONTEXT_PROVIDER_SUPPLIER, new SslContextProviderSupplier(upstreamTlsContext, mockTlsContextManager)) - .set(XdsInternalAttributes.ATTR_ADDRESS_NAME, FAKE_AUTHORITY) + .set(InternalEquivalentAddressGroup.ATTR_ADDRESS_NAME, FAKE_AUTHORITY) .build()); ChannelHandler newHandler = pn.newHandler(mockHandler); assertThat(newHandler).isNotNull();