Skip to content

Commit 3bc9876

Browse files
committed
refactor: configureSdk + fix fuzz tests
1 parent 88ce1b2 commit 3bc9876

File tree

2 files changed

+73
-53
lines changed

2 files changed

+73
-53
lines changed

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

Lines changed: 56 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -451,54 +451,8 @@ public AutoConfiguredOpenTelemetrySdk build() {
451451
sdkBuilder.setPropagators(propagators);
452452

453453
boolean sdkEnabled = !config.getBoolean("otel.sdk.disabled", false);
454-
455454
if (sdkEnabled) {
456-
SdkMeterProviderBuilder meterProviderBuilder = SdkMeterProvider.builder();
457-
meterProviderBuilder.setResource(resource);
458-
MeterProviderConfiguration.configureMeterProvider(
459-
meterProviderBuilder,
460-
config,
461-
spiHelper,
462-
metricReaderCustomizer,
463-
metricExporterCustomizer,
464-
closeables);
465-
meterProviderBuilder = meterProviderCustomizer.apply(meterProviderBuilder, config);
466-
SdkMeterProvider meterProvider = meterProviderBuilder.build();
467-
closeables.add(meterProvider);
468-
469-
SdkTracerProviderBuilder tracerProviderBuilder = SdkTracerProvider.builder();
470-
tracerProviderBuilder.setResource(resource);
471-
TracerProviderConfiguration.configureTracerProvider(
472-
tracerProviderBuilder,
473-
config,
474-
spiHelper,
475-
meterProvider,
476-
spanExporterCustomizer,
477-
spanProcessorCustomizer,
478-
samplerCustomizer,
479-
closeables);
480-
tracerProviderBuilder = tracerProviderCustomizer.apply(tracerProviderBuilder, config);
481-
SdkTracerProvider tracerProvider = tracerProviderBuilder.build();
482-
closeables.add(tracerProvider);
483-
484-
SdkLoggerProviderBuilder loggerProviderBuilder = SdkLoggerProvider.builder();
485-
loggerProviderBuilder.setResource(resource);
486-
LoggerProviderConfiguration.configureLoggerProvider(
487-
loggerProviderBuilder,
488-
config,
489-
spiHelper,
490-
meterProvider,
491-
logRecordExporterCustomizer,
492-
logRecordProcessorCustomizer,
493-
closeables);
494-
loggerProviderBuilder = loggerProviderCustomizer.apply(loggerProviderBuilder, config);
495-
SdkLoggerProvider loggerProvider = loggerProviderBuilder.build();
496-
closeables.add(loggerProvider);
497-
498-
sdkBuilder
499-
.setTracerProvider(tracerProvider)
500-
.setLoggerProvider(loggerProvider)
501-
.setMeterProvider(meterProvider);
455+
sdkBuilder = configureSdk(sdkBuilder, config, resource, spiHelper, closeables);
502456
}
503457

504458
OpenTelemetrySdk openTelemetrySdk = sdkBuilder.build();
@@ -527,6 +481,61 @@ public AutoConfiguredOpenTelemetrySdk build() {
527481
}
528482
}
529483

484+
public OpenTelemetrySdkBuilder configureSdk(
485+
OpenTelemetrySdkBuilder sdkBuilder,
486+
ConfigProperties config,
487+
Resource resource,
488+
SpiHelper spiHelper,
489+
List<Closeable> closeables) {
490+
SdkMeterProviderBuilder meterProviderBuilder = SdkMeterProvider.builder();
491+
meterProviderBuilder.setResource(resource);
492+
493+
MeterProviderConfiguration.configureMeterProvider(
494+
meterProviderBuilder,
495+
config,
496+
spiHelper,
497+
metricReaderCustomizer,
498+
metricExporterCustomizer,
499+
closeables);
500+
meterProviderBuilder = meterProviderCustomizer.apply(meterProviderBuilder, config);
501+
SdkMeterProvider meterProvider = meterProviderBuilder.build();
502+
closeables.add(meterProvider);
503+
504+
SdkTracerProviderBuilder tracerProviderBuilder = SdkTracerProvider.builder();
505+
tracerProviderBuilder.setResource(resource);
506+
TracerProviderConfiguration.configureTracerProvider(
507+
tracerProviderBuilder,
508+
config,
509+
spiHelper,
510+
meterProvider,
511+
spanExporterCustomizer,
512+
spanProcessorCustomizer,
513+
samplerCustomizer,
514+
closeables);
515+
tracerProviderBuilder = tracerProviderCustomizer.apply(tracerProviderBuilder, config);
516+
SdkTracerProvider tracerProvider = tracerProviderBuilder.build();
517+
closeables.add(tracerProvider);
518+
519+
SdkLoggerProviderBuilder loggerProviderBuilder = SdkLoggerProvider.builder();
520+
loggerProviderBuilder.setResource(resource);
521+
LoggerProviderConfiguration.configureLoggerProvider(
522+
loggerProviderBuilder,
523+
config,
524+
spiHelper,
525+
meterProvider,
526+
logRecordExporterCustomizer,
527+
logRecordProcessorCustomizer,
528+
closeables);
529+
loggerProviderBuilder = loggerProviderCustomizer.apply(loggerProviderBuilder, config);
530+
SdkLoggerProvider loggerProvider = loggerProviderBuilder.build();
531+
closeables.add(loggerProvider);
532+
533+
return sdkBuilder
534+
.setTracerProvider(tracerProvider)
535+
.setLoggerProvider(loggerProvider)
536+
.setMeterProvider(meterProvider);
537+
}
538+
530539
@Nullable
531540
private static AutoConfiguredOpenTelemetrySdk maybeConfigureFromFile(
532541
ConfigProperties config, ComponentLoader componentLoader) {

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

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -546,7 +546,7 @@ void testNonStringProperties() {
546546

547547
@Test
548548
@SuppressLogger(AutoConfiguredOpenTelemetrySdkBuilder.class)
549-
void configurationError_ClosesResources() {
549+
void configurationError_propagators() {
550550
// AutoConfiguredOpenTelemetrySdk should close partially configured resources if an exception
551551
// short circuits configuration. Verify that SdkTracerProvider, SdkMeterProvider, and
552552
// SdkLoggerProvider
@@ -575,14 +575,25 @@ void configurationError_ClosesResources() {
575575
.addPropertiesSupplier(() -> singletonMap("otel.traces.exporter", "none"))
576576
.addPropertiesSupplier(() -> singletonMap("otel.logs.exporter", "none"))
577577
.addPropertiesSupplier(() -> singletonMap("otel.propagators", "foo"))
578+
.addPropertiesSupplier(() -> singletonMap("otel.sdk.disabled", "true"))
578579
.build())
579580
.isInstanceOf(ConfigurationException.class)
580581
.hasMessageContaining("Unrecognized value for otel.propagators");
581582

582-
verify(tracerProvider).close();
583-
verify(meterProvider).close();
584-
verify(loggerProvider).close();
585-
586-
logs.assertContains("Error closing io.opentelemetry.sdk.trace.SdkTracerProvider: Error!");
583+
assertThatThrownBy(
584+
() ->
585+
// Override the provider builders with mocks which we can verify are closed
586+
AutoConfiguredOpenTelemetrySdk.builder()
587+
.addTracerProviderCustomizer((u1, u2) -> tracerProviderBuilder)
588+
.addMeterProviderCustomizer((u1, u2) -> meterProviderBuilder)
589+
.addLoggerProviderCustomizer((u1, u2) -> loggerProviderBuilder)
590+
.addPropertiesSupplier(() -> singletonMap("otel.metrics.exporter", "none"))
591+
.addPropertiesSupplier(() -> singletonMap("otel.traces.exporter", "none"))
592+
.addPropertiesSupplier(() -> singletonMap("otel.logs.exporter", "none"))
593+
.addPropertiesSupplier(() -> singletonMap("otel.propagators", "foo"))
594+
.addPropertiesSupplier(() -> singletonMap("otel.sdk.disabled", "false"))
595+
.build())
596+
.isInstanceOf(ConfigurationException.class)
597+
.hasMessageContaining("Unrecognized value for otel.propagators");
587598
}
588599
}

0 commit comments

Comments
 (0)