Skip to content

Commit 2ff428b

Browse files
committed
review comments
1 parent 06ff8eb commit 2ff428b

File tree

4 files changed

+44
-66
lines changed

4 files changed

+44
-66
lines changed

api/all/src/main/java/io/opentelemetry/api/GlobalOpenTelemetry.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import io.opentelemetry.context.propagation.ContextPropagators;
1818
import java.lang.reflect.InvocationTargetException;
1919
import java.lang.reflect.Method;
20+
import java.util.function.Supplier;
2021
import java.util.logging.Level;
2122
import java.util.logging.Logger;
2223
import javax.annotation.Nullable;
@@ -116,6 +117,14 @@ public static void set(OpenTelemetry openTelemetry) {
116117
}
117118
}
118119

120+
public static <T extends OpenTelemetry> T set(Supplier<T> supplier) {
121+
synchronized (mutex) {
122+
T openTelemetry = supplier.get();
123+
set(openTelemetry);
124+
return openTelemetry;
125+
}
126+
}
127+
119128
/** Returns the globally registered {@link TracerProvider}. */
120129
public static TracerProvider getTracerProvider() {
121130
return get().getTracerProvider();

sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/AutoConfiguredOpenTelemetrySdk.java

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@
99
import io.opentelemetry.api.GlobalOpenTelemetry;
1010
import io.opentelemetry.api.OpenTelemetry;
1111
import io.opentelemetry.api.incubator.config.ConfigProvider;
12+
import io.opentelemetry.api.logs.LoggerProvider;
13+
import io.opentelemetry.api.metrics.MeterProvider;
14+
import io.opentelemetry.api.trace.TracerProvider;
15+
import io.opentelemetry.context.propagation.ContextPropagators;
1216
import io.opentelemetry.sdk.OpenTelemetrySdk;
1317
import io.opentelemetry.sdk.autoconfigure.internal.AutoConfigureUtil;
1418
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
@@ -25,7 +29,7 @@
2529
*/
2630
@Immutable
2731
@AutoValue
28-
public abstract class AutoConfiguredOpenTelemetrySdk {
32+
public abstract class AutoConfiguredOpenTelemetrySdk implements OpenTelemetry {
2933

3034
/**
3135
* Returns an {@link AutoConfiguredOpenTelemetrySdk} automatically initialized through recognized
@@ -90,4 +94,24 @@ static AutoConfiguredOpenTelemetrySdk create(
9094
abstract Object getConfigProvider();
9195

9296
AutoConfiguredOpenTelemetrySdk() {}
97+
98+
@Override
99+
public TracerProvider getTracerProvider() {
100+
return getOpenTelemetrySdk().getTracerProvider();
101+
}
102+
103+
@Override
104+
public MeterProvider getMeterProvider() {
105+
return getOpenTelemetrySdk().getMeterProvider();
106+
}
107+
108+
@Override
109+
public LoggerProvider getLogsBridge() {
110+
return getOpenTelemetrySdk().getLogsBridge();
111+
}
112+
113+
@Override
114+
public ContextPropagators getPropagators() {
115+
return getOpenTelemetrySdk().getPropagators();
116+
}
93117
}

sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/AutoConfiguredOpenTelemetrySdkBuilder.java

Lines changed: 10 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
import io.opentelemetry.sdk.trace.samplers.Sampler;
3737
import java.io.Closeable;
3838
import java.io.IOException;
39-
import java.lang.reflect.Field;
4039
import java.util.ArrayList;
4140
import java.util.Collections;
4241
import 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()) {

sdk-extensions/autoconfigure/src/test/java/io/opentelemetry/sdk/autoconfigure/AutoConfiguredOpenTelemetrySdkBuilderTest.java

Lines changed: 0 additions & 18 deletions
This file was deleted.

0 commit comments

Comments
 (0)