From 2272652843bc35336aac70d24a60663a171a9ac7 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Tue, 8 Jul 2025 16:47:15 +0200 Subject: [PATCH 1/5] pass meter provider to avoid using the global otel instance --- .../fileconfig/DeclarativeConfigContext.java | 10 ++++++++++ .../fileconfig/LogRecordProcessorFactory.java | 1 + .../OpenTelemetryConfigurationFactory.java | 20 ++++++++++--------- .../fileconfig/SpanProcessorFactory.java | 2 ++ 4 files changed, 24 insertions(+), 9 deletions(-) diff --git a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigContext.java b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigContext.java index 9cc697ecaea..20bd3498299 100644 --- a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigContext.java +++ b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigContext.java @@ -7,6 +7,7 @@ import io.opentelemetry.api.incubator.config.DeclarativeConfigException; import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.metrics.MeterProvider; import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper; import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; import java.io.Closeable; @@ -20,6 +21,7 @@ class DeclarativeConfigContext { private final SpiHelper spiHelper; + private MeterProvider meterProvider; private final List closeables = new ArrayList<>(); DeclarativeConfigContext(SpiHelper spiHelper) { @@ -39,6 +41,14 @@ List getCloseables() { return Collections.unmodifiableList(closeables); } + public MeterProvider getMeterProvider() { + return meterProvider; + } + + public void setMeterProvider(MeterProvider meterProvider) { + this.meterProvider = meterProvider; + } + /** * Find a registered {@link ComponentProvider} with {@link ComponentProvider#getType()} matching * {@code type}, {@link ComponentProvider#getName()} matching {@code name}, and call {@link diff --git a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/LogRecordProcessorFactory.java b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/LogRecordProcessorFactory.java index 20f271a5568..1bf5a99345f 100644 --- a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/LogRecordProcessorFactory.java +++ b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/LogRecordProcessorFactory.java @@ -52,6 +52,7 @@ public LogRecordProcessor create( if (batchModel.getScheduleDelay() != null) { builder.setScheduleDelay(Duration.ofMillis(batchModel.getScheduleDelay())); } + builder.setMeterProvider(context.getMeterProvider()); return context.addCloseable(builder.build()); } diff --git a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/OpenTelemetryConfigurationFactory.java b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/OpenTelemetryConfigurationFactory.java index 313e5d50b76..1a10d0a49f8 100644 --- a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/OpenTelemetryConfigurationFactory.java +++ b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/OpenTelemetryConfigurationFactory.java @@ -9,6 +9,7 @@ import io.opentelemetry.sdk.OpenTelemetrySdk; import io.opentelemetry.sdk.OpenTelemetrySdkBuilder; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel; +import io.opentelemetry.sdk.metrics.SdkMeterProvider; import io.opentelemetry.sdk.resources.Resource; import java.util.Objects; import java.util.regex.Pattern; @@ -53,6 +54,16 @@ public OpenTelemetrySdk create( resource = ResourceFactory.getInstance().create(model.getResource(), context); } + if (model.getMeterProvider() != null) { + SdkMeterProvider meterProvider = + MeterProviderFactory.getInstance() + .create(model.getMeterProvider(), context) + .setResource(resource) + .build(); + context.setMeterProvider(meterProvider); + builder.setMeterProvider(context.addCloseable(meterProvider)); + } + if (model.getLoggerProvider() != null) { builder.setLoggerProvider( context.addCloseable( @@ -77,15 +88,6 @@ public OpenTelemetrySdk create( .build())); } - if (model.getMeterProvider() != null) { - builder.setMeterProvider( - context.addCloseable( - MeterProviderFactory.getInstance() - .create(model.getMeterProvider(), context) - .setResource(resource) - .build())); - } - return context.addCloseable(builder.build()); } } diff --git a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/SpanProcessorFactory.java b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/SpanProcessorFactory.java index 5bfa617f570..1825d9f0988 100644 --- a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/SpanProcessorFactory.java +++ b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/SpanProcessorFactory.java @@ -47,6 +47,8 @@ public SpanProcessor create(SpanProcessorModel model, DeclarativeConfigContext c if (batchModel.getScheduleDelay() != null) { builder.setScheduleDelay(Duration.ofMillis(batchModel.getScheduleDelay())); } + builder.setMeterProvider(context.getMeterProvider()); + return context.addCloseable(builder.build()); } From 7e389f5e2f423178eac3da4353e6841ac586fde9 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Wed, 9 Jul 2025 12:50:52 +0200 Subject: [PATCH 2/5] format --- .../incubator/fileconfig/DeclarativeConfigContext.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigContext.java b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigContext.java index 20bd3498299..cd13dbd77ea 100644 --- a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigContext.java +++ b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigContext.java @@ -10,6 +10,7 @@ import io.opentelemetry.api.metrics.MeterProvider; import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper; import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; +import javax.annotation.Nullable; import java.io.Closeable; import java.util.ArrayList; import java.util.Collections; @@ -21,7 +22,7 @@ class DeclarativeConfigContext { private final SpiHelper spiHelper; - private MeterProvider meterProvider; + @Nullable private MeterProvider meterProvider; private final List closeables = new ArrayList<>(); DeclarativeConfigContext(SpiHelper spiHelper) { From b08f400ee307dede62a497a0de2a93155097b888 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Wed, 9 Jul 2025 12:58:04 +0200 Subject: [PATCH 3/5] fix --- .../incubator/fileconfig/DeclarativeConfigContext.java | 1 + .../incubator/fileconfig/LogRecordProcessorFactory.java | 6 +++++- .../incubator/fileconfig/SpanProcessorFactory.java | 6 +++++- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigContext.java b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigContext.java index cd13dbd77ea..dd5a2fff20b 100644 --- a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigContext.java +++ b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigContext.java @@ -42,6 +42,7 @@ List getCloseables() { return Collections.unmodifiableList(closeables); } + @Nullable public MeterProvider getMeterProvider() { return meterProvider; } diff --git a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/LogRecordProcessorFactory.java b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/LogRecordProcessorFactory.java index 1bf5a99345f..e898fe6efe9 100644 --- a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/LogRecordProcessorFactory.java +++ b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/LogRecordProcessorFactory.java @@ -5,6 +5,7 @@ package io.opentelemetry.sdk.extension.incubator.fileconfig; +import io.opentelemetry.api.metrics.MeterProvider; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.BatchLogRecordProcessorModel; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LogRecordExporterModel; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LogRecordProcessorModel; @@ -52,7 +53,10 @@ public LogRecordProcessor create( if (batchModel.getScheduleDelay() != null) { builder.setScheduleDelay(Duration.ofMillis(batchModel.getScheduleDelay())); } - builder.setMeterProvider(context.getMeterProvider()); + MeterProvider meterProvider = context.getMeterProvider(); + if (meterProvider != null) { + builder.setMeterProvider(meterProvider); + } return context.addCloseable(builder.build()); } diff --git a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/SpanProcessorFactory.java b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/SpanProcessorFactory.java index 1825d9f0988..d5b2c3970f6 100644 --- a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/SpanProcessorFactory.java +++ b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/SpanProcessorFactory.java @@ -5,6 +5,7 @@ package io.opentelemetry.sdk.extension.incubator.fileconfig; +import io.opentelemetry.api.metrics.MeterProvider; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.BatchSpanProcessorModel; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.SimpleSpanProcessorModel; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.SpanExporterModel; @@ -47,7 +48,10 @@ public SpanProcessor create(SpanProcessorModel model, DeclarativeConfigContext c if (batchModel.getScheduleDelay() != null) { builder.setScheduleDelay(Duration.ofMillis(batchModel.getScheduleDelay())); } - builder.setMeterProvider(context.getMeterProvider()); + MeterProvider meterProvider = context.getMeterProvider(); + if (meterProvider != null) { + builder.setMeterProvider(meterProvider); + } return context.addCloseable(builder.build()); } From 750f710421fd74420f8e6911366b5dda0f00bfa7 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Wed, 9 Jul 2025 13:28:01 +0200 Subject: [PATCH 4/5] fix --- .../incubator/fileconfig/DeclarativeConfigContext.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigContext.java b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigContext.java index dd5a2fff20b..9b75d9d355b 100644 --- a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigContext.java +++ b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigContext.java @@ -10,13 +10,13 @@ import io.opentelemetry.api.metrics.MeterProvider; import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper; import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; -import javax.annotation.Nullable; import java.io.Closeable; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.function.Function; import java.util.stream.Collectors; +import javax.annotation.Nullable; /** Declarative configuration context and state carrier. */ class DeclarativeConfigContext { From 6506694ab8a681dd335a42057d8e7ebe84c310d0 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Mon, 14 Jul 2025 11:57:30 +0200 Subject: [PATCH 5/5] field order --- .../incubator/fileconfig/DeclarativeConfigContext.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigContext.java b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigContext.java index 9b75d9d355b..1f1152d6c5f 100644 --- a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigContext.java +++ b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigContext.java @@ -22,8 +22,8 @@ class DeclarativeConfigContext { private final SpiHelper spiHelper; - @Nullable private MeterProvider meterProvider; private final List closeables = new ArrayList<>(); + @Nullable private MeterProvider meterProvider; DeclarativeConfigContext(SpiHelper spiHelper) { this.spiHelper = spiHelper;