`GlobalOpenTelemetry.get()` should never returns obfuscated Noop OpenTelemetry

Fix inconsistent behavior that first call will return Noop but later calls return obfuscated Noop.

Signed-off-by: Yanming Zhou <zhouyanming@gmail.com>
This commit is contained in:
Yanming Zhou 2025-06-27 17:12:09 +08:00
parent edd51d45a1
commit b52c8c959f
4 changed files with 12 additions and 4 deletions

View File

@ -72,7 +72,7 @@ public final class GlobalOpenTelemetry {
* interface FQCN but the specified provider cannot be found.
*/
public static OpenTelemetry get() {
OpenTelemetry openTelemetry = globalOpenTelemetry;
ObfuscatedOpenTelemetry openTelemetry = globalOpenTelemetry;
if (openTelemetry == null) {
synchronized (mutex) {
openTelemetry = globalOpenTelemetry;
@ -88,7 +88,7 @@ public final class GlobalOpenTelemetry {
}
}
}
return openTelemetry;
return openTelemetry.delegate == OpenTelemetry.noop() ? OpenTelemetry.noop() : openTelemetry;
}
/**

View File

@ -115,4 +115,11 @@ public abstract class AbstractOpenTelemetryTest {
+ "propagators=DefaultContextPropagators{textMapPropagator=NoopTextMapPropagator}"
+ "}");
}
@Test
void neverReturnsObfuscatedNoop() {
assertThat(GlobalOpenTelemetry.get()).isSameAs(OpenTelemetry.noop());
// ensure sequential calls of GlobalOpenTelemetry.get() return same object
assertThat(GlobalOpenTelemetry.get()).isSameAs(OpenTelemetry.noop());
}
}

View File

@ -372,7 +372,7 @@ class AutoConfiguredOpenTelemetrySdkTest {
@Test
void builder_setResultAsGlobalFalse() {
GlobalOpenTelemetry.set(OpenTelemetry.noop());
GlobalOpenTelemetry.set(mock(OpenTelemetry.class));
OpenTelemetrySdk openTelemetry = builder.build().getOpenTelemetrySdk();

View File

@ -11,6 +11,7 @@ import static org.assertj.core.api.Assertions.assertThatCode;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
@ -161,7 +162,7 @@ class DeclarativeConfigurationTest {
@Test
void configFile_setResultAsGlobalFalse() {
GlobalOpenTelemetry.set(OpenTelemetry.noop());
GlobalOpenTelemetry.set(mock(OpenTelemetry.class));
ConfigProperties config =
DefaultConfigProperties.createFromMap(
Collections.singletonMap("otel.experimental.config.file", configFilePath.toString()));