From 3a6fadbd1e8b5cb9d91c84becac86c5312c25401 Mon Sep 17 00:00:00 2001 From: Tommy Ludwig <8924140+shakuzen@users.noreply.github.com> Date: Sun, 17 Mar 2024 12:04:02 +0100 Subject: [PATCH 1/3] Fix wrong baggage scope closing order in ObservationAwareBaggageThreadLocalAccessor --- ...tionAwareSpanThreadLocalAccessorTests.java | 20 +++++++++++++++++++ ...vationAwareBaggageThreadLocalAccessor.java | 3 ++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/micrometer-tracing-tests/micrometer-tracing-integration-test/src/test/java/io/micrometer/tracing/test/contextpropagation/AbstractObservationAwareSpanThreadLocalAccessorTests.java b/micrometer-tracing-tests/micrometer-tracing-integration-test/src/test/java/io/micrometer/tracing/test/contextpropagation/AbstractObservationAwareSpanThreadLocalAccessorTests.java index d577d78e..c8adbc4e 100644 --- a/micrometer-tracing-tests/micrometer-tracing-integration-test/src/test/java/io/micrometer/tracing/test/contextpropagation/AbstractObservationAwareSpanThreadLocalAccessorTests.java +++ b/micrometer-tracing-tests/micrometer-tracing-integration-test/src/test/java/io/micrometer/tracing/test/contextpropagation/AbstractObservationAwareSpanThreadLocalAccessorTests.java @@ -47,6 +47,7 @@ import reactor.core.scheduler.Schedulers; import reactor.util.context.Context; +import java.lang.reflect.Method; import java.util.Arrays; import java.util.List; import java.util.concurrent.*; @@ -376,6 +377,25 @@ void onlyReactorPropagatesBaggageWithContextCaptureAndObservation() { assertThat(tenant).isEqualTo("tenantValue"); } + @Test + void observationAwareBaggageThreadLocalAccessorSetsAndClosesBaggageToPropagate() throws ReflectiveOperationException { + then(getTracer().currentTraceContext().context()).isNull(); + + Observation.createNotStarted("First span", observationRegistry).observeChecked( + () -> { + then(getTracer().currentTraceContext().context()).isNotNull(); + + BaggageToPropagate baggageToPropagate = new BaggageToPropagate("tenant", "tenantValue", "tenant2", "tenant2Value"); + observationAwareBaggageThreadLocalAccessor.setValue(baggageToPropagate); + Method closeCurrentScope = ObservationAwareBaggageThreadLocalAccessor.class.getDeclaredMethod("closeCurrentScope"); + closeCurrentScope.setAccessible(true); + return closeCurrentScope.invoke(observationAwareBaggageThreadLocalAccessor); + } + ); + + then(getTracer().currentTraceContext().context()).isNull(); + } + private String asyncCall() { logWithSpan("TASK EXECUTOR"); if (getTracer().currentSpan() == null) { diff --git a/micrometer-tracing/src/main/java/io/micrometer/tracing/contextpropagation/ObservationAwareBaggageThreadLocalAccessor.java b/micrometer-tracing/src/main/java/io/micrometer/tracing/contextpropagation/ObservationAwareBaggageThreadLocalAccessor.java index a08fbe10..d4aa6a35 100644 --- a/micrometer-tracing/src/main/java/io/micrometer/tracing/contextpropagation/ObservationAwareBaggageThreadLocalAccessor.java +++ b/micrometer-tracing/src/main/java/io/micrometer/tracing/contextpropagation/ObservationAwareBaggageThreadLocalAccessor.java @@ -160,7 +160,8 @@ private static BaggageAndScope baggageScopeClosingScope(Entry en if (scope == null) { return scopeClosingBaggageAndScope(entry, baggage); } - return scope.andThen(scopeClosingBaggageAndScope(entry, baggage)); + + return scopeClosingBaggageAndScope(entry, baggage).andThen(scope); } private static BaggageAndScope scopeClosingBaggageAndScope(Entry entry, BaggageInScope baggage) { From c41554a1cbd344251a59e8bde64c9f05f1a1cb83 Mon Sep 17 00:00:00 2001 From: Tommy Ludwig <8924140+shakuzen@users.noreply.github.com> Date: Sun, 17 Mar 2024 12:04:40 +0100 Subject: [PATCH 2/3] Apply formatting --- ...tionAwareSpanThreadLocalAccessorTests.java | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/micrometer-tracing-tests/micrometer-tracing-integration-test/src/test/java/io/micrometer/tracing/test/contextpropagation/AbstractObservationAwareSpanThreadLocalAccessorTests.java b/micrometer-tracing-tests/micrometer-tracing-integration-test/src/test/java/io/micrometer/tracing/test/contextpropagation/AbstractObservationAwareSpanThreadLocalAccessorTests.java index c8adbc4e..d3b3a4a2 100644 --- a/micrometer-tracing-tests/micrometer-tracing-integration-test/src/test/java/io/micrometer/tracing/test/contextpropagation/AbstractObservationAwareSpanThreadLocalAccessorTests.java +++ b/micrometer-tracing-tests/micrometer-tracing-integration-test/src/test/java/io/micrometer/tracing/test/contextpropagation/AbstractObservationAwareSpanThreadLocalAccessorTests.java @@ -378,20 +378,21 @@ void onlyReactorPropagatesBaggageWithContextCaptureAndObservation() { } @Test - void observationAwareBaggageThreadLocalAccessorSetsAndClosesBaggageToPropagate() throws ReflectiveOperationException { + void observationAwareBaggageThreadLocalAccessorSetsAndClosesBaggageToPropagate() + throws ReflectiveOperationException { then(getTracer().currentTraceContext().context()).isNull(); - Observation.createNotStarted("First span", observationRegistry).observeChecked( - () -> { - then(getTracer().currentTraceContext().context()).isNotNull(); + Observation.createNotStarted("First span", observationRegistry).observeChecked(() -> { + then(getTracer().currentTraceContext().context()).isNotNull(); - BaggageToPropagate baggageToPropagate = new BaggageToPropagate("tenant", "tenantValue", "tenant2", "tenant2Value"); - observationAwareBaggageThreadLocalAccessor.setValue(baggageToPropagate); - Method closeCurrentScope = ObservationAwareBaggageThreadLocalAccessor.class.getDeclaredMethod("closeCurrentScope"); - closeCurrentScope.setAccessible(true); - return closeCurrentScope.invoke(observationAwareBaggageThreadLocalAccessor); - } - ); + BaggageToPropagate baggageToPropagate = new BaggageToPropagate("tenant", "tenantValue", "tenant2", + "tenant2Value"); + observationAwareBaggageThreadLocalAccessor.setValue(baggageToPropagate); + Method closeCurrentScope = ObservationAwareBaggageThreadLocalAccessor.class + .getDeclaredMethod("closeCurrentScope"); + closeCurrentScope.setAccessible(true); + return closeCurrentScope.invoke(observationAwareBaggageThreadLocalAccessor); + }); then(getTracer().currentTraceContext().context()).isNull(); } From 47483c9faa649f9295fbde45628fe0cf76503403 Mon Sep 17 00:00:00 2001 From: Tommy Ludwig <8924140+shakuzen@users.noreply.github.com> Date: Sun, 17 Mar 2024 12:08:15 +0100 Subject: [PATCH 3/3] Remove blank line --- .../ObservationAwareBaggageThreadLocalAccessor.java | 1 - 1 file changed, 1 deletion(-) diff --git a/micrometer-tracing/src/main/java/io/micrometer/tracing/contextpropagation/ObservationAwareBaggageThreadLocalAccessor.java b/micrometer-tracing/src/main/java/io/micrometer/tracing/contextpropagation/ObservationAwareBaggageThreadLocalAccessor.java index d4aa6a35..506f0a45 100644 --- a/micrometer-tracing/src/main/java/io/micrometer/tracing/contextpropagation/ObservationAwareBaggageThreadLocalAccessor.java +++ b/micrometer-tracing/src/main/java/io/micrometer/tracing/contextpropagation/ObservationAwareBaggageThreadLocalAccessor.java @@ -160,7 +160,6 @@ private static BaggageAndScope baggageScopeClosingScope(Entry en if (scope == null) { return scopeClosingBaggageAndScope(entry, baggage); } - return scopeClosingBaggageAndScope(entry, baggage).andThen(scope); }