1616package com .google .cloud .bigtable .data .v2 .stub ;
1717
1818import static com .google .cloud .bigtable .data .v2 .stub .metrics .BuiltinMetricsConstants .APP_PROFILE_KEY ;
19+ import static com .google .cloud .bigtable .data .v2 .stub .metrics .BuiltinMetricsConstants .CLIENT_NAME_KEY ;
1920import static com .google .cloud .bigtable .data .v2 .stub .metrics .BuiltinMetricsConstants .INSTANCE_ID_KEY ;
2021import static com .google .cloud .bigtable .data .v2 .stub .metrics .BuiltinMetricsConstants .PROJECT_ID_KEY ;
2122
99100import com .google .cloud .bigtable .data .v2 .stub .metrics .BigtableTracerStreamingCallable ;
100101import com .google .cloud .bigtable .data .v2 .stub .metrics .BigtableTracerUnaryCallable ;
101102import com .google .cloud .bigtable .data .v2 .stub .metrics .BuiltinMetricsTracerFactory ;
102- import com .google .cloud .bigtable .data .v2 .stub .metrics .BuiltinMetricsView ;
103103import com .google .cloud .bigtable .data .v2 .stub .metrics .CompositeTracerFactory ;
104104import com .google .cloud .bigtable .data .v2 .stub .metrics .CustomOpenTelemetryMetricsProvider ;
105105import com .google .cloud .bigtable .data .v2 .stub .metrics .DefaultMetricsProvider ;
106- import com .google .cloud .bigtable .data .v2 .stub .metrics .MetricsProvider ;
107106import com .google .cloud .bigtable .data .v2 .stub .metrics .ErrorCountPerConnectionMetricTracker ;
107+ import com .google .cloud .bigtable .data .v2 .stub .metrics .MetricsProvider ;
108108import com .google .cloud .bigtable .data .v2 .stub .metrics .MetricsTracerFactory ;
109109import com .google .cloud .bigtable .data .v2 .stub .metrics .NoopMetricsProvider ;
110110import com .google .cloud .bigtable .data .v2 .stub .metrics .RpcMeasureConstants ;
138138import io .opencensus .tags .Tags ;
139139import io .opentelemetry .api .OpenTelemetry ;
140140import io .opentelemetry .api .common .Attributes ;
141- import io .opentelemetry .sdk .OpenTelemetrySdk ;
142- import io .opentelemetry .sdk .metrics .SdkMeterProvider ;
143- import io .opentelemetry .sdk .metrics .SdkMeterProviderBuilder ;
144141import java .io .IOException ;
145142import java .net .URI ;
146143import java .net .URISyntaxException ;
@@ -194,10 +191,13 @@ public class EnhancedBigtableStub implements AutoCloseable {
194191 public static EnhancedBigtableStub create (EnhancedBigtableStubSettings settings )
195192 throws IOException {
196193 ClientContext clientContext = createClientContext (settings );
194+ OpenTelemetry openTelemetry =
195+ getOpenTelemetry (
196+ settings .getProjectId (), settings .getMetricsProvider (), clientContext .getCredentials ());
197197 ClientContext contextWithTracer =
198198 clientContext
199199 .toBuilder ()
200- .setTracerFactory (createBigtableTracerFactory (settings , clientContext ))
200+ .setTracerFactory (createBigtableTracerFactory (settings , openTelemetry ))
201201 .build ();
202202
203203 return new EnhancedBigtableStub (settings , contextWithTracer );
@@ -219,15 +219,26 @@ public static ClientContext createClientContext(EnhancedBigtableStubSettings set
219219 // workaround JWT audience issues
220220 patchCredentials (builder );
221221
222+ // Fix the credentials so that they can be shared
223+ Credentials credentials = null ;
224+ if (builder .getCredentialsProvider () != null ) {
225+ credentials = builder .getCredentialsProvider ().getCredentials ();
226+ }
227+ builder .setCredentialsProvider (FixedCredentialsProvider .create (credentials ));
228+
222229 InstantiatingGrpcChannelProvider .Builder transportProvider =
223230 builder .getTransportChannelProvider () instanceof InstantiatingGrpcChannelProvider
224231 ? ((InstantiatingGrpcChannelProvider ) builder .getTransportChannelProvider ()).toBuilder ()
225232 : null ;
226233
234+ OpenTelemetry openTelemetry =
235+ getOpenTelemetry (settings .getProjectId (), settings .getMetricsProvider (), credentials );
227236 ErrorCountPerConnectionMetricTracker errorCountPerConnectionMetricTracker ;
228- if (transportProvider != null ) {
237+ // Skip setting up ErrorCountPerConnectionMetricTracker if openTelemetry is null
238+ if (openTelemetry != null && transportProvider != null ) {
229239 errorCountPerConnectionMetricTracker =
230- new ErrorCountPerConnectionMetricTracker (createBuiltinAttributes (builder ));
240+ new ErrorCountPerConnectionMetricTracker (
241+ openTelemetry , createBuiltinAttributes (settings ));
231242 ApiFunction <ManagedChannelBuilder , ManagedChannelBuilder > oldChannelConfigurator =
232243 transportProvider .getChannelConfigurator ();
233244 transportProvider .setChannelConfigurator (
@@ -249,12 +260,6 @@ public static ClientContext createClientContext(EnhancedBigtableStubSettings set
249260
250261 // Inject channel priming
251262 if (settings .isRefreshingChannel ()) {
252- // Fix the credentials so that they can be shared
253- Credentials credentials = null ;
254- if (builder .getCredentialsProvider () != null ) {
255- credentials = builder .getCredentialsProvider ().getCredentials ();
256- }
257- builder .setCredentialsProvider (FixedCredentialsProvider .create (credentials ));
258263
259264 if (transportProvider != null ) {
260265 transportProvider .setChannelPrimer (
@@ -279,17 +284,17 @@ public static ClientContext createClientContext(EnhancedBigtableStubSettings set
279284 }
280285
281286 public static ApiTracerFactory createBigtableTracerFactory (
282- EnhancedBigtableStubSettings settings , ClientContext clientContext ) throws IOException {
287+ EnhancedBigtableStubSettings settings , OpenTelemetry openTelemetry ) throws IOException {
283288 return createBigtableTracerFactory (
284- settings , Tags .getTagger (), Stats .getStatsRecorder (), clientContext );
289+ settings , Tags .getTagger (), Stats .getStatsRecorder (), openTelemetry );
285290 }
286291
287292 @ VisibleForTesting
288293 public static ApiTracerFactory createBigtableTracerFactory (
289294 EnhancedBigtableStubSettings settings ,
290295 Tagger tagger ,
291296 StatsRecorder stats ,
292- ClientContext clientContext )
297+ OpenTelemetry openTelemetry )
293298 throws IOException {
294299 String projectId = settings .getProjectId ();
295300 String instanceId = settings .getInstanceId ();
@@ -302,8 +307,6 @@ public static ApiTracerFactory createBigtableTracerFactory(
302307 .put (RpcMeasureConstants .BIGTABLE_APP_PROFILE_ID , TagValue .create (appProfileId ))
303308 .build ();
304309
305- ImmutableMap <String , String > builtinAttributes = createBuiltinAttributes (settings .toBuilder ());
306-
307310 ImmutableList .Builder <ApiTracerFactory > tracerFactories = ImmutableList .builder ();
308311 tracerFactories
309312 .add (
@@ -323,53 +326,47 @@ public static ApiTracerFactory createBigtableTracerFactory(
323326 .add (MetricsTracerFactory .create (tagger , stats , attributes ))
324327 // Add user configured tracer
325328 .add (settings .getTracerFactory ());
326- Attributes otelAttributes =
327- Attributes .of (
328- PROJECT_ID_KEY , projectId , INSTANCE_ID_KEY , instanceId , APP_PROFILE_KEY , appProfileId );
329329 BuiltinMetricsTracerFactory builtinMetricsTracerFactory =
330- createBuiltinMetricsTracerFactory (
331- projectId , settings .getMetricsProvider (), otelAttributes , clientContext );
330+ openTelemetry != null
331+ ? BuiltinMetricsTracerFactory .create (openTelemetry , createBuiltinAttributes (settings ))
332+ : null ;
332333 if (builtinMetricsTracerFactory != null ) {
333334 tracerFactories .add (builtinMetricsTracerFactory );
334335 }
335336 return new CompositeTracerFactory (tracerFactories .build ());
336337 }
337338
338- private static BuiltinMetricsTracerFactory createBuiltinMetricsTracerFactory (
339- String projectId ,
340- MetricsProvider metricsProvider ,
341- Attributes attributes ,
342- ClientContext clientContext )
339+ @ Nullable
340+ public static OpenTelemetry getOpenTelemetry (
341+ String projectId , MetricsProvider metricsProvider , @ Nullable Credentials defaultCredentials )
343342 throws IOException {
344343 if (metricsProvider instanceof CustomOpenTelemetryMetricsProvider ) {
345344 CustomOpenTelemetryMetricsProvider customMetricsProvider =
346345 (CustomOpenTelemetryMetricsProvider ) metricsProvider ;
347- return BuiltinMetricsTracerFactory .create (
348- customMetricsProvider .getOpenTelemetry (), attributes );
346+ return customMetricsProvider .getOpenTelemetry ();
349347 } else if (metricsProvider instanceof DefaultMetricsProvider ) {
350- SdkMeterProviderBuilder meterProvider = SdkMeterProvider .builder ();
351348 Credentials credentials =
352349 BigtableDataSettings .getMetricsCredentials () != null
353350 ? BigtableDataSettings .getMetricsCredentials ()
354- : clientContext .getCredentials ();
355- BuiltinMetricsView .registerBuiltinMetrics (projectId , credentials , meterProvider );
356- OpenTelemetry openTelemetry =
357- OpenTelemetrySdk .builder ().setMeterProvider (meterProvider .build ()).build ();
358- return BuiltinMetricsTracerFactory .create (openTelemetry , attributes );
351+ : defaultCredentials ;
352+ DefaultMetricsProvider defaultMetricsProvider = (DefaultMetricsProvider ) metricsProvider ;
353+ return defaultMetricsProvider .getOpenTelemetry (projectId , credentials );
359354 } else if (metricsProvider instanceof NoopMetricsProvider ) {
360355 return null ;
361356 }
362357 throw new IOException ("Invalid MetricsProvider type " + metricsProvider );
363358 }
364359
365- private static ImmutableMap <String , String > createBuiltinAttributes (
366- EnhancedBigtableStubSettings .Builder builder ) {
367- return ImmutableMap .<String , String >builder ()
368- .put ("project_id" , builder .getProjectId ())
369- .put ("instance" , builder .getInstanceId ())
370- .put ("app_profile" , builder .getAppProfileId ())
371- .put ("client_name" , "bigtable-java/" + Version .VERSION )
372- .build ();
360+ private static Attributes createBuiltinAttributes (EnhancedBigtableStubSettings settings ) {
361+ return Attributes .of (
362+ PROJECT_ID_KEY ,
363+ settings .getProjectId (),
364+ INSTANCE_ID_KEY ,
365+ settings .getInstanceId (),
366+ APP_PROFILE_KEY ,
367+ settings .getAppProfileId (),
368+ CLIENT_NAME_KEY ,
369+ "bigtable-java/" + Version .VERSION );
373370 }
374371
375372 private static void patchCredentials (EnhancedBigtableStubSettings .Builder settings )
0 commit comments