From b18646810dfa4696ee110b0293b8b26c5734a08a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 29 Sep 2025 20:54:27 +0000 Subject: [PATCH 1/2] Initial plan From dc75cc9281c42532fad0bc232b77ddfc572df3f6 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 29 Sep 2025 21:08:24 +0000 Subject: [PATCH 2/2] Make enabled fields volatile in SdkTracer, SdkMeter, and MetricStorage implementations Co-authored-by: trask <218610+trask@users.noreply.github.com> --- .../src/main/java/io/opentelemetry/sdk/metrics/SdkMeter.java | 2 +- .../metrics/internal/state/AsynchronousMetricStorage.java | 2 +- .../internal/state/DefaultSynchronousMetricStorage.java | 2 +- .../src/main/java/io/opentelemetry/sdk/trace/SdkTracer.java | 5 ++--- 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkMeter.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkMeter.java index b31b3721428..470d1b96098 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkMeter.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkMeter.java @@ -89,7 +89,7 @@ final class SdkMeter implements Meter { private final InstrumentationScopeInfo instrumentationScopeInfo; private final Map readerStorageRegistries; - private boolean meterEnabled; + private volatile boolean meterEnabled; SdkMeter( MeterProviderSharedState meterProviderSharedState, diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/AsynchronousMetricStorage.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/AsynchronousMetricStorage.java index 6463226f8bc..318bd4847d7 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/AsynchronousMetricStorage.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/AsynchronousMetricStorage.java @@ -87,7 +87,7 @@ public final class AsynchronousMetricStorage> aggregatorHandlePool = new ConcurrentLinkedQueue<>(); - private boolean enabled; + private volatile boolean enabled; DefaultSynchronousMetricStorage( RegisteredReader registeredReader, diff --git a/sdk/trace/src/main/java/io/opentelemetry/sdk/trace/SdkTracer.java b/sdk/trace/src/main/java/io/opentelemetry/sdk/trace/SdkTracer.java index b148d0cf8c6..d90f4d8cb01 100644 --- a/sdk/trace/src/main/java/io/opentelemetry/sdk/trace/SdkTracer.java +++ b/sdk/trace/src/main/java/io/opentelemetry/sdk/trace/SdkTracer.java @@ -30,9 +30,8 @@ class SdkTracer implements Tracer { private final TracerSharedState sharedState; private final InstrumentationScopeInfo instrumentationScopeInfo; - // deliberately not volatile because of performance concerns - // - which means its eventually consistent - protected boolean tracerEnabled; + + protected volatile boolean tracerEnabled; SdkTracer( TracerSharedState sharedState,