Skip to content

Commit c37dada

Browse files
authored
Add support for new system property otel.sdk.disabled (#4810)
* Add support for new system property otel.sdk.disabled * address review comments
1 parent 093b210 commit c37dada

File tree

4 files changed

+112
-34
lines changed

4 files changed

+112
-34
lines changed

CHANGELOG.md

+5
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22

33
## Unreleased
44

5+
* Autoconfigure now supports an option to disable the SDK.
6+
If `otel.sdk.disabled=true`, `AutoConfiguredOpenTelemetrySdk#getOpenTelemetrySdk()`
7+
returns a minimal (but not noop) `OpenTelemetrySdk` with noop tracing, metric and logging providers. The same minimal instance is set
8+
to `GlobalOpenTelemetry`. The now deprecated property `otel.experimental.sdk.enabled` will continue to work in the same way during a transition period.
9+
510
## Version 1.18.0 (2022-09-09)
611

712
### SDK

sdk-extensions/autoconfigure/README.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,9 @@ for more details.
3939

4040
The OpenTelemetry SDK can be disabled entirely. If disabled, `AutoConfiguredOpenTelemetrySdk#getOpenTelemetrySdk()` will return a minimally configured instance (i.e. `OpenTelemetrySdk.builder().build()`).
4141

42-
| System property | Environment variable | Purpose |
43-
|-------------------------------|-------------------------------|----------------------------------------------------------------|
44-
| otel.experimental.sdk.enabled | OTEL_EXPERIMENTAL_SDK_ENABLED | If `false`, disable the OpenTelemetry SDK. Defaults to `true`. |
42+
| System property | Environment variable | Purpose |
43+
|-------------------|----------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
44+
| otel.sdk.disabled | OTEL_SDK_DISABLED | If `true`, disable the OpenTelemetry SDK. Defaults to `false`. The now legacy property `otel.experimental.sdk.enabled` will continue to work with default `true` during a transition period. |
4545

4646
## Exporters
4747

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

+3-2
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
import java.util.HashMap;
3434
import java.util.List;
3535
import java.util.Map;
36-
import java.util.Optional;
3736
import java.util.ServiceLoader;
3837
import java.util.concurrent.TimeUnit;
3938
import java.util.function.BiFunction;
@@ -333,7 +332,9 @@ public AutoConfiguredOpenTelemetrySdk build() {
333332

334333
OpenTelemetrySdk openTelemetrySdk = OpenTelemetrySdk.builder().build();
335334
boolean sdkEnabled =
336-
Optional.ofNullable(config.getBoolean("otel.experimental.sdk.enabled")).orElse(true);
335+
!config.getBoolean(
336+
"otel.sdk.disabled", !config.getBoolean("otel.experimental.sdk.enabled", true));
337+
337338
if (sdkEnabled) {
338339
SdkMeterProviderBuilder meterProviderBuilder = SdkMeterProvider.builder();
339340
meterProviderBuilder.setResource(resource);

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

+101-29
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,52 @@ class AutoConfiguredOpenTelemetrySdkTest {
7777

7878
private AutoConfiguredOpenTelemetrySdkBuilder builder;
7979

80+
private static BiFunction<SdkTracerProviderBuilder, ConfigProperties, SdkTracerProviderBuilder>
81+
getTracerProviderBuilderSpy() {
82+
BiFunction<SdkTracerProviderBuilder, ConfigProperties, SdkTracerProviderBuilder>
83+
traceCustomizer =
84+
spy(
85+
new BiFunction<
86+
SdkTracerProviderBuilder, ConfigProperties, SdkTracerProviderBuilder>() {
87+
@Override
88+
public SdkTracerProviderBuilder apply(
89+
SdkTracerProviderBuilder builder, ConfigProperties config) {
90+
return builder;
91+
}
92+
});
93+
return traceCustomizer;
94+
}
95+
96+
private static BiFunction<SdkMeterProviderBuilder, ConfigProperties, SdkMeterProviderBuilder>
97+
getMeterProviderBuilderSpy() {
98+
BiFunction<SdkMeterProviderBuilder, ConfigProperties, SdkMeterProviderBuilder>
99+
metricCustomizer =
100+
spy(
101+
new BiFunction<
102+
SdkMeterProviderBuilder, ConfigProperties, SdkMeterProviderBuilder>() {
103+
@Override
104+
public SdkMeterProviderBuilder apply(
105+
SdkMeterProviderBuilder builder, ConfigProperties config) {
106+
return builder;
107+
}
108+
});
109+
return metricCustomizer;
110+
}
111+
112+
private static BiFunction<SdkLoggerProviderBuilder, ConfigProperties, SdkLoggerProviderBuilder>
113+
getLoggerProviderBuilderSpy() {
114+
BiFunction<SdkLoggerProviderBuilder, ConfigProperties, SdkLoggerProviderBuilder> logCustomizer =
115+
spy(
116+
new BiFunction<SdkLoggerProviderBuilder, ConfigProperties, SdkLoggerProviderBuilder>() {
117+
@Override
118+
public SdkLoggerProviderBuilder apply(
119+
SdkLoggerProviderBuilder builder, ConfigProperties config) {
120+
return builder;
121+
}
122+
});
123+
return logCustomizer;
124+
}
125+
80126
@BeforeEach
81127
void resetGlobal() {
82128
GlobalOpenTelemetry.resetForTest();
@@ -313,38 +359,13 @@ private static Supplier<Map<String, String>> disableExportPropertySupplier() {
313359
}
314360

315361
@Test
316-
void disableSdk() {
362+
void disableSdkLegacyProperty() {
317363
BiFunction<SdkTracerProviderBuilder, ConfigProperties, SdkTracerProviderBuilder>
318-
traceCustomizer =
319-
spy(
320-
new BiFunction<
321-
SdkTracerProviderBuilder, ConfigProperties, SdkTracerProviderBuilder>() {
322-
@Override
323-
public SdkTracerProviderBuilder apply(
324-
SdkTracerProviderBuilder builder, ConfigProperties config) {
325-
return builder;
326-
}
327-
});
364+
traceCustomizer = getTracerProviderBuilderSpy();
328365
BiFunction<SdkMeterProviderBuilder, ConfigProperties, SdkMeterProviderBuilder>
329-
metricCustomizer =
330-
spy(
331-
new BiFunction<
332-
SdkMeterProviderBuilder, ConfigProperties, SdkMeterProviderBuilder>() {
333-
@Override
334-
public SdkMeterProviderBuilder apply(
335-
SdkMeterProviderBuilder builder, ConfigProperties config) {
336-
return builder;
337-
}
338-
});
366+
metricCustomizer = getMeterProviderBuilderSpy();
339367
BiFunction<SdkLoggerProviderBuilder, ConfigProperties, SdkLoggerProviderBuilder> logCustomizer =
340-
spy(
341-
new BiFunction<SdkLoggerProviderBuilder, ConfigProperties, SdkLoggerProviderBuilder>() {
342-
@Override
343-
public SdkLoggerProviderBuilder apply(
344-
SdkLoggerProviderBuilder builder, ConfigProperties config) {
345-
return builder;
346-
}
347-
});
368+
getLoggerProviderBuilderSpy();
348369

349370
AutoConfiguredOpenTelemetrySdk autoConfiguredSdk =
350371
AutoConfiguredOpenTelemetrySdk.builder()
@@ -362,6 +383,57 @@ public SdkLoggerProviderBuilder apply(
362383
verify(logCustomizer, never()).apply(any(), any());
363384
}
364385

386+
@Test
387+
void disableSdk() {
388+
BiFunction<SdkTracerProviderBuilder, ConfigProperties, SdkTracerProviderBuilder>
389+
traceCustomizer = getTracerProviderBuilderSpy();
390+
BiFunction<SdkMeterProviderBuilder, ConfigProperties, SdkMeterProviderBuilder>
391+
metricCustomizer = getMeterProviderBuilderSpy();
392+
BiFunction<SdkLoggerProviderBuilder, ConfigProperties, SdkLoggerProviderBuilder> logCustomizer =
393+
getLoggerProviderBuilderSpy();
394+
395+
AutoConfiguredOpenTelemetrySdk autoConfiguredSdk =
396+
AutoConfiguredOpenTelemetrySdk.builder()
397+
.addPropertiesSupplier(() -> singletonMap("otel.sdk.disabled", "true"))
398+
.addTracerProviderCustomizer(traceCustomizer)
399+
.addMeterProviderCustomizer(metricCustomizer)
400+
.addLoggerProviderCustomizer(logCustomizer)
401+
.build();
402+
403+
assertThat(autoConfiguredSdk.getOpenTelemetrySdk()).isInstanceOf(OpenTelemetrySdk.class);
404+
405+
// When the SDK is disabled, configuration is skipped and none of the customizers are called
406+
verify(traceCustomizer, never()).apply(any(), any());
407+
verify(metricCustomizer, never()).apply(any(), any());
408+
verify(logCustomizer, never()).apply(any(), any());
409+
}
410+
411+
@Test
412+
void disableSdkNewPropertyWins() {
413+
BiFunction<SdkTracerProviderBuilder, ConfigProperties, SdkTracerProviderBuilder>
414+
traceCustomizer = getTracerProviderBuilderSpy();
415+
BiFunction<SdkMeterProviderBuilder, ConfigProperties, SdkMeterProviderBuilder>
416+
metricCustomizer = getMeterProviderBuilderSpy();
417+
BiFunction<SdkLoggerProviderBuilder, ConfigProperties, SdkLoggerProviderBuilder> logCustomizer =
418+
getLoggerProviderBuilderSpy();
419+
420+
AutoConfiguredOpenTelemetrySdk autoConfiguredSdk =
421+
AutoConfiguredOpenTelemetrySdk.builder()
422+
.addPropertiesSupplier(() -> singletonMap("otel.sdk.disabled", "true"))
423+
.addPropertiesSupplier(() -> singletonMap("otel.experimental.sdk.enabled", "true"))
424+
.addTracerProviderCustomizer(traceCustomizer)
425+
.addMeterProviderCustomizer(metricCustomizer)
426+
.addLoggerProviderCustomizer(logCustomizer)
427+
.build();
428+
429+
assertThat(autoConfiguredSdk.getOpenTelemetrySdk()).isInstanceOf(OpenTelemetrySdk.class);
430+
431+
// When the SDK is disabled, configuration is skipped and none of the customizers are called
432+
verify(traceCustomizer, never()).apply(any(), any());
433+
verify(metricCustomizer, never()).apply(any(), any());
434+
verify(logCustomizer, never()).apply(any(), any());
435+
}
436+
365437
@Test
366438
void tracerProviderCustomizer() {
367439
InMemorySpanExporter spanExporter = InMemorySpanExporter.create();

0 commit comments

Comments
 (0)