From cb068db7d400f65e6cf4d017b0c8010cf07e359d Mon Sep 17 00:00:00 2001 From: Mattie Fu Date: Thu, 29 Oct 2026 12:24:50 -0400 Subject: [PATCH 1/5] fix: add user agent to session path --- .../v2/internal/api/ChannelProviders.java | 35 +++++++++++++++++-- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/api/ChannelProviders.java b/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/api/ChannelProviders.java index 945e08ab47fb..95f593cc9e4f 100644 --- a/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/api/ChannelProviders.java +++ b/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/api/ChannelProviders.java @@ -19,14 +19,22 @@ import com.google.auth.Credentials; import com.google.auth.oauth2.GoogleCredentials; import com.google.bigtable.v2.FeatureFlags; +import com.google.cloud.bigtable.Version; import com.google.cloud.bigtable.data.v2.internal.channels.DirectPathIpInterceptor; import com.google.common.base.MoreObjects; import com.google.common.base.MoreObjects.ToStringHelper; import com.google.common.collect.ImmutableList; +import io.grpc.CallOptions; +import io.grpc.Channel; import io.grpc.ChannelCredentials; +import io.grpc.ClientCall; +import io.grpc.ClientInterceptor; import io.grpc.CompositeChannelCredentials; +import io.grpc.ForwardingClientCall; import io.grpc.Grpc; import io.grpc.ManagedChannelBuilder; +import io.grpc.Metadata; +import io.grpc.MethodDescriptor; import io.grpc.TlsChannelCredentials; import io.grpc.alts.AltsChannelCredentials; import io.grpc.alts.GoogleDefaultChannelCredentials; @@ -39,6 +47,9 @@ public abstract class ChannelProviders { public static final String DEFAULT_HOST = "bigtable.googleapis.com"; + private static final Metadata.Key USER_AGENT_KEY = + Metadata.Key.of("user-agent", Metadata.ASCII_STRING_MARSHALLER); + private static final String USER_AGENT_VALUE = "bigtable-java/" + Version.VERSION; public interface ChannelProvider { @@ -51,6 +62,21 @@ public interface ChannelProvider { boolean isSingleEndpoint(); } + public static class UserAgentInterceptor implements ClientInterceptor { + + @Override + public ClientCall interceptCall( + MethodDescriptor method, CallOptions callOptions, Channel next) { + ClientCall call = next.newCall(method, callOptions); + return new ForwardingClientCall.SimpleForwardingClientCall(call) { + public void start(ClientCall.Listener responseListener, Metadata headers) { + headers.put(USER_AGENT_KEY, USER_AGENT_VALUE); + super.start(responseListener, headers); + } + }; + } + } + public static class CloudPath implements ChannelProvider { private final String host; private final int port; @@ -78,7 +104,8 @@ public CloudPath(String endpoint, Credentials credentials) { @Override public ManagedChannelBuilder newChannelBuilder() { - return Grpc.newChannelBuilderForAddress(host, port, credentials); + return Grpc.newChannelBuilderForAddress(host, port, credentials) + .intercept(new UserAgentInterceptor()); } @Override @@ -139,7 +166,8 @@ public static DirectAccess withFallback(String endpoint, Credentials credentials @Override public ManagedChannelBuilder newChannelBuilder() { return Grpc.newChannelBuilder("google-c2p:///" + endpoint, credentials) - .intercept(new DirectPathIpInterceptor(true)); + .intercept(new DirectPathIpInterceptor(true)) + .intercept(new UserAgentInterceptor()); } public String getEndpoint() { @@ -193,7 +221,8 @@ public ManagedChannelBuilder newChannelBuilder() { String host = endpoint.substring(0, portSplit); int port = Integer.parseInt(endpoint.substring(portSplit + 1)); - return Grpc.newChannelBuilderForAddress(host, port, credentials); + return Grpc.newChannelBuilderForAddress(host, port, credentials) + .intercept(new UserAgentInterceptor()); } @Override From 4f2e532b791056e8ccad193f6e2f67b0d8ade8d6 Mon Sep 17 00:00:00 2001 From: Mattie Fu Date: Thu, 29 Oct 2026 12:30:36 -0400 Subject: [PATCH 2/5] fix --- .../v2/internal/api/ChannelProviders.java | 36 +++---------------- 1 file changed, 5 insertions(+), 31 deletions(-) diff --git a/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/api/ChannelProviders.java b/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/api/ChannelProviders.java index 95f593cc9e4f..79f8b45838ff 100644 --- a/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/api/ChannelProviders.java +++ b/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/api/ChannelProviders.java @@ -24,17 +24,10 @@ import com.google.common.base.MoreObjects; import com.google.common.base.MoreObjects.ToStringHelper; import com.google.common.collect.ImmutableList; -import io.grpc.CallOptions; -import io.grpc.Channel; import io.grpc.ChannelCredentials; -import io.grpc.ClientCall; -import io.grpc.ClientInterceptor; import io.grpc.CompositeChannelCredentials; -import io.grpc.ForwardingClientCall; import io.grpc.Grpc; import io.grpc.ManagedChannelBuilder; -import io.grpc.Metadata; -import io.grpc.MethodDescriptor; import io.grpc.TlsChannelCredentials; import io.grpc.alts.AltsChannelCredentials; import io.grpc.alts.GoogleDefaultChannelCredentials; @@ -47,9 +40,7 @@ public abstract class ChannelProviders { public static final String DEFAULT_HOST = "bigtable.googleapis.com"; - private static final Metadata.Key USER_AGENT_KEY = - Metadata.Key.of("user-agent", Metadata.ASCII_STRING_MARSHALLER); - private static final String USER_AGENT_VALUE = "bigtable-java/" + Version.VERSION; + private static final String USER_AGENT = "bigtable-java/" + Version.VERSION; public interface ChannelProvider { @@ -62,21 +53,6 @@ public interface ChannelProvider { boolean isSingleEndpoint(); } - public static class UserAgentInterceptor implements ClientInterceptor { - - @Override - public ClientCall interceptCall( - MethodDescriptor method, CallOptions callOptions, Channel next) { - ClientCall call = next.newCall(method, callOptions); - return new ForwardingClientCall.SimpleForwardingClientCall(call) { - public void start(ClientCall.Listener responseListener, Metadata headers) { - headers.put(USER_AGENT_KEY, USER_AGENT_VALUE); - super.start(responseListener, headers); - } - }; - } - } - public static class CloudPath implements ChannelProvider { private final String host; private final int port; @@ -104,8 +80,7 @@ public CloudPath(String endpoint, Credentials credentials) { @Override public ManagedChannelBuilder newChannelBuilder() { - return Grpc.newChannelBuilderForAddress(host, port, credentials) - .intercept(new UserAgentInterceptor()); + return Grpc.newChannelBuilderForAddress(host, port, credentials).userAgent(USER_AGENT); } @Override @@ -166,8 +141,8 @@ public static DirectAccess withFallback(String endpoint, Credentials credentials @Override public ManagedChannelBuilder newChannelBuilder() { return Grpc.newChannelBuilder("google-c2p:///" + endpoint, credentials) - .intercept(new DirectPathIpInterceptor(true)) - .intercept(new UserAgentInterceptor()); + .userAgent(USER_AGENT) + .intercept(new DirectPathIpInterceptor(true)); } public String getEndpoint() { @@ -221,8 +196,7 @@ public ManagedChannelBuilder newChannelBuilder() { String host = endpoint.substring(0, portSplit); int port = Integer.parseInt(endpoint.substring(portSplit + 1)); - return Grpc.newChannelBuilderForAddress(host, port, credentials) - .intercept(new UserAgentInterceptor()); + return Grpc.newChannelBuilderForAddress(host, port, credentials).userAgent(USER_AGENT); } @Override From 02abba61238cc223dee4fbae8d199193a0e14c23 Mon Sep 17 00:00:00 2001 From: Mattie Fu Date: Thu, 29 Oct 2026 13:13:51 -0400 Subject: [PATCH 3/5] add api-client and add user agent in shim --- .../data/v2/internal/api/ChannelProviders.java | 3 ++- .../cloud/bigtable/data/v2/internal/api/Client.java | 1 + .../cloud/bigtable/data/v2/internal/api/Util.java | 11 +++++++++++ .../bigtable/data/v2/internal/compat/ShimImpl.java | 2 ++ 4 files changed, 16 insertions(+), 1 deletion(-) diff --git a/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/api/ChannelProviders.java b/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/api/ChannelProviders.java index 79f8b45838ff..7b63df44bdf3 100644 --- a/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/api/ChannelProviders.java +++ b/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/api/ChannelProviders.java @@ -40,7 +40,8 @@ public abstract class ChannelProviders { public static final String DEFAULT_HOST = "bigtable.googleapis.com"; - private static final String USER_AGENT = "bigtable-java/" + Version.VERSION; + + public static final String USER_AGENT = "java-bigtable/" + Version.VERSION; public interface ChannelProvider { diff --git a/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/api/Client.java b/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/api/Client.java index b6f72659c092..f3a5728b7816 100644 --- a/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/api/Client.java +++ b/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/api/Client.java @@ -226,6 +226,7 @@ public Client( metrics .get() .configureGrpcChannel(channelBuilder) + .userAgent(ChannelProviders.USER_AGENT) .keepAliveTime(KEEPALIVE_TIME_MS, TimeUnit.MILLISECONDS) .keepAliveTimeout(KEEPALIVE_TIMEOUT_MS, TimeUnit.MILLISECONDS) // TODO: consider localizing this for large reads diff --git a/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/api/Util.java b/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/api/Util.java index fba8bd0b8710..21026288c346 100644 --- a/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/api/Util.java +++ b/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/api/Util.java @@ -18,6 +18,7 @@ import com.google.bigtable.v2.FeatureFlags; import com.google.bigtable.v2.Mutation; +import com.google.cloud.bigtable.data.v2.stub.BigtableStubSettings; import io.grpc.Metadata; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -35,6 +36,14 @@ public class Util { private static final Metadata.Key FEATURE_FLAGS_KEY = Metadata.Key.of("bigtable-features", Metadata.ASCII_STRING_MARSHALLER); + private static final Metadata.Key API_CLIENT_KEY = + Metadata.Key.of("x-goog-api-client", Metadata.ASCII_STRING_MARSHALLER); + private static final String API_CLIENT_VALUE = + BigtableStubSettings.defaultApiClientHeaderProviderBuilder() + .build() + .getHeaders() + .get("x-goog-api-client"); + public static Metadata composeMetadata( FeatureFlags featureFlags, Map headerParams) { Metadata metadata = new Metadata(); @@ -59,6 +68,8 @@ public static Metadata composeMetadata( .map(e -> String.format("%s=%s", e.getKey(), urlEncode(e.getValue()))) .collect(Collectors.joining("&"))); + metadata.put(API_CLIENT_KEY, API_CLIENT_VALUE); + return metadata; } diff --git a/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/compat/ShimImpl.java b/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/compat/ShimImpl.java index 8db91d0a9308..a22b4c752585 100644 --- a/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/compat/ShimImpl.java +++ b/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/compat/ShimImpl.java @@ -32,6 +32,7 @@ import com.google.bigtable.v2.Row; import com.google.bigtable.v2.SessionReadModifyWriteRowResponse; import com.google.bigtable.v2.SessionReadRowResponse; +import com.google.cloud.bigtable.data.v2.internal.api.ChannelProviders; import com.google.cloud.bigtable.data.v2.internal.api.ChannelProviders.ChannelProvider; import com.google.cloud.bigtable.data.v2.internal.api.ChannelProviders.ConfiguredChannelProvider; import com.google.cloud.bigtable.data.v2.internal.api.Client; @@ -315,6 +316,7 @@ private static ChannelProvider configureChannelProvider( channelBuilder -> metrics .configureGrpcChannel(channelBuilder) + .userAgent(ChannelProviders.USER_AGENT) .keepAliveTime(Client.KEEPALIVE_TIME_MS, TimeUnit.MILLISECONDS) .keepAliveTimeout(Client.KEEPALIVE_TIMEOUT_MS, TimeUnit.MILLISECONDS) // TODO: consider localizing this for large reads From da9368b773784efb6219d8374a0da63348cad5bb Mon Sep 17 00:00:00 2001 From: Mattie Fu Date: Thu, 29 Oct 2026 14:10:49 -0400 Subject: [PATCH 4/5] clean up --- .../v2/internal/api/ChannelProviders.java | 8 +--- .../bigtable/data/v2/internal/api/Client.java | 41 ++++++++++--------- .../data/v2/internal/compat/ShimImpl.java | 23 ++--------- 3 files changed, 27 insertions(+), 45 deletions(-) diff --git a/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/api/ChannelProviders.java b/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/api/ChannelProviders.java index 7b63df44bdf3..945e08ab47fb 100644 --- a/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/api/ChannelProviders.java +++ b/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/api/ChannelProviders.java @@ -19,7 +19,6 @@ import com.google.auth.Credentials; import com.google.auth.oauth2.GoogleCredentials; import com.google.bigtable.v2.FeatureFlags; -import com.google.cloud.bigtable.Version; import com.google.cloud.bigtable.data.v2.internal.channels.DirectPathIpInterceptor; import com.google.common.base.MoreObjects; import com.google.common.base.MoreObjects.ToStringHelper; @@ -41,8 +40,6 @@ public abstract class ChannelProviders { public static final String DEFAULT_HOST = "bigtable.googleapis.com"; - public static final String USER_AGENT = "java-bigtable/" + Version.VERSION; - public interface ChannelProvider { ManagedChannelBuilder newChannelBuilder(); @@ -81,7 +78,7 @@ public CloudPath(String endpoint, Credentials credentials) { @Override public ManagedChannelBuilder newChannelBuilder() { - return Grpc.newChannelBuilderForAddress(host, port, credentials).userAgent(USER_AGENT); + return Grpc.newChannelBuilderForAddress(host, port, credentials); } @Override @@ -142,7 +139,6 @@ public static DirectAccess withFallback(String endpoint, Credentials credentials @Override public ManagedChannelBuilder newChannelBuilder() { return Grpc.newChannelBuilder("google-c2p:///" + endpoint, credentials) - .userAgent(USER_AGENT) .intercept(new DirectPathIpInterceptor(true)); } @@ -197,7 +193,7 @@ public ManagedChannelBuilder newChannelBuilder() { String host = endpoint.substring(0, portSplit); int port = Integer.parseInt(endpoint.substring(portSplit + 1)); - return Grpc.newChannelBuilderForAddress(host, port, credentials).userAgent(USER_AGENT); + return Grpc.newChannelBuilderForAddress(host, port, credentials); } @Override diff --git a/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/api/Client.java b/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/api/Client.java index f3a5728b7816..4893d17eddf1 100644 --- a/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/api/Client.java +++ b/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/api/Client.java @@ -24,6 +24,7 @@ import com.google.bigtable.v2.OpenAuthorizedViewRequest; import com.google.bigtable.v2.OpenMaterializedViewRequest; import com.google.bigtable.v2.OpenTableRequest.Permission; +import com.google.cloud.bigtable.Version; import com.google.cloud.bigtable.data.v2.internal.api.ChannelProviders.ChannelProvider; import com.google.cloud.bigtable.data.v2.internal.api.ChannelProviders.ConfiguredChannelProvider; import com.google.cloud.bigtable.data.v2.internal.channels.ChannelPool; @@ -65,6 +66,8 @@ public class Client implements AutoCloseable { // up on it so close() returns. The watchdog interval is what makes the worst case finite. private static final Duration POOL_DRAIN_TIMEOUT = Duration.ofMinutes(6); + public static final String USER_AGENT = "bigtable-java/" + Version.VERSION; + public static final FeatureFlags BASE_FEATURE_FLAGS = FeatureFlags.newBuilder() .setReverseScans(false) @@ -113,6 +116,19 @@ public class Client implements AutoCloseable { // close() has already missed in its snapshot. private boolean closed = false; + public static ChannelProvider configureChannelProvider( + ChannelProvider channelProvider, Metrics metrics) { + return new ConfiguredChannelProvider( + channelProvider, + channelBuilder -> + metrics + .configureGrpcChannel(channelBuilder) + .userAgent(USER_AGENT) + .keepAliveTime(KEEPALIVE_TIME_MS, TimeUnit.MILLISECONDS) + .keepAliveTimeout(KEEPALIVE_TIMEOUT_MS, TimeUnit.MILLISECONDS) + .maxInboundMessageSize(256 * 1024 * 1024)); + } + public static Client create(ClientSettings settings) throws IOException { FeatureFlags featureFlags = settings.getChannelProvider().updateFeatureFlags(BASE_FEATURE_FLAGS); @@ -156,6 +172,9 @@ public static Client create(ClientSettings settings) throws IOException { metrics.start(); } + ChannelProvider channelProvider = + configureChannelProvider(settings.getChannelProvider(), metrics); + ClientConfigurationManager configManager = null; try { @@ -163,7 +182,7 @@ public static Client create(ClientSettings settings) throws IOException { new ClientConfigurationManager( featureFlags, clientInfo, - settings.getChannelProvider(), + channelProvider, metrics.getDebugTagTracer(), backgroundExecutor); configManager.start().get(); @@ -193,7 +212,7 @@ public static Client create(ClientSettings settings) throws IOException { Resource.createOwned(backgroundExecutor, backgroundExecutor::shutdown), Resource.createOwned( userCallbackExecutor, () -> shutdownAndAwait(userCallbackExecutor)), - settings.getChannelProvider()); + channelProvider); } /** @@ -219,25 +238,9 @@ public Client( defaultCallOptions = CallOptions.DEFAULT; - ChannelProvider configuredChannelProvider = - new ConfiguredChannelProvider( - channelProvider, - channelBuilder -> - metrics - .get() - .configureGrpcChannel(channelBuilder) - .userAgent(ChannelProviders.USER_AGENT) - .keepAliveTime(KEEPALIVE_TIME_MS, TimeUnit.MILLISECONDS) - .keepAliveTimeout(KEEPALIVE_TIMEOUT_MS, TimeUnit.MILLISECONDS) - // TODO: consider localizing this for large reads - .maxInboundMessageSize(256 * 1024 * 1024)); - SwitchingChannelPool switchingPool = new SwitchingChannelPool( - configuredChannelProvider, - configManager.get(), - metrics.get(), - backgroundExecutor.get()); + channelProvider, configManager.get(), metrics.get(), backgroundExecutor.get()); switchingPool.start(); this.channelPool = Resource.createOwned(switchingPool, switchingPool::close); } diff --git a/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/compat/ShimImpl.java b/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/compat/ShimImpl.java index a22b4c752585..86f91c57b274 100644 --- a/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/compat/ShimImpl.java +++ b/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/compat/ShimImpl.java @@ -32,9 +32,7 @@ import com.google.bigtable.v2.Row; import com.google.bigtable.v2.SessionReadModifyWriteRowResponse; import com.google.bigtable.v2.SessionReadRowResponse; -import com.google.cloud.bigtable.data.v2.internal.api.ChannelProviders; import com.google.cloud.bigtable.data.v2.internal.api.ChannelProviders.ChannelProvider; -import com.google.cloud.bigtable.data.v2.internal.api.ChannelProviders.ConfiguredChannelProvider; import com.google.cloud.bigtable.data.v2.internal.api.Client; import com.google.cloud.bigtable.data.v2.internal.api.Client.Resource; import com.google.cloud.bigtable.data.v2.internal.channels.ChannelPool; @@ -73,7 +71,6 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; import java.util.function.Function; import java.util.logging.Level; import java.util.logging.Logger; @@ -150,7 +147,7 @@ public static Shim create( // Channel provider for the client. DirectAccess with fallback by default. ChannelProvider clientChannelProvider = - configureChannelProvider( + Client.configureChannelProvider( GaxDirectAccessChannelProvider.createWithFallback( (InstantiatingGrpcChannelProvider) transportProvider, callCreds), metrics); @@ -159,7 +156,7 @@ public static Shim create( Client.BASE_FEATURE_FLAGS, clientInfo, clientChannelProvider, metrics, bgExecutor)) { // Directpath failed, revert to basic channel provider for the client. clientChannelProvider = - configureChannelProvider( + Client.configureChannelProvider( new GaxBasicChannelProvider( (InstantiatingGrpcChannelProvider) transportProvider, callCreds), metrics); @@ -167,7 +164,7 @@ public static Shim create( // ChannelProvider for configuration manager. ChannelProvider configChannelProvider = - configureChannelProvider( + Client.configureChannelProvider( new GaxBasicChannelProvider( (InstantiatingGrpcChannelProvider) transportProvider, callCreds), metrics); @@ -309,20 +306,6 @@ static Resource selectUserCallbackExecutor( return Resource.createOwned(owned, () -> Client.shutdownAndAwait(owned)); } - private static ChannelProvider configureChannelProvider( - ChannelProvider channelProvider, Metrics metrics) { - return new ConfiguredChannelProvider( - channelProvider, - channelBuilder -> - metrics - .configureGrpcChannel(channelBuilder) - .userAgent(ChannelProviders.USER_AGENT) - .keepAliveTime(Client.KEEPALIVE_TIME_MS, TimeUnit.MILLISECONDS) - .keepAliveTimeout(Client.KEEPALIVE_TIMEOUT_MS, TimeUnit.MILLISECONDS) - // TODO: consider localizing this for large reads - .maxInboundMessageSize(256 * 1024 * 1024)); - } - private static boolean checkDirectAccessAvailable( FeatureFlags featureFlags, ClientInfo clientInfo, From 805d073f50f207e6ca44bfaf957818689ab128ff Mon Sep 17 00:00:00 2001 From: Mattie Fu Date: Fri, 30 Oct 2026 10:55:27 -0400 Subject: [PATCH 5/5] remove reference to gax --- .../google/cloud/bigtable/data/v2/internal/api/Util.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/api/Util.java b/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/api/Util.java index 21026288c346..c093b9967929 100644 --- a/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/api/Util.java +++ b/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/api/Util.java @@ -18,7 +18,7 @@ import com.google.bigtable.v2.FeatureFlags; import com.google.bigtable.v2.Mutation; -import com.google.cloud.bigtable.data.v2.stub.BigtableStubSettings; +import com.google.cloud.bigtable.Version; import io.grpc.Metadata; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -39,10 +39,7 @@ public class Util { private static final Metadata.Key API_CLIENT_KEY = Metadata.Key.of("x-goog-api-client", Metadata.ASCII_STRING_MARSHALLER); private static final String API_CLIENT_VALUE = - BigtableStubSettings.defaultApiClientHeaderProviderBuilder() - .build() - .getHeaders() - .get("x-goog-api-client"); + "gl-java/" + System.getProperty("java.version") + " gccl/" + Version.VERSION; public static Metadata composeMetadata( FeatureFlags featureFlags, Map headerParams) {