From 575c38d21497d976eb0c05eb4510306bf4d5c8a9 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Wed, 24 Sep 2025 19:10:25 -0700 Subject: [PATCH 1/3] Volatile --- .../src/main/java/io/opentelemetry/sdk/logs/SdkLogger.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLogger.java b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLogger.java index 7539a5c3b17..ccb234d7d77 100644 --- a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLogger.java +++ b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLogger.java @@ -33,9 +33,7 @@ class SdkLogger implements Logger { private final LoggerSharedState loggerSharedState; private final InstrumentationScopeInfo instrumentationScopeInfo; - // deliberately not volatile because of performance concerns - // - which means its eventually consistent - protected boolean loggerEnabled; + protected volatile boolean loggerEnabled; SdkLogger( LoggerSharedState loggerSharedState, 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 2/3] 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 3/3] 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,