diff --git a/benchmarks/pom.xml b/benchmarks/pom.xml
index 3bc76a925..363306d0c 100644
--- a/benchmarks/pom.xml
+++ b/benchmarks/pom.xml
@@ -33,7 +33,7 @@
1.8
1.8
2.3.0.BUILD-SNAPSHOT
- 5.10.2
+ 5.11.0
3.14.6
diff --git a/pom.xml b/pom.xml
index 2a1440cb8..646977f4a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -250,7 +250,7 @@
Horsham.BUILD-SNAPSHOT
3.0.0.BUILD-SNAPSHOT
3.0.0.BUILD-SNAPSHOT
- 5.10.2
+ 5.11.0
2.1.7.RELEASE
false
3.14.6
diff --git a/spring-cloud-sleuth-core/pom.xml b/spring-cloud-sleuth-core/pom.xml
index 58260e7ac..55ce86edc 100644
--- a/spring-cloud-sleuth-core/pom.xml
+++ b/spring-cloud-sleuth-core/pom.xml
@@ -187,7 +187,7 @@
io.zipkin.brave
- brave-context-log4j2
+ brave-context-slf4j
io.zipkin.brave
diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/reactor/ReactorSleuth.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/reactor/ReactorSleuth.java
index fa013b7c8..c0615dc08 100644
--- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/reactor/ReactorSleuth.java
+++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/reactor/ReactorSleuth.java
@@ -16,23 +16,21 @@
package org.springframework.cloud.sleuth.instrument.reactor;
-import java.util.function.Function;
-
import brave.Tracing;
import brave.propagation.CurrentTraceContext;
import brave.propagation.TraceContext;
+import java.util.function.Function;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.reactivestreams.Publisher;
+import org.springframework.cloud.sleuth.internal.LazyBean;
+import org.springframework.context.ConfigurableApplicationContext;
import reactor.core.CoreSubscriber;
import reactor.core.Fuseable;
import reactor.core.Scannable;
import reactor.core.publisher.Operators;
import reactor.util.context.Context;
-import org.springframework.cloud.sleuth.internal.LazyBean;
-import org.springframework.context.ConfigurableApplicationContext;
-
/**
* Reactive Span pointcuts factories.
*
@@ -82,12 +80,15 @@ public abstract class ReactorSleuth {
}
if (!springContext.isActive()) {
- if (log.isTraceEnabled()) {
- log.trace("Spring Context [" + springContext
+ boolean assertOn = false;
+ assert assertOn = true; // gives a message in unit tests even if trace disabled!
+ if (log.isTraceEnabled() || assertOn) {
+ String message = "Spring Context [" + springContext
+ "] is not yet refreshed. This is unexpected. Reactor Context is ["
- + sub.currentContext() + "] and name is [" + name(sub) + "]");
+ + sub.currentContext() + "] and name is [" + name(sub) + "]";
+ log.trace(message);
+ assert false : message; // should never happen, but don't break.
}
- assert false; // should never happen, but don't break.
return sub;
}
@@ -101,12 +102,15 @@ public abstract class ReactorSleuth {
// Try to get the current trace context bean, lenient when there are problems
CurrentTraceContext currentTraceContext = lazyCurrentTraceContext.get();
if (currentTraceContext == null) {
- if (log.isTraceEnabled()) {
- log.trace("Spring Context [" + springContext
+ boolean assertOn = false;
+ assert assertOn = true; // gives a message in unit tests even if trace disabled!
+ if (log.isTraceEnabled() || assertOn) {
+ String message = "Spring Context [" + springContext
+ "] did not return a CurrentTraceContext. Reactor Context is ["
- + sub.currentContext() + "] and name is [" + name(sub) + "]");
+ + sub.currentContext() + "] and name is [" + name(sub) + "]";
+ log.trace(message);
+ assert false : message; // should never happen, but don't break.
}
- assert false; // should never happen, but don't break.
return sub;
}
diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/autoconfig/TraceAutoConfigurationPropagationCustomizationTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/autoconfig/TraceAutoConfigurationPropagationCustomizationTests.java
index 2e2cefecd..a022300cd 100644
--- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/autoconfig/TraceAutoConfigurationPropagationCustomizationTests.java
+++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/autoconfig/TraceAutoConfigurationPropagationCustomizationTests.java
@@ -49,7 +49,7 @@ public class TraceAutoConfigurationPropagationCustomizationTests {
this.contextRunner.withPropertyValues("spring.sleuth.baggage-keys=my-baggage")
.run((context) -> {
BDDAssertions.then(context.getBean(Propagation.Factory.class))
- .hasFieldOrPropertyWithValue("delegate",
+ .hasFieldOrPropertyWithValue("delegate.delegate",
B3Propagation.FACTORY);
});
}
@@ -81,7 +81,7 @@ public class TraceAutoConfigurationPropagationCustomizationTests {
.withUserConfiguration(CustomPropagationFactoryBuilderConfig.class)
.run((context) -> {
BDDAssertions.then(context.getBean(Propagation.Factory.class))
- .hasFieldOrPropertyWithValue("delegate",
+ .hasFieldOrPropertyWithValue("delegate.delegate",
B3SinglePropagation.FACTORY);
});
}
diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/documentation/SpringCloudSleuthDocTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/documentation/SpringCloudSleuthDocTests.java
index 3fffb0f62..bc66647ad 100644
--- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/documentation/SpringCloudSleuthDocTests.java
+++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/documentation/SpringCloudSleuthDocTests.java
@@ -27,10 +27,10 @@ import java.util.concurrent.Future;
import brave.Span;
import brave.Tracer;
import brave.Tracing;
-import brave.propagation.StrictScopeDecorator;
-import brave.propagation.ThreadLocalCurrentTraceContext;
+import brave.propagation.StrictCurrentTraceContext;
import brave.sampler.Sampler;
import org.assertj.core.api.BDDAssertions;
+import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -55,9 +55,9 @@ public class SpringCloudSleuthDocTests {
ArrayListSpanReporter reporter = new ArrayListSpanReporter();
- Tracing tracing = Tracing.newBuilder()
- .currentTraceContext(ThreadLocalCurrentTraceContext.newBuilder()
- .addScopeDecorator(StrictScopeDecorator.create()).build())
+ StrictCurrentTraceContext currentTraceContext = StrictCurrentTraceContext.create();
+
+ Tracing tracing = Tracing.newBuilder().currentTraceContext(this.currentTraceContext)
.sampler(Sampler.ALWAYS_SAMPLE).spanReporter(this.reporter).build();
Tracer tracer = this.tracing.tracer();
@@ -67,6 +67,12 @@ public class SpringCloudSleuthDocTests {
this.reporter.clear();
}
+ @AfterEach
+ public void close() {
+ this.tracing.close();
+ this.currentTraceContext.close();
+ }
+
@Test
public void should_set_runnable_name_to_annotated_value()
throws ExecutionException, InterruptedException {
diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/LazyTraceThreadPoolTaskSchedulerTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/LazyTraceThreadPoolTaskSchedulerTests.java
index 51747798c..f5970f28d 100644
--- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/LazyTraceThreadPoolTaskSchedulerTests.java
+++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/LazyTraceThreadPoolTaskSchedulerTests.java
@@ -24,8 +24,8 @@ import java.util.concurrent.RejectedExecutionHandler;
import java.util.concurrent.ThreadFactory;
import brave.Tracing;
-import brave.propagation.StrictScopeDecorator;
-import brave.propagation.ThreadLocalCurrentTraceContext;
+import brave.propagation.StrictCurrentTraceContext;
+import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -43,9 +43,9 @@ import org.springframework.util.ErrorHandler;
@ExtendWith(MockitoExtension.class)
public class LazyTraceThreadPoolTaskSchedulerTests {
- Tracing tracing = Tracing.newBuilder()
- .currentTraceContext(ThreadLocalCurrentTraceContext.newBuilder()
- .addScopeDecorator(StrictScopeDecorator.create()).build())
+ StrictCurrentTraceContext currentTraceContext = StrictCurrentTraceContext.create();
+
+ Tracing tracing = Tracing.newBuilder().currentTraceContext(currentTraceContext)
.build();
@Mock(lenient = true)
@@ -62,6 +62,13 @@ public class LazyTraceThreadPoolTaskSchedulerTests {
this.delegate);
}
+ @AfterEach
+ public void close() {
+ this.executor.shutdown();
+ this.tracing.close();
+ this.currentTraceContext.close();
+ }
+
BeanFactory beanFactory() {
BDDMockito.given(this.beanFactory.getBean(Tracing.class))
.willReturn(this.tracing);
diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/TraceAsyncAspectTest.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/TraceAsyncAspectTest.java
index f913ef283..4bfb6f0ae 100644
--- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/TraceAsyncAspectTest.java
+++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/TraceAsyncAspectTest.java
@@ -17,11 +17,11 @@
package org.springframework.cloud.sleuth.instrument.async;
import brave.Tracing;
-import brave.propagation.StrictScopeDecorator;
-import brave.propagation.ThreadLocalCurrentTraceContext;
+import brave.propagation.StrictCurrentTraceContext;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.reflect.MethodSignature;
import org.assertj.core.api.BDDAssertions;
+import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.BDDMockito;
@@ -35,11 +35,11 @@ import org.springframework.cloud.sleuth.util.ArrayListSpanReporter;
*/
public class TraceAsyncAspectTest {
+ StrictCurrentTraceContext currentTraceContext = StrictCurrentTraceContext.create();
+
ArrayListSpanReporter reporter = new ArrayListSpanReporter();
- Tracing tracing = Tracing.newBuilder()
- .currentTraceContext(ThreadLocalCurrentTraceContext.newBuilder()
- .addScopeDecorator(StrictScopeDecorator.create()).build())
+ Tracing tracing = Tracing.newBuilder().currentTraceContext(this.currentTraceContext)
.spanReporter(this.reporter).build();
ProceedingJoinPoint point = Mockito.mock(ProceedingJoinPoint.class);
@@ -54,6 +54,12 @@ public class TraceAsyncAspectTest {
BDDMockito.given(this.point.getTarget()).willReturn("");
}
+ @AfterEach
+ public void close() {
+ this.tracing.close();
+ this.currentTraceContext.close();
+ }
+
// Issue#926
@Test
public void should_work() throws Throwable {
diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/TraceAsyncListenableTaskExecutorTest.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/TraceAsyncListenableTaskExecutorTest.java
index 559e5eded..a04f15c93 100644
--- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/TraceAsyncListenableTaskExecutorTest.java
+++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/TraceAsyncListenableTaskExecutorTest.java
@@ -23,10 +23,10 @@ import java.util.concurrent.atomic.AtomicBoolean;
import brave.Span;
import brave.Tracer;
import brave.Tracing;
-import brave.propagation.StrictScopeDecorator;
-import brave.propagation.ThreadLocalCurrentTraceContext;
+import brave.propagation.StrictCurrentTraceContext;
import org.assertj.core.api.BDDAssertions;
import org.awaitility.Awaitility;
+import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import org.springframework.core.task.AsyncListenableTaskExecutor;
@@ -39,9 +39,9 @@ public class TraceAsyncListenableTaskExecutorTest {
AsyncListenableTaskExecutor delegate = new SimpleAsyncTaskExecutor();
- Tracing tracing = Tracing.newBuilder()
- .currentTraceContext(ThreadLocalCurrentTraceContext.newBuilder()
- .addScopeDecorator(StrictScopeDecorator.create()).build())
+ StrictCurrentTraceContext currentTraceContext = StrictCurrentTraceContext.create();
+
+ Tracing tracing = Tracing.newBuilder().currentTraceContext(currentTraceContext)
.build();
Tracer tracer = this.tracing.tracer();
@@ -49,6 +49,12 @@ public class TraceAsyncListenableTaskExecutorTest {
TraceAsyncListenableTaskExecutor traceAsyncListenableTaskExecutor = new TraceAsyncListenableTaskExecutor(
this.delegate, this.tracing);
+ @AfterEach
+ public void close() {
+ this.tracing.close();
+ this.currentTraceContext.close();
+ }
+
@Test
public void should_submit_listenable_trace_runnable() throws Exception {
AtomicBoolean executed = new AtomicBoolean();
diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/TraceCallableTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/TraceCallableTests.java
index ecaa2b7ee..272ed3b76 100644
--- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/TraceCallableTests.java
+++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/TraceCallableTests.java
@@ -23,8 +23,7 @@ import java.util.concurrent.Executors;
import brave.Span;
import brave.Tracer;
import brave.Tracing;
-import brave.propagation.StrictScopeDecorator;
-import brave.propagation.ThreadLocalCurrentTraceContext;
+import brave.propagation.StrictCurrentTraceContext;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -41,20 +40,21 @@ public class TraceCallableTests {
ExecutorService executor = Executors.newSingleThreadExecutor();
+ StrictCurrentTraceContext currentTraceContext = StrictCurrentTraceContext.create();
+
ArrayListSpanReporter reporter = new ArrayListSpanReporter();
- Tracing tracing = Tracing.newBuilder()
- .currentTraceContext(ThreadLocalCurrentTraceContext.newBuilder()
- .addScopeDecorator(StrictScopeDecorator.create()).build())
+ Tracing tracing = Tracing.newBuilder().currentTraceContext(this.currentTraceContext)
.spanReporter(this.reporter).build();
Tracer tracer = this.tracing.tracer();
@AfterEach
public void clean() {
+ this.executor.shutdown();
this.tracing.close();
this.reporter.clear();
- this.executor.shutdown();
+ this.currentTraceContext.close();
}
@Test
diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/TraceRunnableTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/TraceRunnableTests.java
index f38ad1078..f066d21dc 100644
--- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/TraceRunnableTests.java
+++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/TraceRunnableTests.java
@@ -23,8 +23,7 @@ import java.util.concurrent.atomic.AtomicReference;
import brave.Span;
import brave.Tracer;
import brave.Tracing;
-import brave.propagation.StrictScopeDecorator;
-import brave.propagation.ThreadLocalCurrentTraceContext;
+import brave.propagation.StrictCurrentTraceContext;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -41,20 +40,21 @@ public class TraceRunnableTests {
ExecutorService executor = Executors.newSingleThreadExecutor();
+ StrictCurrentTraceContext currentTraceContext = StrictCurrentTraceContext.create();
+
ArrayListSpanReporter reporter = new ArrayListSpanReporter();
- Tracing tracing = Tracing.newBuilder()
- .currentTraceContext(ThreadLocalCurrentTraceContext.newBuilder()
- .addScopeDecorator(StrictScopeDecorator.create()).build())
+ Tracing tracing = Tracing.newBuilder().currentTraceContext(this.currentTraceContext)
.spanReporter(this.reporter).build();
Tracer tracer = this.tracing.tracer();
@AfterEach
public void clean() {
+ this.executor.shutdown();
this.tracing.close();
this.reporter.clear();
- this.executor.shutdown();
+ this.currentTraceContext.close();
}
@Test
diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/TraceableExecutorServiceTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/TraceableExecutorServiceTests.java
index ec54cfd6b..c434db1e7 100644
--- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/TraceableExecutorServiceTests.java
+++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/TraceableExecutorServiceTests.java
@@ -29,11 +29,10 @@ import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import brave.ScopedSpan;
-import brave.Span;
import brave.Tracer;
import brave.Tracing;
-import brave.propagation.StrictScopeDecorator;
-import brave.propagation.ThreadLocalCurrentTraceContext;
+import brave.propagation.StrictCurrentTraceContext;
+import brave.propagation.TraceContext;
import org.assertj.core.api.BDDAssertions;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
@@ -65,11 +64,11 @@ public class TraceableExecutorServiceTests {
ExecutorService traceManagerableExecutorService;
+ StrictCurrentTraceContext currentTraceContext = StrictCurrentTraceContext.create();
+
ArrayListSpanReporter reporter = new ArrayListSpanReporter();
- Tracing tracing = Tracing.newBuilder()
- .currentTraceContext(ThreadLocalCurrentTraceContext.newBuilder()
- .addScopeDecorator(StrictScopeDecorator.create()).build())
+ Tracing tracing = Tracing.newBuilder().currentTraceContext(this.currentTraceContext)
.spanReporter(this.reporter).build();
Tracer tracer = this.tracing.tracer();
@@ -85,12 +84,11 @@ public class TraceableExecutorServiceTests {
}
@AfterEach
- public void tearDown() throws Exception {
+ public void tearDown() {
this.traceManagerableExecutorService.shutdown();
this.executorService.shutdown();
- if (Tracing.current() != null) {
- Tracing.current().close();
- }
+ this.tracing.close();
+ this.currentTraceContext.close();
}
@Test
@@ -244,9 +242,9 @@ public class TraceableExecutorServiceTests {
@Override
public void run() {
- Span span = Tracing.currentTracer().currentSpan();
- this.traceIds.add(span.context().traceId());
- this.spanIds.add(span.context().spanId());
+ TraceContext context = currentTraceContext.get();
+ this.traceIds.add(context.traceId());
+ this.spanIds.add(context.spanId());
}
void clear() {
diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/TraceableScheduledExecutorServiceTest.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/TraceableScheduledExecutorServiceTest.java
index b62069bc5..580bdb3da 100644
--- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/TraceableScheduledExecutorServiceTest.java
+++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/TraceableScheduledExecutorServiceTest.java
@@ -22,8 +22,8 @@ import java.util.concurrent.TimeUnit;
import java.util.function.Predicate;
import brave.Tracing;
-import brave.propagation.StrictScopeDecorator;
-import brave.propagation.ThreadLocalCurrentTraceContext;
+import brave.propagation.StrictCurrentTraceContext;
+import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -48,9 +48,9 @@ import static org.mockito.Mockito.never;
@ExtendWith(MockitoExtension.class)
public class TraceableScheduledExecutorServiceTest {
- Tracing tracing = Tracing.newBuilder()
- .currentTraceContext(ThreadLocalCurrentTraceContext.newBuilder()
- .addScopeDecorator(StrictScopeDecorator.create()).build())
+ StrictCurrentTraceContext currentTraceContext = StrictCurrentTraceContext.create();
+
+ Tracing tracing = Tracing.newBuilder().currentTraceContext(this.currentTraceContext)
.build();
@Mock(lenient = true)
@@ -67,6 +67,12 @@ public class TraceableScheduledExecutorServiceTest {
beanFactory();
}
+ @AfterEach
+ public void close() {
+ this.tracing.close();
+ this.currentTraceContext.close();
+ }
+
@Test
public void should_schedule_a_trace_runnable() throws Exception {
this.traceableScheduledExecutorService.schedule(aRunnable(), 1L, TimeUnit.DAYS);
diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/circuitbreaker/CircuitBreakerTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/circuitbreaker/CircuitBreakerTests.java
index 760d45b15..c1adce93c 100644
--- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/circuitbreaker/CircuitBreakerTests.java
+++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/circuitbreaker/CircuitBreakerTests.java
@@ -22,10 +22,10 @@ import brave.ScopedSpan;
import brave.Span;
import brave.Tracer;
import brave.Tracing;
-import brave.propagation.StrictScopeDecorator;
-import brave.propagation.ThreadLocalCurrentTraceContext;
+import brave.propagation.StrictCurrentTraceContext;
import brave.sampler.Sampler;
import org.assertj.core.api.BDDAssertions;
+import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -36,11 +36,11 @@ import static org.assertj.core.api.BDDAssertions.then;
public class CircuitBreakerTests {
+ StrictCurrentTraceContext currentTraceContext = StrictCurrentTraceContext.create();
+
ArrayListSpanReporter reporter = new ArrayListSpanReporter();
- Tracing tracing = Tracing.newBuilder()
- .currentTraceContext(ThreadLocalCurrentTraceContext.newBuilder()
- .addScopeDecorator(StrictScopeDecorator.create()).build())
+ Tracing tracing = Tracing.newBuilder().currentTraceContext(this.currentTraceContext)
.spanReporter(this.reporter).sampler(Sampler.ALWAYS_SAMPLE).build();
Tracer tracer = this.tracing.tracer();
@@ -50,6 +50,12 @@ public class CircuitBreakerTests {
this.reporter.clear();
}
+ @AfterEach
+ public void close() {
+ this.tracing.close();
+ this.currentTraceContext.close();
+ }
+
@Test
public void should_pass_tracing_information_when_using_circuit_breaker() {
// given
diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/messaging/TracingChannelInterceptorTest.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/messaging/TracingChannelInterceptorTest.java
index 0ed5de9bf..b2a275f2a 100644
--- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/messaging/TracingChannelInterceptorTest.java
+++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/messaging/TracingChannelInterceptorTest.java
@@ -23,8 +23,7 @@ import java.util.List;
import java.util.Map;
import brave.Tracing;
-import brave.propagation.StrictScopeDecorator;
-import brave.propagation.ThreadLocalCurrentTraceContext;
+import brave.propagation.StrictCurrentTraceContext;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import zipkin2.Span;
@@ -51,12 +50,14 @@ import static org.springframework.messaging.support.NativeMessageHeaderAccessor.
public class TracingChannelInterceptorTest {
+ StrictCurrentTraceContext currentTraceContext = StrictCurrentTraceContext.create();
+
List spans = new ArrayList<>();
- ChannelInterceptor interceptor = TracingChannelInterceptor.create(Tracing.newBuilder()
- .currentTraceContext(ThreadLocalCurrentTraceContext.newBuilder()
- .addScopeDecorator(StrictScopeDecorator.create()).build())
- .spanReporter(this.spans::add).build());
+ Tracing tracing = Tracing.newBuilder().currentTraceContext(this.currentTraceContext)
+ .spanReporter(this.spans::add).build();
+
+ ChannelInterceptor interceptor = TracingChannelInterceptor.create(tracing);
QueueChannel channel = new QueueChannel();
@@ -71,6 +72,12 @@ public class TracingChannelInterceptorTest {
}
};
+ @AfterEach
+ public void close() {
+ this.tracing.close();
+ this.currentTraceContext.close();
+ }
+
@Test
public void pollingReceive_emptyQueue() {
this.channel.addInterceptor(consumerSideOnly(this.interceptor));
@@ -424,10 +431,4 @@ public class TracingChannelInterceptorTest {
return new ExecutorSideOnly();
}
- @AfterEach
- public void close() {
- assertThat(Tracing.current().currentTraceContext().get()).isNull();
- Tracing.current().close();
- }
-
}
diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/quartz/TracingJobListenerTest.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/quartz/TracingJobListenerTest.java
index 8c4433ceb..8baa51d41 100644
--- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/quartz/TracingJobListenerTest.java
+++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/quartz/TracingJobListenerTest.java
@@ -25,8 +25,7 @@ import java.util.concurrent.CompletableFuture;
import brave.Tracer.SpanInScope;
import brave.Tracing;
import brave.propagation.Propagation.Setter;
-import brave.propagation.StrictScopeDecorator;
-import brave.propagation.ThreadLocalCurrentTraceContext;
+import brave.propagation.StrictCurrentTraceContext;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -68,21 +67,20 @@ public class TracingJobListenerTest {
private TracingJobListener listener;
- private Tracing tracing;
-
private Scheduler scheduler;
private CompletableFuture completableJob;
+ private StrictCurrentTraceContext currentTraceContext = StrictCurrentTraceContext
+ .create();
+
private Queue spans = new ArrayDeque<>();
+ private Tracing tracing = Tracing.newBuilder().spanReporter(spans::add)
+ .currentTraceContext(currentTraceContext).build();
+
@BeforeEach
public void setUp() throws Exception {
- tracing = Tracing.newBuilder().spanReporter(spans::add)
- .currentTraceContext(ThreadLocalCurrentTraceContext.newBuilder()
- .addScopeDecorator(StrictScopeDecorator.create()).build())
- .build();
-
listener = new TracingJobListener(tracing);
completableJob = new CompleteableTriggerListener();
@@ -103,7 +101,9 @@ public class TracingJobListenerTest {
@AfterEach
public void tearDown() throws Exception {
- scheduler.shutdown(true);
+ this.scheduler.shutdown(true);
+ this.tracing.close();
+ this.currentTraceContext.close();
}
@Test
diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceRestTemplateInterceptorTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceRestTemplateInterceptorTests.java
index 0b941165c..1db618014 100644
--- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceRestTemplateInterceptorTests.java
+++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceRestTemplateInterceptorTests.java
@@ -26,8 +26,7 @@ import brave.Tracer;
import brave.Tracing;
import brave.http.HttpClientParser;
import brave.http.HttpTracing;
-import brave.propagation.StrictScopeDecorator;
-import brave.propagation.ThreadLocalCurrentTraceContext;
+import brave.propagation.StrictCurrentTraceContext;
import brave.sampler.Sampler;
import brave.spring.web.TracingClientHttpRequestInterceptor;
import org.junit.jupiter.api.AfterEach;
@@ -55,11 +54,11 @@ import static org.assertj.core.api.BDDAssertions.then;
*/
public class TraceRestTemplateInterceptorTests {
+ StrictCurrentTraceContext currentTraceContext = StrictCurrentTraceContext.create();
+
ArrayListSpanReporter reporter = new ArrayListSpanReporter();
- Tracing tracing = Tracing.newBuilder()
- .currentTraceContext(ThreadLocalCurrentTraceContext.newBuilder()
- .addScopeDecorator(StrictScopeDecorator.create()).build())
+ Tracing tracing = Tracing.newBuilder().currentTraceContext(this.currentTraceContext)
.spanReporter(this.reporter).build();
Tracer tracer = this.tracing.tracer();
@@ -84,7 +83,8 @@ public class TraceRestTemplateInterceptorTests {
@AfterEach
public void clean() {
- Tracing.current().close();
+ this.tracing.close();
+ this.currentTraceContext.close();
}
@Test
@@ -139,9 +139,8 @@ public class TraceRestTemplateInterceptorTests {
@Test
public void notSampledHeaderAddedWhenNotExportable() {
- Tracing tracing = Tracing.newBuilder()
- .currentTraceContext(ThreadLocalCurrentTraceContext.newBuilder()
- .addScopeDecorator(StrictScopeDecorator.create()).build())
+ this.tracing.close();
+ this.tracing = Tracing.newBuilder().currentTraceContext(this.currentTraceContext)
.spanReporter(this.reporter).sampler(Sampler.NEVER_SAMPLE).build();
this.template.setInterceptors(Arrays.asList(
TracingClientHttpRequestInterceptor.create(HttpTracing.create(tracing))));
diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/HttpClientBeanPostProcessorTest.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/HttpClientBeanPostProcessorTest.java
index 75ae91690..d3645be79 100644
--- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/HttpClientBeanPostProcessorTest.java
+++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/HttpClientBeanPostProcessorTest.java
@@ -16,13 +16,19 @@
package org.springframework.cloud.sleuth.instrument.web.client;
+import java.util.function.BiConsumer;
+
import brave.propagation.TraceContext;
import io.netty.bootstrap.Bootstrap;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
+import reactor.core.publisher.Hooks;
import reactor.core.publisher.Mono;
+import reactor.core.publisher.SynchronousSink;
+import reactor.core.scheduler.Schedulers;
import reactor.netty.Connection;
import org.springframework.cloud.sleuth.instrument.web.client.HttpClientBeanPostProcessor.PendingSpan;
@@ -42,15 +48,27 @@ public class HttpClientBeanPostProcessorTest {
TraceContext traceContext = TraceContext.newBuilder().traceId(1).spanId(2)
.sampled(true).build();
+ @BeforeEach
+ public void setup() {
+ Hooks.resetOnEachOperator();
+ Hooks.resetOnLastOperator();
+ Schedulers.resetOnScheduleHooks();
+ }
+
@Test
void mapConnect_should_setup_reactor_context_currentTraceContext() {
TracingMapConnect tracingMapConnect = new TracingMapConnect(() -> traceContext);
- Mono original = Mono.just(connection).handle((t, ctx) -> {
- assertThat(ctx.currentContext().get(TraceContext.class))
- .isSameAs(traceContext);
- assertThat(ctx.currentContext().get(PendingSpan.class)).isNotNull();
- });
+ Mono original = Mono.just(connection)
+ .handle(new BiConsumer>() {
+ @Override
+ public void accept(Connection t, SynchronousSink ctx) {
+ assertThat(ctx.currentContext().get(TraceContext.class))
+ .isSameAs(traceContext);
+ assertThat(ctx.currentContext().get(PendingSpan.class))
+ .isNotNull();
+ }
+ });
// Wrap and run the assertions
tracingMapConnect.apply(original, bootstrap).log().subscribe();
@@ -60,10 +78,16 @@ public class HttpClientBeanPostProcessorTest {
void mapConnect_should_setup_reactor_context_no_currentTraceContext() {
TracingMapConnect tracingMapConnect = new TracingMapConnect(() -> null);
- Mono original = Mono.just(connection).handle((t, ctx) -> {
- assertThat(ctx.currentContext().getOrEmpty(TraceContext.class)).isEmpty();
- assertThat(ctx.currentContext().get(PendingSpan.class)).isNotNull();
- });
+ Mono original = Mono.just(connection)
+ .handle(new BiConsumer>() {
+ @Override
+ public void accept(Connection t, SynchronousSink ctx) {
+ assertThat(ctx.currentContext().getOrEmpty(TraceContext.class))
+ .isEmpty();
+ assertThat(ctx.currentContext().get(PendingSpan.class))
+ .isNotNull();
+ }
+ });
// Wrap and run the assertions
tracingMapConnect.apply(original, bootstrap).log().subscribe();
diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/TraceRequestHttpHeadersFilterTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/TraceRequestHttpHeadersFilterTests.java
index 5e0296b69..2dae352d6 100644
--- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/TraceRequestHttpHeadersFilterTests.java
+++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/TraceRequestHttpHeadersFilterTests.java
@@ -21,9 +21,9 @@ import java.util.Collections;
import brave.Tracing;
import brave.http.HttpTracing;
-import brave.propagation.StrictScopeDecorator;
-import brave.propagation.ThreadLocalCurrentTraceContext;
+import brave.propagation.StrictCurrentTraceContext;
import org.assertj.core.api.BDDAssertions;
+import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import org.springframework.cloud.gateway.filter.headers.HttpHeadersFilter;
@@ -34,15 +34,21 @@ import org.springframework.mock.web.server.MockServerWebExchange;
public class TraceRequestHttpHeadersFilterTests {
+ StrictCurrentTraceContext currentTraceContext = StrictCurrentTraceContext.create();
+
ArrayListSpanReporter reporter = new ArrayListSpanReporter();
- Tracing tracing = Tracing.newBuilder()
- .currentTraceContext(ThreadLocalCurrentTraceContext.newBuilder()
- .addScopeDecorator(StrictScopeDecorator.create()).build())
+ Tracing tracing = Tracing.newBuilder().currentTraceContext(this.currentTraceContext)
.spanReporter(this.reporter).build();
HttpTracing httpTracing = HttpTracing.newBuilder(this.tracing).build();
+ @AfterEach
+ public void close() {
+ this.tracing.close();
+ this.currentTraceContext.close();
+ }
+
@Test
public void should_override_span_tracing_headers() {
HttpHeadersFilter filter = TraceRequestHttpHeadersFilter.create(this.httpTracing);
diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/TraceResponseHttpHeadersFilterTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/TraceResponseHttpHeadersFilterTests.java
index 1d0296343..7ae0ede25 100644
--- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/TraceResponseHttpHeadersFilterTests.java
+++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/TraceResponseHttpHeadersFilterTests.java
@@ -18,9 +18,9 @@ package org.springframework.cloud.sleuth.instrument.web.client;
import brave.Tracing;
import brave.http.HttpTracing;
-import brave.propagation.StrictScopeDecorator;
-import brave.propagation.ThreadLocalCurrentTraceContext;
+import brave.propagation.StrictCurrentTraceContext;
import org.assertj.core.api.BDDAssertions;
+import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import org.springframework.cloud.gateway.filter.headers.HttpHeadersFilter;
@@ -31,15 +31,21 @@ import org.springframework.mock.web.server.MockServerWebExchange;
public class TraceResponseHttpHeadersFilterTests {
+ StrictCurrentTraceContext currentTraceContext = StrictCurrentTraceContext.create();
+
ArrayListSpanReporter reporter = new ArrayListSpanReporter();
- Tracing tracing = Tracing.newBuilder()
- .currentTraceContext(ThreadLocalCurrentTraceContext.newBuilder()
- .addScopeDecorator(StrictScopeDecorator.create()).build())
+ Tracing tracing = Tracing.newBuilder().currentTraceContext(this.currentTraceContext)
.spanReporter(this.reporter).build();
HttpTracing httpTracing = HttpTracing.newBuilder(this.tracing).build();
+ @AfterEach
+ public void close() {
+ this.tracing.close();
+ this.currentTraceContext.close();
+ }
+
@Test
public void should_not_report_span_when_no_span_was_present_in_attribute() {
HttpHeadersFilter filter = TraceResponseHttpHeadersFilter
diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/TraceRestTemplateInterceptorIntegrationTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/TraceRestTemplateInterceptorIntegrationTests.java
index a8d571dfd..bf0ab8dcf 100644
--- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/TraceRestTemplateInterceptorIntegrationTests.java
+++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/TraceRestTemplateInterceptorIntegrationTests.java
@@ -24,8 +24,7 @@ import brave.Span;
import brave.Tracer;
import brave.Tracing;
import brave.http.HttpTracing;
-import brave.propagation.StrictScopeDecorator;
-import brave.propagation.ThreadLocalCurrentTraceContext;
+import brave.propagation.StrictCurrentTraceContext;
import brave.spring.web.TracingClientHttpRequestInterceptor;
import okhttp3.mockwebserver.MockResponse;
import okhttp3.mockwebserver.MockWebServer;
@@ -60,11 +59,11 @@ public class TraceRestTemplateInterceptorIntegrationTests {
mockWebServer.close();
}
+ StrictCurrentTraceContext currentTraceContext = StrictCurrentTraceContext.create();
+
ArrayListSpanReporter reporter = new ArrayListSpanReporter();
- Tracing tracing = Tracing.newBuilder()
- .currentTraceContext(ThreadLocalCurrentTraceContext.newBuilder()
- .addScopeDecorator(StrictScopeDecorator.create()).build())
+ Tracing tracing = Tracing.newBuilder().currentTraceContext(this.currentTraceContext)
.spanReporter(this.reporter).build();
Tracer tracer = this.tracing.tracer();
@@ -80,7 +79,8 @@ public class TraceRestTemplateInterceptorIntegrationTests {
@AfterEach
public void clean() {
- Tracing.current().close();
+ this.tracing.close();
+ this.currentTraceContext.close();
}
// Issue #198
diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/feign/FeignRetriesTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/feign/FeignRetriesTests.java
index 4854dba5e..fdf6c1d2a 100644
--- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/feign/FeignRetriesTests.java
+++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/feign/FeignRetriesTests.java
@@ -23,8 +23,7 @@ import java.util.concurrent.atomic.AtomicInteger;
import brave.Tracing;
import brave.http.HttpTracing;
-import brave.propagation.StrictScopeDecorator;
-import brave.propagation.ThreadLocalCurrentTraceContext;
+import brave.propagation.StrictCurrentTraceContext;
import feign.Client;
import feign.Feign;
import feign.FeignException;
@@ -69,11 +68,11 @@ public class FeignRetriesTests {
@Mock(lenient = true)
BeanFactory beanFactory;
+ StrictCurrentTraceContext currentTraceContext = StrictCurrentTraceContext.create();
+
ArrayListSpanReporter reporter = new ArrayListSpanReporter();
- Tracing tracing = Tracing.newBuilder()
- .currentTraceContext(ThreadLocalCurrentTraceContext.newBuilder()
- .addScopeDecorator(StrictScopeDecorator.create()).build())
+ Tracing tracing = Tracing.newBuilder().currentTraceContext(this.currentTraceContext)
.spanReporter(this.reporter).build();
HttpTracing httpTracing = HttpTracing.newBuilder(this.tracing).build();
@@ -85,6 +84,12 @@ public class FeignRetriesTests {
.willReturn(this.httpTracing);
}
+ @AfterEach
+ public void close() {
+ this.tracing.close();
+ this.currentTraceContext.close();
+ }
+
@Test
public void testRetriedWhenExceededNumberOfRetries() {
Client client = (request, options) -> {
diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/feign/TraceFeignAspectTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/feign/TraceFeignAspectTests.java
index 22e4f9062..0fbe4c251 100644
--- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/feign/TraceFeignAspectTests.java
+++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/feign/TraceFeignAspectTests.java
@@ -16,14 +16,12 @@
package org.springframework.cloud.sleuth.instrument.web.client.feign;
-import java.io.IOException;
-
import brave.Tracing;
import brave.http.HttpTracing;
-import brave.propagation.StrictScopeDecorator;
-import brave.propagation.ThreadLocalCurrentTraceContext;
+import brave.propagation.StrictCurrentTraceContext;
import feign.Client;
import org.aspectj.lang.ProceedingJoinPoint;
+import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -51,9 +49,9 @@ public class TraceFeignAspectTests {
@Mock
ProceedingJoinPoint pjp;
- Tracing tracing = Tracing.newBuilder()
- .currentTraceContext(ThreadLocalCurrentTraceContext.newBuilder()
- .addScopeDecorator(StrictScopeDecorator.create()).build())
+ StrictCurrentTraceContext currentTraceContext = StrictCurrentTraceContext.create();
+
+ Tracing tracing = Tracing.newBuilder().currentTraceContext(currentTraceContext)
.build();
HttpTracing httpTracing = HttpTracing.newBuilder(this.tracing).build();
@@ -64,13 +62,18 @@ public class TraceFeignAspectTests {
public void setup() {
this.traceFeignAspect = new TraceFeignAspect(this.beanFactory) {
@Override
- Object executeTraceFeignClient(Object bean, ProceedingJoinPoint pjp)
- throws IOException {
+ Object executeTraceFeignClient(Object bean, ProceedingJoinPoint pjp) {
return null;
}
};
}
+ @AfterEach
+ public void close() {
+ this.tracing.close();
+ this.currentTraceContext.close();
+ }
+
@Test
public void should_wrap_feign_client_in_trace_representation() throws Throwable {
given(this.pjp.getTarget()).willReturn(this.client);
diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/feign/TracingFeignClientTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/feign/TracingFeignClientTests.java
index 18b48b28e..8742bdce8 100644
--- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/feign/TracingFeignClientTests.java
+++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/feign/TracingFeignClientTests.java
@@ -25,11 +25,11 @@ import brave.Span;
import brave.Tracer;
import brave.Tracing;
import brave.http.HttpTracing;
-import brave.propagation.StrictScopeDecorator;
-import brave.propagation.ThreadLocalCurrentTraceContext;
+import brave.propagation.StrictCurrentTraceContext;
import feign.Client;
import feign.Request;
import org.assertj.core.api.BDDAssertions;
+import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -49,11 +49,11 @@ public class TracingFeignClientTests {
Request.Options options = new Request.Options();
+ StrictCurrentTraceContext currentTraceContext = StrictCurrentTraceContext.create();
+
List spans = new ArrayList<>();
- Tracing tracing = Tracing.newBuilder()
- .currentTraceContext(ThreadLocalCurrentTraceContext.newBuilder()
- .addScopeDecorator(StrictScopeDecorator.create()).build())
+ Tracing tracing = Tracing.newBuilder().currentTraceContext(currentTraceContext)
.spanReporter(spans::add).build();
Tracer tracer = this.tracing.tracer();
@@ -70,6 +70,12 @@ public class TracingFeignClientTests {
this.traceFeignClient = TracingFeignClient.create(this.httpTracing, this.client);
}
+ @AfterEach
+ public void close() {
+ this.tracing.close();
+ this.currentTraceContext.close();
+ }
+
@Test
public void should_log_cr_when_response_successful() throws IOException {
Span span = this.tracer.nextSpan().name("foo");
diff --git a/spring-cloud-sleuth-dependencies/pom.xml b/spring-cloud-sleuth-dependencies/pom.xml
index 577a90b37..ac72122a5 100644
--- a/spring-cloud-sleuth-dependencies/pom.xml
+++ b/spring-cloud-sleuth-dependencies/pom.xml
@@ -31,8 +31,8 @@
spring-cloud-sleuth-dependencies
Spring Cloud Sleuth Dependencies
- 5.10.2
- 0.35.1
+ 5.11.0
+ 0.36.0
3.4.1
diff --git a/tests/spring-cloud-sleuth-instrumentation-feign-tests/src/test/java/org/springframework/cloud/sleuth/instrument/feign/issues/issue1125/ManuallyCreatedLoadBalancerFeignClientTests.java b/tests/spring-cloud-sleuth-instrumentation-feign-tests/src/test/java/org/springframework/cloud/sleuth/instrument/feign/issues/issue1125/ManuallyCreatedLoadBalancerFeignClientTests.java
index ae6a65780..e41fdca1e 100644
--- a/tests/spring-cloud-sleuth-instrumentation-feign-tests/src/test/java/org/springframework/cloud/sleuth/instrument/feign/issues/issue1125/ManuallyCreatedLoadBalancerFeignClientTests.java
+++ b/tests/spring-cloud-sleuth-instrumentation-feign-tests/src/test/java/org/springframework/cloud/sleuth/instrument/feign/issues/issue1125/ManuallyCreatedLoadBalancerFeignClientTests.java
@@ -21,7 +21,6 @@ import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.List;
-import brave.Tracing;
import brave.http.HttpRequest;
import brave.sampler.Sampler;
import brave.sampler.SamplerFunction;
@@ -66,9 +65,6 @@ public class ManuallyCreatedLoadBalancerFeignClientTests {
@Autowired
MyBlockingClient myClient;
- @Autowired
- Tracing tracer;
-
@BeforeEach
public void open() {
this.reporter.clear();
diff --git a/tests/spring-cloud-sleuth-instrumentation-feign-tests/src/test/java/org/springframework/cloud/sleuth/instrument/feign/issues/issue502/Issue502Tests.java b/tests/spring-cloud-sleuth-instrumentation-feign-tests/src/test/java/org/springframework/cloud/sleuth/instrument/feign/issues/issue502/Issue502Tests.java
index f89846298..4103e4f1f 100644
--- a/tests/spring-cloud-sleuth-instrumentation-feign-tests/src/test/java/org/springframework/cloud/sleuth/instrument/feign/issues/issue502/Issue502Tests.java
+++ b/tests/spring-cloud-sleuth-instrumentation-feign-tests/src/test/java/org/springframework/cloud/sleuth/instrument/feign/issues/issue502/Issue502Tests.java
@@ -20,7 +20,6 @@ import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.List;
-import brave.Tracing;
import brave.http.HttpRequest;
import brave.sampler.Sampler;
import brave.sampler.SamplerFunction;
@@ -71,9 +70,6 @@ public class Issue502Tests {
@Autowired
ArrayListSpanReporter reporter;
- @Autowired
- Tracing tracer;
-
@BeforeEach
public void open() {
this.reporter.clear();
diff --git a/tests/spring-cloud-sleuth-instrumentation-messaging-tests/src/test/java/org/springframework/cloud/sleuth/instrument/messaging/ITTracingChannelInterceptorTests.java b/tests/spring-cloud-sleuth-instrumentation-messaging-tests/src/test/java/org/springframework/cloud/sleuth/instrument/messaging/ITTracingChannelInterceptorTests.java
index 0ecaf3292..b582ff22f 100644
--- a/tests/spring-cloud-sleuth-instrumentation-messaging-tests/src/test/java/org/springframework/cloud/sleuth/instrument/messaging/ITTracingChannelInterceptorTests.java
+++ b/tests/spring-cloud-sleuth-instrumentation-messaging-tests/src/test/java/org/springframework/cloud/sleuth/instrument/messaging/ITTracingChannelInterceptorTests.java
@@ -26,8 +26,7 @@ import javax.annotation.PreDestroy;
import brave.Span;
import brave.Tracer;
import brave.Tracing;
-import brave.propagation.StrictScopeDecorator;
-import brave.propagation.ThreadLocalCurrentTraceContext;
+import brave.propagation.StrictCurrentTraceContext;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -73,12 +72,6 @@ public class ITTracingChannelInterceptorTests implements MessageHandler {
@Autowired
Tracer tracer;
- @Autowired
- List spans;
-
- @Autowired
- MessagingTemplate messagingTemplate;
-
Message> message;
Span currentSpan;
@@ -151,11 +144,14 @@ public class ITTracingChannelInterceptorTests implements MessageHandler {
return new ArrayList<>();
}
+ @Bean
+ StrictCurrentTraceContext currentTraceContext() {
+ return StrictCurrentTraceContext.create();
+ }
+
@Bean
Tracing tracing() {
- return Tracing.newBuilder()
- .currentTraceContext(ThreadLocalCurrentTraceContext.newBuilder()
- .addScopeDecorator(StrictScopeDecorator.create()).build())
+ return Tracing.newBuilder().currentTraceContext(currentTraceContext())
.spanReporter(spans()::add).build();
}
diff --git a/tests/spring-cloud-sleuth-instrumentation-mvc-tests/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterWebIntegrationTests.java b/tests/spring-cloud-sleuth-instrumentation-mvc-tests/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterWebIntegrationTests.java
index fee0fc3a9..7fc7da351 100644
--- a/tests/spring-cloud-sleuth-instrumentation-mvc-tests/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterWebIntegrationTests.java
+++ b/tests/spring-cloud-sleuth-instrumentation-mvc-tests/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterWebIntegrationTests.java
@@ -22,9 +22,9 @@ import java.util.List;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
-import brave.Tracing;
import brave.http.HttpRequest;
import brave.http.HttpRequestParser;
+import brave.propagation.CurrentTraceContext;
import brave.sampler.Sampler;
import brave.sampler.SamplerFunction;
import org.apache.commons.logging.Log;
@@ -65,6 +65,9 @@ import static org.assertj.core.api.BDDAssertions.then;
@ExtendWith(OutputCaptureExtension.class)
public class TraceFilterWebIntegrationTests {
+ @Autowired
+ CurrentTraceContext currentTraceContext;
+
@Autowired
BlockingQueueSpanReporter reporter;
@@ -85,7 +88,7 @@ public class TraceFilterWebIntegrationTests {
new RestTemplate().getForObject("http://localhost:" + port() + "/good",
String.class);
- then(Tracing.current().tracer().currentSpan()).isNull();
+ then(this.currentTraceContext.get()).isNull();
then(this.reporter.takeSpan().tags()).containsKey("http.url");
}
@@ -99,7 +102,7 @@ public class TraceFilterWebIntegrationTests {
catch (Exception e) {
}
- then(Tracing.current().tracer().currentSpan()).isNull();
+ then(this.currentTraceContext.get()).isNull();
Span fromFirstTraceFilterFlow = this.reporter.takeSpan();
then(fromFirstTraceFilterFlow.tags()).containsEntry("http.method", "GET")
.containsEntry("mvc.controller.class", "ExceptionThrowingController")
@@ -130,7 +133,7 @@ public class TraceFilterWebIntegrationTests {
catch (HttpClientErrorException e) {
}
- then(Tracing.current().tracer().currentSpan()).isNull();
+ then(this.currentTraceContext.get()).isNull();
Span span = this.reporter.takeSpan();
then(span.kind().ordinal()).isEqualTo(Span.Kind.SERVER.ordinal());
then(span.tags()).containsEntry("http.status_code", "400");
diff --git a/tests/spring-cloud-sleuth-instrumentation-mvc-tests/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/RestTemplateTraceAspectIntegrationTests.java b/tests/spring-cloud-sleuth-instrumentation-mvc-tests/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/RestTemplateTraceAspectIntegrationTests.java
index 981a15da4..1771f08f0 100644
--- a/tests/spring-cloud-sleuth-instrumentation-mvc-tests/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/RestTemplateTraceAspectIntegrationTests.java
+++ b/tests/spring-cloud-sleuth-instrumentation-mvc-tests/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/RestTemplateTraceAspectIntegrationTests.java
@@ -22,6 +22,7 @@ import java.util.concurrent.ExecutionException;
import java.util.stream.Collectors;
import brave.Tracing;
+import brave.propagation.CurrentTraceContext;
import brave.sampler.Sampler;
import brave.spring.web.TracingAsyncClientHttpRequestInterceptor;
import org.awaitility.Awaitility;
@@ -73,6 +74,9 @@ public class RestTemplateTraceAspectIntegrationTests {
@Autowired
AspectTestingController controller;
+ @Autowired
+ CurrentTraceContext currentTraceContext;
+
@Autowired
Tracing tracer;
@@ -139,7 +143,7 @@ public class RestTemplateTraceAspectIntegrationTests {
throws Exception {
whenARequestIsSentToASyncEndpointThatShouldBeFilteredOut();
- then(Tracing.current().tracer().currentSpan()).isNull();
+ then(this.currentTraceContext.get()).isNull();
then(this.reporter.getSpans()).isEmpty();
}
diff --git a/tests/spring-cloud-sleuth-instrumentation-mvc-tests/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/exceptionresolver/Issue585Tests.java b/tests/spring-cloud-sleuth-instrumentation-mvc-tests/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/exceptionresolver/Issue585Tests.java
index 684bfa132..623328967 100644
--- a/tests/spring-cloud-sleuth-instrumentation-mvc-tests/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/exceptionresolver/Issue585Tests.java
+++ b/tests/spring-cloud-sleuth-instrumentation-mvc-tests/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/exceptionresolver/Issue585Tests.java
@@ -22,6 +22,7 @@ import javax.servlet.http.HttpServletRequest;
import brave.Span;
import brave.Tracing;
+import brave.propagation.CurrentTraceContext;
import brave.sampler.Sampler;
import com.fasterxml.jackson.annotation.JsonInclude;
import org.junit.jupiter.api.Test;
@@ -53,6 +54,9 @@ public class Issue585Tests {
TestRestTemplate testRestTemplate = new TestRestTemplate();
+ @Autowired
+ CurrentTraceContext currentTraceContext;
+
@Autowired
ArrayListSpanReporter reporter;
@@ -65,7 +69,7 @@ public class Issue585Tests {
"http://localhost:" + this.port + "/sleuthtest?greeting=foo",
String.class);
- then(Tracing.current().tracer().currentSpan()).isNull();
+ then(this.currentTraceContext.get()).isNull();
then(entity.getStatusCode().value()).isEqualTo(500);
then(this.reporter.getSpans().get(0).tags()).containsEntry("custom", "tag")
.containsKeys("error");
diff --git a/tests/spring-cloud-sleuth-instrumentation-reactor-tests/src/test/java/org/springframework/cloud/sleuth/instrument/reactor/ScopePassingSpanSubscriberTests.java b/tests/spring-cloud-sleuth-instrumentation-reactor-tests/src/test/java/org/springframework/cloud/sleuth/instrument/reactor/ScopePassingSpanSubscriberTests.java
index 7f133d6b5..c5d89046b 100644
--- a/tests/spring-cloud-sleuth-instrumentation-reactor-tests/src/test/java/org/springframework/cloud/sleuth/instrument/reactor/ScopePassingSpanSubscriberTests.java
+++ b/tests/spring-cloud-sleuth-instrumentation-reactor-tests/src/test/java/org/springframework/cloud/sleuth/instrument/reactor/ScopePassingSpanSubscriberTests.java
@@ -18,8 +18,8 @@ package org.springframework.cloud.sleuth.instrument.reactor;
import java.util.Objects;
-import brave.propagation.CurrentTraceContext;
import brave.propagation.CurrentTraceContext.Scope;
+import brave.propagation.StrictCurrentTraceContext;
import brave.propagation.TraceContext;
import org.assertj.core.presentation.StandardRepresentation;
import org.junit.jupiter.api.AfterEach;
@@ -46,7 +46,7 @@ public class ScopePassingSpanSubscriberTests {
Objects::toString);
}
- final CurrentTraceContext currentTraceContext = CurrentTraceContext.Default.create();
+ StrictCurrentTraceContext currentTraceContext = StrictCurrentTraceContext.create();
TraceContext context = TraceContext.newBuilder().traceId(1).spanId(1).sampled(true)
.build();
@@ -59,6 +59,7 @@ public class ScopePassingSpanSubscriberTests {
@AfterEach
public void close() {
springContext.close();
+ currentTraceContext.close();
}
@Test
diff --git a/tests/spring-cloud-sleuth-instrumentation-reactor-tests/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/ITSpringConfiguredReactorClient.java b/tests/spring-cloud-sleuth-instrumentation-reactor-tests/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/ITSpringConfiguredReactorClient.java
index 9121994b5..6976a9e39 100644
--- a/tests/spring-cloud-sleuth-instrumentation-reactor-tests/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/ITSpringConfiguredReactorClient.java
+++ b/tests/spring-cloud-sleuth-instrumentation-reactor-tests/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/ITSpringConfiguredReactorClient.java
@@ -19,6 +19,7 @@ package org.springframework.cloud.sleuth.instrument.web.client;
import java.net.URI;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
+import java.util.function.BiConsumer;
import brave.http.HttpTracing;
import brave.propagation.CurrentTraceContext;
@@ -35,7 +36,7 @@ import org.reactivestreams.Subscription;
import reactor.core.publisher.BaseSubscriber;
import reactor.core.publisher.Mono;
import reactor.netty.http.client.HttpClient;
-import zipkin2.Callback;
+import zipkin2.Span;
import org.springframework.cloud.sleuth.instrument.reactor.TraceReactorAutoConfigurationAccessorConfiguration;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
@@ -108,8 +109,8 @@ abstract class ITSpringConfiguredReactorClient
}
@Override
- final protected void getAsync(AnnotationConfigApplicationContext context, String path,
- Callback callback) {
+ final protected void get(AnnotationConfigApplicationContext context, String path,
+ BiConsumer callback) {
TestHttpCallbackSubscriber.subscribe(getMono(context, path), callback);
}
@@ -169,7 +170,7 @@ abstract class ITSpringConfiguredReactorClient
assertThat(server.getRequestCount()).isOne();
- takeClientSpanWithError("CANCELLED");
+ reporter.takeRemoteSpanWithError(Span.Kind.CLIENT, "CANCELLED");
}
}
diff --git a/tests/spring-cloud-sleuth-instrumentation-reactor-tests/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/TestHttpCallbackSubscriber.java b/tests/spring-cloud-sleuth-instrumentation-reactor-tests/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/TestHttpCallbackSubscriber.java
index 196533dc6..7973eb0db 100644
--- a/tests/spring-cloud-sleuth-instrumentation-reactor-tests/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/TestHttpCallbackSubscriber.java
+++ b/tests/spring-cloud-sleuth-instrumentation-reactor-tests/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/TestHttpCallbackSubscriber.java
@@ -17,6 +17,7 @@
package org.springframework.cloud.sleuth.instrument.web.client;
import java.util.concurrent.atomic.AtomicReference;
+import java.util.function.BiConsumer;
import org.reactivestreams.Subscription;
import reactor.core.CoreSubscriber;
@@ -36,15 +37,15 @@ import zipkin2.Callback;
*/
final class TestHttpCallbackSubscriber implements CoreSubscriber {
- static void subscribe(Mono mono, Callback callback) {
+ static void subscribe(Mono mono, BiConsumer callback) {
mono.subscribe(new TestHttpCallbackSubscriber(callback));
}
- final Callback callback;
+ final BiConsumer callback;
final AtomicReference ref = new AtomicReference<>();
- private TestHttpCallbackSubscriber(Callback callback) {
+ private TestHttpCallbackSubscriber(BiConsumer callback) {
this.callback = callback;
}
@@ -56,31 +57,31 @@ final class TestHttpCallbackSubscriber implements CoreSubscriber {
else {
// We don't intentionally call subscribe() multiple times in our tests. If we
// reach here, possibly instrumentation is redundantly subscribing.
- callback.onError(new AssertionError("onSubscribe() called twice!"));
+ callback.accept(null, new AssertionError("onSubscribe() called twice!"));
}
}
@Override
public void onNext(Integer t) {
if (ref.getAndSet(null) != null) {
- callback.onSuccess(t);
+ callback.accept(t, null);
}
else {
// This is a Mono, which doesn't signal onNext() twice. If we reach here,
// possibly instrumentation is signaling twice.
- callback.onError(new AssertionError("onNext() called twice!"));
+ callback.accept(null, new AssertionError("onNext() called twice!"));
}
}
@Override
public void onError(Throwable t) {
if (ref.getAndSet(null) != null) {
- callback.onError(t);
+ callback.accept(null, t);
}
else {
// We don't expect onError() to signal twice. If we reach here, possibly
// instrumentation is signaling twice or onSuccess() threw an exception.
- callback.onError(new AssertionError("onError() called twice: " + t, t));
+ callback.accept(null, new AssertionError("onError() called twice: " + t, t));
}
}
@@ -90,7 +91,8 @@ final class TestHttpCallbackSubscriber implements CoreSubscriber {
// Tests make a non-empty Mono subscription, which should not signal
// onComplete() before onNext(). If we reach here, possibly instrumentation
// is not signaling onNext() when it should.
- callback.onError(new AssertionError("onComplete() called before onNext!"));
+ callback.accept(null,
+ new AssertionError("onComplete() called before onNext!"));
}
}
diff --git a/tests/spring-cloud-sleuth-instrumentation-rxjava-tests/src/test/java/org/springframework/cloud/sleuth/instrument/rxjava/SleuthRxJavaSchedulersHookTests.java b/tests/spring-cloud-sleuth-instrumentation-rxjava-tests/src/test/java/org/springframework/cloud/sleuth/instrument/rxjava/SleuthRxJavaSchedulersHookTests.java
index a945c08e7..df8e65801 100644
--- a/tests/spring-cloud-sleuth-instrumentation-rxjava-tests/src/test/java/org/springframework/cloud/sleuth/instrument/rxjava/SleuthRxJavaSchedulersHookTests.java
+++ b/tests/spring-cloud-sleuth-instrumentation-rxjava-tests/src/test/java/org/springframework/cloud/sleuth/instrument/rxjava/SleuthRxJavaSchedulersHookTests.java
@@ -28,8 +28,7 @@ import java.util.concurrent.ThreadFactory;
import brave.Tracer;
import brave.Tracing;
-import brave.propagation.StrictScopeDecorator;
-import brave.propagation.ThreadLocalCurrentTraceContext;
+import brave.propagation.StrictCurrentTraceContext;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -52,11 +51,11 @@ public class SleuthRxJavaSchedulersHookTests {
List threadsToIgnore = new ArrayList<>();
+ StrictCurrentTraceContext currentTraceContext = StrictCurrentTraceContext.create();
+
ArrayListSpanReporter reporter = new ArrayListSpanReporter();
- Tracing tracing = Tracing.newBuilder()
- .currentTraceContext(ThreadLocalCurrentTraceContext.newBuilder()
- .addScopeDecorator(StrictScopeDecorator.create()).build())
+ Tracing tracing = Tracing.newBuilder().currentTraceContext(this.currentTraceContext)
.spanReporter(this.reporter).build();
Tracer tracer = this.tracing.tracer();
@@ -65,6 +64,7 @@ public class SleuthRxJavaSchedulersHookTests {
public void clean() {
this.tracing.close();
this.reporter.clear();
+ this.currentTraceContext.close();
}
@BeforeEach