2323import com .google .api .gax .rpc .TransportChannelProvider ;
2424import com .google .auth .Credentials ;
2525import com .google .cloud .bigtable .data .v2 .internal .csm .tracers .ChannelPoolMetricsTracer ;
26- import com .google .cloud .bigtable .data .v2 .internal .csm .tracers .DirectPathCompatibleTracer ;
27- import com .google .cloud .bigtable .data .v2 .internal .dp .ClassicDirectAccessChecker ;
2826import com .google .cloud .bigtable .data .v2 .internal .dp .DirectAccessChecker ;
29- import com .google .cloud .bigtable .data .v2 .internal .dp .DirectAccessInvestigator ;
3027import com .google .cloud .bigtable .data .v2 .stub .EnhancedBigtableStubSettings ;
3128import com .google .common .base .Preconditions ;
3229import io .grpc .ManagedChannel ;
3330import java .io .IOException ;
3431import java .util .Map ;
35- import java .util .Optional ;
3632import java .util .concurrent .Executor ;
3733import java .util .concurrent .ScheduledExecutorService ;
3834import java .util .function .Supplier ;
@@ -52,20 +48,19 @@ public final class BigtableTransportChannelProvider implements TransportChannelP
5248 private final ChannelPrimer channelPrimer ;
5349 @ Nullable private final ChannelPoolMetricsTracer channelPoolMetricsTracer ;
5450 @ Nullable private final ScheduledExecutorService backgroundExecutor ;
55- private final Optional < DirectPathCompatibleTracer > directPathCompatibleTracer ;
51+ private final DirectAccessChecker directAccessChecker ;
5652
5753 private BigtableTransportChannelProvider (
5854 InstantiatingGrpcChannelProvider instantiatingGrpcChannelProvider ,
5955 ChannelPrimer channelPrimer ,
6056 @ Nullable ChannelPoolMetricsTracer channelPoolMetricsTracer ,
6157 @ Nullable ScheduledExecutorService backgroundExecutor ,
62- Optional < DirectPathCompatibleTracer > directPathCompatibleTracer ) {
58+ DirectAccessChecker directAccessChecker ) {
6359 delegate = Preconditions .checkNotNull (instantiatingGrpcChannelProvider );
6460 this .channelPrimer = channelPrimer ;
6561 this .channelPoolMetricsTracer = channelPoolMetricsTracer ;
6662 this .backgroundExecutor = backgroundExecutor ;
67- this .directPathCompatibleTracer =
68- directPathCompatibleTracer != null ? directPathCompatibleTracer : Optional .empty ();
63+ this .directAccessChecker = directAccessChecker ;
6964 }
7065
7166 @ Override
@@ -96,7 +91,7 @@ public BigtableTransportChannelProvider withExecutor(Executor executor) {
9691 channelPrimer ,
9792 channelPoolMetricsTracer ,
9893 backgroundExecutor ,
99- directPathCompatibleTracer );
94+ directAccessChecker );
10095 }
10196
10297 @ Override
@@ -109,11 +104,7 @@ public TransportChannelProvider withBackgroundExecutor(ScheduledExecutorService
109104 InstantiatingGrpcChannelProvider newChannelProvider =
110105 (InstantiatingGrpcChannelProvider ) delegate .withBackgroundExecutor (executor );
111106 return new BigtableTransportChannelProvider (
112- newChannelProvider ,
113- channelPrimer ,
114- channelPoolMetricsTracer ,
115- executor ,
116- directPathCompatibleTracer );
107+ newChannelProvider , channelPrimer , channelPoolMetricsTracer , executor , directAccessChecker );
117108 }
118109
119110 @ Override
@@ -130,7 +121,7 @@ public BigtableTransportChannelProvider withHeaders(Map<String, String> headers)
130121 channelPrimer ,
131122 channelPoolMetricsTracer ,
132123 backgroundExecutor ,
133- directPathCompatibleTracer );
124+ directAccessChecker );
134125 }
135126
136127 @ Override
@@ -147,7 +138,7 @@ public TransportChannelProvider withEndpoint(String endpoint) {
147138 channelPrimer ,
148139 channelPoolMetricsTracer ,
149140 backgroundExecutor ,
150- directPathCompatibleTracer );
141+ directAccessChecker );
151142 }
152143
153144 @ Deprecated
@@ -166,7 +157,7 @@ public TransportChannelProvider withPoolSize(int size) {
166157 channelPrimer ,
167158 channelPoolMetricsTracer ,
168159 backgroundExecutor ,
169- directPathCompatibleTracer );
160+ directAccessChecker );
170161 }
171162
172163 /** Expected to only be called once when BigtableClientContext is created */
@@ -179,29 +170,14 @@ public TransportChannel getTransportChannel() throws IOException {
179170
180171 boolean isDirectAccessEligible = false ;
181172
182- if (!directPathCompatibleTracer .isPresent ()) {
183- LOG .fine ("Direct access check skipped. Reason: user_disabled or tracer absent" );
184- } else {
185- DirectPathCompatibleTracer tracer = directPathCompatibleTracer .get ();
186- DirectAccessChecker directAccessChecker =
187- new ClassicDirectAccessChecker (tracer , channelPrimer );
188- try {
189- GrpcTransportChannel grpcTransportChannel =
190- (GrpcTransportChannel ) directAccessProvider .getTransportChannel ();
191- ManagedChannel directAccessChannel = (ManagedChannel ) grpcTransportChannel .getChannel ();
192-
193- isDirectAccessEligible = directAccessChecker .check (directAccessChannel );
194- if (!isDirectAccessEligible && backgroundExecutor != null ) {
195- backgroundExecutor .execute (
196- () -> DirectAccessInvestigator .investigateAndReport (tracer , null ));
197- }
198- } catch (Exception e ) {
199- LOG .log (Level .FINE , "Client is not direct access eligible, using standard transport." , e );
200- if (backgroundExecutor != null ) {
201- backgroundExecutor .execute (
202- () -> DirectAccessInvestigator .investigateAndReport (tracer , e ));
203- }
204- }
173+ try {
174+ GrpcTransportChannel grpcTransportChannel =
175+ (GrpcTransportChannel ) directAccessProvider .getTransportChannel ();
176+ ManagedChannel directAccessChannel = (ManagedChannel ) grpcTransportChannel .getChannel ();
177+ isDirectAccessEligible = directAccessChecker .check (directAccessChannel );
178+ } catch (Exception e ) {
179+ LOG .log (Level .WARNING , "Failed to check for direct access." , e );
180+ directAccessChecker .investigateFailure (e );
205181 }
206182
207183 InstantiatingGrpcChannelProvider selectedProvider ;
@@ -268,7 +244,7 @@ public TransportChannelProvider withCredentials(Credentials credentials) {
268244 channelPrimer ,
269245 channelPoolMetricsTracer ,
270246 backgroundExecutor ,
271- directPathCompatibleTracer );
247+ directAccessChecker );
272248 }
273249
274250 /** Creates a BigtableTransportChannelProvider. */
@@ -277,12 +253,12 @@ public static BigtableTransportChannelProvider create(
277253 ChannelPrimer channelPrimer ,
278254 ChannelPoolMetricsTracer outstandingRpcsMetricTracker ,
279255 ScheduledExecutorService backgroundExecutor ,
280- Optional < DirectPathCompatibleTracer > directPathCompatibleTracer ) {
256+ DirectAccessChecker directAccessChecker ) {
281257 return new BigtableTransportChannelProvider (
282258 instantiatingGrpcChannelProvider ,
283259 channelPrimer ,
284260 outstandingRpcsMetricTracker ,
285261 backgroundExecutor ,
286- directPathCompatibleTracer );
262+ directAccessChecker );
287263 }
288264}
0 commit comments