From aa92a9ca8246d75723bf90386cc1b4b86b62451f Mon Sep 17 00:00:00 2001 From: Igor Bernstein Date: Thu, 25 Jun 2026 12:42:43 -0400 Subject: [PATCH 1/5] chore: expose user set executor on TransportProvider This allows service clients to reuse that executor for other transport related things in addition to gax --- .../gaxx/grpc/BigtableTransportChannelProvider.java | 6 ++++++ .../gax/grpc/InstantiatingGrpcChannelProvider.java | 6 ++++++ .../InstantiatingHttpJsonChannelProvider.java | 6 ++++++ .../api/gax/rpc/FixedTransportChannelProvider.java | 7 +++++++ .../google/api/gax/rpc/TransportChannelProvider.java | 12 ++++++++++++ 5 files changed, 37 insertions(+) diff --git a/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/gaxx/grpc/BigtableTransportChannelProvider.java b/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/gaxx/grpc/BigtableTransportChannelProvider.java index e0d120d27795..31d3d9f8cc79 100644 --- a/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/gaxx/grpc/BigtableTransportChannelProvider.java +++ b/java-bigtable/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/gaxx/grpc/BigtableTransportChannelProvider.java @@ -74,6 +74,12 @@ public boolean needsExecutor() { return delegate.needsExecutor(); } + @Nullable + @Override + public Executor getExecutor() { + return delegate.getExecutor(); + } + @Override @Deprecated public BigtableTransportChannelProvider withExecutor(ScheduledExecutorService executor) { diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/InstantiatingGrpcChannelProvider.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/InstantiatingGrpcChannelProvider.java index c4543d986741..56f44fa7ae0a 100644 --- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/InstantiatingGrpcChannelProvider.java +++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/InstantiatingGrpcChannelProvider.java @@ -264,6 +264,12 @@ public boolean needsExecutor() { return executor == null; } + @Nullable + @Override + public Executor getExecutor() { + return executor; + } + @Deprecated @Override public TransportChannelProvider withExecutor(ScheduledExecutorService executor) { diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/InstantiatingHttpJsonChannelProvider.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/InstantiatingHttpJsonChannelProvider.java index daf94a498cc4..495fec1ed450 100644 --- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/InstantiatingHttpJsonChannelProvider.java +++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/InstantiatingHttpJsonChannelProvider.java @@ -105,6 +105,12 @@ public boolean needsExecutor() { return executor == null; } + @Nullable + @Override + public Executor getExecutor() { + return executor; + } + @Deprecated @Override public TransportChannelProvider withExecutor(ScheduledExecutorService executor) { diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/FixedTransportChannelProvider.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/FixedTransportChannelProvider.java index daa101910595..51936a13ad06 100644 --- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/FixedTransportChannelProvider.java +++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/FixedTransportChannelProvider.java @@ -36,6 +36,7 @@ import java.util.Map; import java.util.concurrent.Executor; import java.util.concurrent.ScheduledExecutorService; +import javax.annotation.Nullable; /** An instance of TransportChannelProvider that always provides the same TransportChannel. */ @InternalExtensionOnly @@ -57,6 +58,12 @@ public boolean needsExecutor() { return false; } + @Nullable + @Override + public Executor getExecutor() { + return null; + } + @Override public FixedTransportChannelProvider withExecutor(ScheduledExecutorService executor) { return withExecutor((Executor) executor); diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/TransportChannelProvider.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/TransportChannelProvider.java index cc2ebdb064b6..aece82531770 100644 --- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/TransportChannelProvider.java +++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/TransportChannelProvider.java @@ -36,6 +36,7 @@ import java.util.Map; import java.util.concurrent.Executor; import java.util.concurrent.ScheduledExecutorService; +import javax.annotation.Nullable; /** * Provides an interface to either build a TransportChannel or provide a fixed TransportChannel that @@ -70,6 +71,17 @@ public interface TransportChannelProvider { @Deprecated boolean needsExecutor(); + /** + * @return the user provided executor. This can be null if the user didn't override the executor + * and the TransportProvider is using its internal executor. + * @throws UnsupportedOperationException if the TransportProvider doesn't support this method. + */ + @Nullable + default Executor getExecutor() { + throw new UnsupportedOperationException( + this.getClass().getName() + " doesnt support getExecutor()"); + } + /** Sets the executor to use when constructing a new {@link TransportChannel}. */ TransportChannelProvider withExecutor(Executor executor); From a9055c28a47a4f0b2cd10efb67ca16dbb8fa3de1 Mon Sep 17 00:00:00 2001 From: Igor Bernstein Date: Fri, 26 Jun 2026 12:54:30 -0400 Subject: [PATCH 2/5] return null --- .../java/com/google/api/gax/rpc/TransportChannelProvider.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/TransportChannelProvider.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/TransportChannelProvider.java index aece82531770..e50e044fab45 100644 --- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/TransportChannelProvider.java +++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/TransportChannelProvider.java @@ -78,8 +78,7 @@ public interface TransportChannelProvider { */ @Nullable default Executor getExecutor() { - throw new UnsupportedOperationException( - this.getClass().getName() + " doesnt support getExecutor()"); + return null; } /** Sets the executor to use when constructing a new {@link TransportChannel}. */ From f087d01d9750efc3558edd99b28a90383586dce9 Mon Sep 17 00:00:00 2001 From: Igor Bernstein Date: Fri, 26 Jun 2026 13:44:37 -0400 Subject: [PATCH 3/5] remove unnecessary impl --- .../google/api/gax/rpc/FixedTransportChannelProvider.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/FixedTransportChannelProvider.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/FixedTransportChannelProvider.java index 51936a13ad06..5a4a2e8379c9 100644 --- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/FixedTransportChannelProvider.java +++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/FixedTransportChannelProvider.java @@ -58,12 +58,6 @@ public boolean needsExecutor() { return false; } - @Nullable - @Override - public Executor getExecutor() { - return null; - } - @Override public FixedTransportChannelProvider withExecutor(ScheduledExecutorService executor) { return withExecutor((Executor) executor); From d0c3d6cd1b9d14a1fa7b0ffb62a29fcf75fa313b Mon Sep 17 00:00:00 2001 From: Igor Bernstein Date: Fri, 26 Jun 2026 17:22:40 -0400 Subject: [PATCH 4/5] stray import --- .../com/google/api/gax/rpc/FixedTransportChannelProvider.java | 1 - 1 file changed, 1 deletion(-) diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/FixedTransportChannelProvider.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/FixedTransportChannelProvider.java index 5a4a2e8379c9..daa101910595 100644 --- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/FixedTransportChannelProvider.java +++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/FixedTransportChannelProvider.java @@ -36,7 +36,6 @@ import java.util.Map; import java.util.concurrent.Executor; import java.util.concurrent.ScheduledExecutorService; -import javax.annotation.Nullable; /** An instance of TransportChannelProvider that always provides the same TransportChannel. */ @InternalExtensionOnly From 233c35a2ce2e84d24d7c1dd723be6ea35c610767 Mon Sep 17 00:00:00 2001 From: Igor Bernstein Date: Fri, 26 Jun 2026 17:29:14 -0400 Subject: [PATCH 5/5] doc --- .../java/com/google/api/gax/rpc/TransportChannelProvider.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/TransportChannelProvider.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/TransportChannelProvider.java index e50e044fab45..ebdcbc9f415c 100644 --- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/TransportChannelProvider.java +++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/TransportChannelProvider.java @@ -73,8 +73,7 @@ public interface TransportChannelProvider { /** * @return the user provided executor. This can be null if the user didn't override the executor - * and the TransportProvider is using its internal executor. - * @throws UnsupportedOperationException if the TransportProvider doesn't support this method. + * and/or the TransportProvider is using its internal executor. */ @Nullable default Executor getExecutor() {