diff --git a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/compat/GaxBasicChannelProvider.java b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/compat/GaxBasicChannelProvider.java index 26d7857aafa8..90f843cb39b2 100644 --- a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/compat/GaxBasicChannelProvider.java +++ b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/compat/GaxBasicChannelProvider.java @@ -15,6 +15,7 @@ */ package com.google.cloud.bigtable.data.v2.internal.compat; +import com.google.api.core.ApiFunction; import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider; import com.google.auth.Credentials; import com.google.bigtable.v2.FeatureFlags; @@ -32,11 +33,15 @@ import javax.annotation.Nullable; public class GaxBasicChannelProvider implements ChannelProvider { + private final ApiFunction channelConfigurator; private final InstantiatingGrpcChannelProvider inner; private final @Nullable CallCredentials credentials; + @SuppressWarnings("rawtypes") public GaxBasicChannelProvider( InstantiatingGrpcChannelProvider inner, @Nullable Credentials credentials) { + this.channelConfigurator = + Optional.ofNullable(inner.toBuilder().getChannelConfigurator()).orElse(b -> b); this.inner = inner.toBuilder().setAttemptDirectPath(false).build(); this.credentials = Optional.ofNullable(credentials).map(MoreCallCredentials::from).orElse(null); } @@ -56,6 +61,7 @@ public ManagedChannelBuilder newChannelBuilder() { if (credentials != null) { builder.intercept(new CredInterceptor(credentials)); } + builder = channelConfigurator.apply(builder); return builder; } catch (IOException e) { throw new RuntimeException("Gax channel provider failed to provide a channel builder", e); diff --git a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/compat/GaxDirectAccessChannelProvider.java b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/compat/GaxDirectAccessChannelProvider.java index bfc4dfd7bfd2..b562c6922330 100644 --- a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/compat/GaxDirectAccessChannelProvider.java +++ b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/compat/GaxDirectAccessChannelProvider.java @@ -15,6 +15,7 @@ */ package com.google.cloud.bigtable.data.v2.internal.compat; +import com.google.api.core.ApiFunction; import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider; import com.google.auth.Credentials; import com.google.bigtable.v2.FeatureFlags; @@ -26,6 +27,10 @@ public class GaxDirectAccessChannelProvider implements ChannelProvider { private final InstantiatingGrpcChannelProvider inner; + + @SuppressWarnings("rawtypes") + private final ApiFunction channelConfigurator; + private final Optional fallback; public static ChannelProvider create( @@ -67,6 +72,9 @@ private GaxDirectAccessChannelProvider( @SuppressWarnings("unused") @Nullable Credentials credentials, Optional fallback) { this.inner = directAccessProvider; + this.channelConfigurator = + Optional.ofNullable(directAccessProvider.toBuilder().getChannelConfigurator()) + .orElse(b -> b); this.fallback = fallback; } @@ -81,7 +89,7 @@ public FeatureFlags updateFeatureFlags(FeatureFlags featureFlags) { @Override public ManagedChannelBuilder newChannelBuilder() { try { - return inner.createChannelBuilder(); + return channelConfigurator.apply(inner.createChannelBuilder()); } catch (IOException e) { throw new RuntimeException("Gax channel provider failed to provide a channel builder", e); }