3636import io .opentelemetry .sdk .trace .samplers .Sampler ;
3737import java .io .Closeable ;
3838import java .io .IOException ;
39- import java .lang .reflect .Field ;
4039import java .util .ArrayList ;
4140import java .util .Collections ;
4241import java .util .HashMap ;
@@ -425,7 +424,12 @@ AutoConfiguredOpenTelemetrySdkBuilder setComponentLoader(ComponentLoader compone
425424 * the settings of this {@link AutoConfiguredOpenTelemetrySdkBuilder}.
426425 */
427426 public AutoConfiguredOpenTelemetrySdk build () {
428- return maybeRunWithGlobalOpenTelemetryLock (this ::buildImpl );
427+ if (!setResultAsGlobal ) {
428+ return buildImpl ();
429+ }
430+ AutoConfiguredOpenTelemetrySdk sdk = GlobalOpenTelemetry .set (this ::buildImpl );
431+ logger .log (Level .FINE , "Global OpenTelemetry set to {0} by autoconfiguration" , sdk );
432+ return sdk ;
429433 }
430434
431435 private AutoConfiguredOpenTelemetrySdk buildImpl () {
@@ -445,8 +449,10 @@ private AutoConfiguredOpenTelemetrySdk buildImpl() {
445449 maybeConfigureFromFile (config , componentLoader );
446450 if (fromFileConfiguration != null ) {
447451 maybeRegisterShutdownHook (fromFileConfiguration .getOpenTelemetrySdk ());
448- maybeSetAsGlobal (
449- fromFileConfiguration .getOpenTelemetrySdk (), fromFileConfiguration .getConfigProvider ());
452+ Object configProvider = fromFileConfiguration .getConfigProvider ();
453+ if (setResultAsGlobal && INCUBATOR_AVAILABLE && configProvider != null ) {
454+ IncubatingUtil .setGlobalConfigProvider (configProvider );
455+ }
450456 return fromFileConfiguration ;
451457 }
452458
@@ -472,7 +478,6 @@ private AutoConfiguredOpenTelemetrySdk buildImpl() {
472478
473479 OpenTelemetrySdk openTelemetrySdk = sdkBuilder .build ();
474480 maybeRegisterShutdownHook (openTelemetrySdk );
475- maybeSetAsGlobal (openTelemetrySdk , null );
476481 callAutoConfigureListeners (spiHelper , openTelemetrySdk );
477482
478483 return AutoConfiguredOpenTelemetrySdk .create (openTelemetrySdk , resource , config , null );
@@ -577,48 +582,6 @@ private void maybeRegisterShutdownHook(OpenTelemetrySdk openTelemetrySdk) {
577582 Runtime .getRuntime ().addShutdownHook (shutdownHook (openTelemetrySdk ));
578583 }
579584
580- private <T > T maybeRunWithGlobalOpenTelemetryLock (Supplier <T > supplier ) {
581- Object mutex ;
582- if (!setResultAsGlobal || (mutex = getGlobalOpenTelemetryLock ()) == null ) {
583- return supplier .get ();
584- }
585- synchronized (mutex ) {
586- return supplier .get ();
587- }
588- }
589-
590- // Visible for testing
591- @ Nullable
592- static Object getGlobalOpenTelemetryLock () {
593- Object mutex = null ;
594- try {
595- Field mutexField = GlobalOpenTelemetry .class .getDeclaredField ("mutex" );
596- mutexField .setAccessible (true );
597- mutex = mutexField .get (null );
598- if (mutex == null ) {
599- logger .log (
600- Level .SEVERE ,
601- "Found a null Global OpenTelemetry mutex, this is a bug in the opentelemetry-java SDK and should be reported" );
602- }
603- } catch (Exception exception ) {
604- logger .log (Level .WARNING , "Could not acquire Global OpenTelemetry mutex" , exception );
605- }
606- return mutex ;
607- }
608-
609- private void maybeSetAsGlobal (
610- OpenTelemetrySdk openTelemetrySdk , @ Nullable Object configProvider ) {
611- if (!setResultAsGlobal ) {
612- return ;
613- }
614- GlobalOpenTelemetry .set (openTelemetrySdk );
615- if (INCUBATOR_AVAILABLE && configProvider != null ) {
616- IncubatingUtil .setGlobalConfigProvider (configProvider );
617- }
618- logger .log (
619- Level .FINE , "Global OpenTelemetry set to {0} by autoconfiguration" , openTelemetrySdk );
620- }
621-
622585 // Visible for testing
623586 void callAutoConfigureListeners (SpiHelper spiHelper , OpenTelemetrySdk openTelemetrySdk ) {
624587 for (AutoConfigureListener listener : spiHelper .getListeners ()) {
0 commit comments