From 6fe46bf062e88f42511a4112689e686e381a6fcf Mon Sep 17 00:00:00 2001 From: Adrian Cole Date: Fri, 3 Apr 2020 08:01:22 +0800 Subject: [PATCH] Updates to latest brave and removes all static thread local use (#1594) --- benchmarks/pom.xml | 2 +- pom.xml | 2 +- spring-cloud-sleuth-core/pom.xml | 2 +- ...gurationPropagationCustomizationTests.java | 4 +- .../SpringCloudSleuthDocTests.java | 16 +++-- .../async/ExecutorBeanPostProcessorTests.java | 7 +- ...LazyTraceThreadPoolTaskSchedulerTests.java | 17 +++-- .../async/TraceAsyncAspectTest.java | 16 +++-- .../TraceAsyncListenableTaskExecutorTest.java | 16 +++-- .../instrument/async/TraceCallableTests.java | 12 ++-- .../instrument/async/TraceRunnableTests.java | 12 ++-- .../async/TraceableExecutorServiceTests.java | 24 +++---- ...TraceableScheduledExecutorServiceTest.java | 16 +++-- .../SleuthHystrixConcurrencyStrategyTest.java | 10 +-- .../instrument/hystrix/TraceCommandTests.java | 16 +++-- .../ITTracingChannelInterceptorTests.java | 12 ++-- .../TracingChannelInterceptorTest.java | 25 +++---- .../SleuthRxJavaSchedulersHookTests.java | 10 +-- .../web/SleuthHttpClientParserTests.java | 5 +- .../instrument/web/TraceFilterTests.java | 68 +++++++++---------- .../web/TraceFilterWebIntegrationTests.java | 10 +-- .../TraceRestTemplateInterceptorTests.java | 17 +++-- ...stTemplateTraceAspectIntegrationTests.java | 6 +- .../TraceRequestHttpHeadersFilterTests.java | 16 +++-- .../TraceResponseHttpHeadersFilterTests.java | 16 +++-- ...stTemplateInterceptorIntegrationTests.java | 12 ++-- .../exceptionresolver/Issue585Tests.java | 6 +- .../web/client/feign/FeignRetriesTests.java | 15 ++-- .../client/feign/TraceFeignAspectTests.java | 21 +++--- .../client/feign/TracingFeignClientTests.java | 16 +++-- .../feign/TracingFeignObjectWrapperTests.java | 12 ---- .../feign/issues/issue502/Issue502Tests.java | 4 -- .../zuul/TracePostZuulFilterTests.java | 12 ++-- spring-cloud-sleuth-dependencies/pom.xml | 1 + .../feign/issues/issueX/IssueXTests.java | 4 -- 35 files changed, 259 insertions(+), 201 deletions(-) diff --git a/benchmarks/pom.xml b/benchmarks/pom.xml index 8e261e11a..87c2b141a 100644 --- a/benchmarks/pom.xml +++ b/benchmarks/pom.xml @@ -34,7 +34,7 @@ 1.8 1.8 2.1.10.RELEASE - 5.10.1 + 5.11.0 3.11.0 diff --git a/pom.xml b/pom.xml index 36ed55eed..d527d8009 100644 --- a/pom.xml +++ b/pom.xml @@ -264,7 +264,7 @@ Fishtown.SR4 2.1.6.BUILD-SNAPSHOT 2.1.6.BUILD-SNAPSHOT - 5.10.1 + 5.11.0 2.1.2.RELEASE diff --git a/spring-cloud-sleuth-core/pom.xml b/spring-cloud-sleuth-core/pom.xml index 8f23c9d5e..6d48c2e77 100644 --- a/spring-cloud-sleuth-core/pom.xml +++ b/spring-cloud-sleuth-core/pom.xml @@ -195,7 +195,7 @@ io.zipkin.brave - brave-context-log4j2 + brave-context-slf4j io.zipkin.brave 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 29dd0cfeb..c7f7155b7 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 0742a15dc..e041f966a 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.After; import org.junit.Before; import org.junit.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(); } + @After + 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/ExecutorBeanPostProcessorTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/ExecutorBeanPostProcessorTests.java index 3503b61f9..19f7992b4 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/ExecutorBeanPostProcessorTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/ExecutorBeanPostProcessorTests.java @@ -32,6 +32,7 @@ import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicBoolean; import brave.Tracing; +import brave.propagation.StrictCurrentTraceContext; import org.aopalliance.aop.Advice; import org.assertj.core.api.BDDAssertions; import org.junit.After; @@ -65,7 +66,10 @@ public class ExecutorBeanPostProcessorTests { @Mock BeanFactory beanFactory; - Tracing tracing = Tracing.newBuilder().build(); + StrictCurrentTraceContext currentTraceContext = StrictCurrentTraceContext.create(); + + Tracing tracing = Tracing.newBuilder().currentTraceContext(this.currentTraceContext) + .build(); private SleuthAsyncProperties sleuthAsyncProperties; @@ -79,6 +83,7 @@ public class ExecutorBeanPostProcessorTests { @After public void clear() { this.tracing.close(); + this.currentTraceContext.close(); } @Test 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 9c01b8ba5..3c927e6b5 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.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -43,9 +43,9 @@ import org.springframework.util.ErrorHandler; @RunWith(MockitoJUnitRunner.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 @@ -62,6 +62,13 @@ public class LazyTraceThreadPoolTaskSchedulerTests { this.delegate); } + @After + 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 d2d515ee7..b1bd8a492 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.After; import org.junit.Before; import org.junit.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(""); } + @After + 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 db3436719..18a2738df 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.After; import org.junit.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); + @After + 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 27504ddcb..bd281c17b 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.After; import org.junit.Test; import org.junit.runner.RunWith; @@ -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(); @After 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 e02ce484c..177540867 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.After; import org.junit.Test; import org.junit.runner.RunWith; @@ -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(); @After 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 0f89b44ba..4759f9f1a 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.After; import org.junit.Before; @@ -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 { } @After - public void tearDown() throws Exception { + public void close() { 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 6e5db5cc1..1e5dd9666 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.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -48,9 +48,9 @@ import static org.mockito.Mockito.never; @RunWith(MockitoJUnitRunner.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 @@ -67,6 +67,12 @@ public class TraceableScheduledExecutorServiceTest { beanFactory(); } + @After + 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/hystrix/SleuthHystrixConcurrencyStrategyTest.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/hystrix/SleuthHystrixConcurrencyStrategyTest.java index 19b99a176..5cd53ee51 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/hystrix/SleuthHystrixConcurrencyStrategyTest.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/hystrix/SleuthHystrixConcurrencyStrategyTest.java @@ -21,8 +21,7 @@ import java.util.concurrent.Callable; import java.util.concurrent.TimeUnit; import brave.Tracing; -import brave.propagation.StrictScopeDecorator; -import brave.propagation.ThreadLocalCurrentTraceContext; +import brave.propagation.StrictCurrentTraceContext; import com.netflix.hystrix.HystrixThreadPoolKey; import com.netflix.hystrix.HystrixThreadPoolProperties; import com.netflix.hystrix.strategy.HystrixPlugins; @@ -52,9 +51,9 @@ public class SleuthHystrixConcurrencyStrategyTest { 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) .spanReporter(this.reporter).build(); @Before @@ -62,6 +61,7 @@ public class SleuthHystrixConcurrencyStrategyTest { public void setup() { HystrixPlugins.reset(); this.reporter.clear(); + this.currentTraceContext.close(); } @Test diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/hystrix/TraceCommandTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/hystrix/TraceCommandTests.java index 272f56831..7d1834c62 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/hystrix/TraceCommandTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/hystrix/TraceCommandTests.java @@ -22,8 +22,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 brave.sampler.Sampler; import com.netflix.hystrix.HystrixCommand; import com.netflix.hystrix.HystrixCommandKey; @@ -31,6 +30,7 @@ import com.netflix.hystrix.HystrixCommandProperties; import com.netflix.hystrix.HystrixThreadPoolProperties; import com.netflix.hystrix.strategy.HystrixPlugins; import org.assertj.core.api.BDDAssertions; +import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -42,11 +42,11 @@ import static org.assertj.core.api.BDDAssertions.then; public class TraceCommandTests { + StrictCurrentTraceContext currentTraceContext = StrictCurrentTraceContext.create(); + ArrayListSpanReporter reporter = new ArrayListSpanReporter(); - Tracing tracing = Tracing.newBuilder() - .currentTraceContext(ThreadLocalCurrentTraceContext.newBuilder() - .addScopeDecorator(StrictScopeDecorator.create()).build()) + Tracing tracing = Tracing.newBuilder().currentTraceContext(currentTraceContext) .spanReporter(this.reporter).sampler(Sampler.ALWAYS_SAMPLE).build(); Tracer tracer = this.tracing.tracer(); @@ -57,6 +57,12 @@ public class TraceCommandTests { this.reporter.clear(); } + @After + public void close() { + this.tracing.close(); + this.currentTraceContext.close(); + } + @Test public void should_remove_span_from_thread_local_after_finishing_work() throws Exception { diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/messaging/ITTracingChannelInterceptorTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/messaging/ITTracingChannelInterceptorTests.java index 49ec34114..2df69e8b1 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/messaging/ITTracingChannelInterceptorTests.java +++ b/spring-cloud-sleuth-core/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.After; import org.junit.Before; import org.junit.Test; @@ -153,11 +152,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/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 93b8dafef..ca2b0a91d 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.After; import org.junit.Test; import zipkin2.Span; @@ -49,12 +48,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(); @@ -69,6 +70,12 @@ public class TracingChannelInterceptorTest { } }; + @After + public void close() { + this.tracing.close(); + this.currentTraceContext.close(); + } + @Test public void pollingReceive_emptyQueue() { this.channel.addInterceptor(consumerSideOnly(this.interceptor)); @@ -357,10 +364,4 @@ public class TracingChannelInterceptorTest { return new ExecutorSideOnly(); } - @After - 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/rxjava/SleuthRxJavaSchedulersHookTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/rxjava/SleuthRxJavaSchedulersHookTests.java index fe8c2529b..22eb3be4f 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/rxjava/SleuthRxJavaSchedulersHookTests.java +++ b/spring-cloud-sleuth-core/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.After; import org.junit.Before; import org.junit.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(); } @Before diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/SleuthHttpClientParserTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/SleuthHttpClientParserTests.java index 479d8c541..509b2c3e7 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/SleuthHttpClientParserTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/SleuthHttpClientParserTests.java @@ -23,6 +23,7 @@ import java.util.Map; import brave.SpanCustomizer; import brave.http.HttpClientAdapter; +import brave.propagation.TraceContext; import org.junit.Test; import static org.assertj.core.api.BDDAssertions.then; @@ -34,6 +35,8 @@ import static org.assertj.core.api.BDDAssertions.then; */ public class SleuthHttpClientParserTests { + private TraceContext context = TraceContext.newBuilder().traceId(1).spanId(2).build(); + private TraceKeys traceKeys = new TraceKeys(); private TestSpanCustomizer customizer = new TestSpanCustomizer(); @@ -73,7 +76,7 @@ public class SleuthHttpClientParserTests { public Integer statusCode(Object response) { return 200; } - }, null, this.customizer); + }, context, this.customizer); then(this.customizer.tags).containsEntry("http.user-agent", "Test") .containsEntry("http.accept", "'text/plain','text/xml'") diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterTests.java index 09498b586..fe8992d93 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterTests.java @@ -26,8 +26,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.sampler.Sampler; import brave.servlet.TracingFilter; import org.junit.After; @@ -61,11 +60,11 @@ public class TraceFilterTests { static final String SAMPLED_ID_NAME = "X-B3-Sampled"; static final String SPAN_FLAGS = "X-B3-Flags"; + 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(); @@ -101,7 +100,8 @@ public class TraceFilterTests { @After public void cleanup() { - Tracing.current().close(); + this.tracing.close(); + this.currentTraceContext.close(); } @Test @@ -111,14 +111,13 @@ public class TraceFilterTests { neverSampleFilter().doFilter(this.request, this.response, this.filterChain); - then(Tracing.current().tracer().currentSpan()).isNull(); + then(this.currentTraceContext.get()).isNull(); then(this.reporter.getSpans()).isEmpty(); } private Filter neverSampleFilter() { - 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) .supportsJoin(false).build(); HttpTracing httpTracing = HttpTracing.newBuilder(tracing) @@ -150,7 +149,7 @@ public class TraceFilterTests { this.response.setStatus(0); this.filter.doFilter(this.request, this.response, this.filterChain); - then(Tracing.current().tracer().currentSpan()).isNull(); + then(this.currentTraceContext.get()).isNull(); then(this.reporter.getSpans()).hasSize(1); then(this.reporter.getSpans().get(0).tags()) .doesNotContainKey("http.status_code"); @@ -165,7 +164,7 @@ public class TraceFilterTests { this.filter.doFilter(this.request, this.response, this.filterChain); - then(Tracing.current().tracer().currentSpan()).isNull(); + then(this.currentTraceContext.get()).isNull(); then(this.reporter.getSpans()).hasSize(1); then(this.reporter.getSpans().get(0).id()).isEqualTo(PARENT_ID); then(this.reporter.getSpans().get(0).tags()) @@ -187,7 +186,7 @@ public class TraceFilterTests { span.set(this.tracing.tracer().currentSpan()); }); - then(Tracing.current().tracer().currentSpan()).isNull(); + then(this.currentTraceContext.get()).isNull(); then(span.get().context().traceIdString()).isEqualTo(SpanUtil.idToHex(2L)); } @@ -197,7 +196,7 @@ public class TraceFilterTests { this.filter.doFilter(this.request, this.response, this.filterChain); - then(Tracing.current().tracer().currentSpan()).isNull(); + then(this.currentTraceContext.get()).isNull(); } @Test @@ -207,7 +206,7 @@ public class TraceFilterTests { this.filter.doFilter(this.request, this.response, this.filterChain); - then(Tracing.current().tracer().currentSpan()).isNull(); + then(this.currentTraceContext.get()).isNull(); then(this.reporter.getSpans()).hasSize(1); } @@ -217,7 +216,7 @@ public class TraceFilterTests { Span span = this.tracer.nextSpan().name("http:foo"); this.response.setStatus(404); - then(Tracing.current().tracer().currentSpan()).isNull(); + then(this.currentTraceContext.get()).isNull(); this.filter.doFilter(this.request, this.response, this.filterChain); } @@ -229,15 +228,14 @@ public class TraceFilterTests { this.filter.doFilter(this.request, this.response, this.filterChain); - then(Tracing.current().tracer().currentSpan()).isNull(); + then(this.currentTraceContext.get()).isNull(); verifyParentSpanHttpTags(); } @Test public void createsChildFromHeadersWhenJoinUnsupported() throws Exception { - Tracing tracing = Tracing.newBuilder() - .currentTraceContext(ThreadLocalCurrentTraceContext.newBuilder() - .addScopeDecorator(StrictScopeDecorator.create()).build()) + this.tracing.close(); + this.tracing = Tracing.newBuilder().currentTraceContext(this.currentTraceContext) .spanReporter(this.reporter).supportsJoin(false).build(); HttpTracing httpTracing = HttpTracing.create(tracing); this.request = builder().header(SPAN_ID_NAME, PARENT_ID) @@ -247,7 +245,7 @@ public class TraceFilterTests { TracingFilter.create(httpTracing).doFilter(this.request, this.response, this.filterChain); - then(Tracing.current().tracer().currentSpan()).isNull(); + then(this.currentTraceContext.get()).isNull(); then(this.reporter.getSpans()).hasSize(1); then(this.reporter.getSpans().get(0).parentId()).isEqualTo(PARENT_ID); } @@ -262,7 +260,7 @@ public class TraceFilterTests { this.filter.doFilter(this.request, this.response, this.filterChain); - then(Tracing.current().tracer().currentSpan()).isNull(); + then(this.currentTraceContext.get()).isNull(); then(this.reporter.getSpans()).hasSize(1); then(this.reporter.getSpans().get(0).tags()).containsEntry("http.x-foo", "bar"); } @@ -277,7 +275,7 @@ public class TraceFilterTests { this.request.addHeader("X-Foo", "spam"); this.filter.doFilter(this.request, this.response, this.filterChain); - then(Tracing.current().tracer().currentSpan()).isNull(); + then(this.currentTraceContext.get()).isNull(); then(this.reporter.getSpans()).hasSize(1); // We no longer support multi value headers then(this.reporter.getSpans().get(0).tags()).containsEntry("http.x-foo", "bar"); @@ -304,7 +302,7 @@ public class TraceFilterTests { assertThat(e.getMessage()).isEqualTo("Planned"); } - then(Tracing.current().tracer().currentSpan()).isNull(); + then(this.currentTraceContext.get()).isNull(); verifyParentSpanHttpTags(HttpStatus.INTERNAL_SERVER_ERROR); then(this.reporter.getSpans()).hasSize(1); then(this.reporter.getSpans().get(0).tags()).containsEntry("error", "Planned"); @@ -318,7 +316,7 @@ public class TraceFilterTests { this.response.setStatus(404); - then(Tracing.current().tracer().currentSpan()).isNull(); + then(this.currentTraceContext.get()).isNull(); this.filter.doFilter(this.request, this.response, this.filterChain); } @@ -331,7 +329,7 @@ public class TraceFilterTests { this.filter.doFilter(this.request, this.response, this.filterChain); - then(Tracing.current().tracer().currentSpan()).isNull(); + then(this.currentTraceContext.get()).isNull(); then(this.reporter.getSpans()).hasSize(1); } @@ -344,7 +342,7 @@ public class TraceFilterTests { this.filter.doFilter(this.request, this.response, this.filterChain); - then(Tracing.current().tracer().currentSpan()).isNull(); + then(this.currentTraceContext.get()).isNull(); then(this.reporter.getSpans()).hasSize(1); } @@ -356,7 +354,7 @@ public class TraceFilterTests { this.filter.doFilter(this.request, this.response, this.filterChain); - then(Tracing.current().tracer().currentSpan()).isNull(); + then(this.currentTraceContext.get()).isNull(); then(this.reporter.getSpans()).isNotEmpty(); then(this.response.getStatus()).isEqualTo(HttpStatus.OK.value()); } @@ -370,7 +368,7 @@ public class TraceFilterTests { this.filter.doFilter(this.request, this.response, this.filterChain); - then(Tracing.current().tracer().currentSpan()).isNull(); + then(this.currentTraceContext.get()).isNull(); then(this.reporter.getSpans()).isNotEmpty(); then(this.response.getStatus()).isEqualTo(HttpStatus.OK.value()); } @@ -383,7 +381,7 @@ public class TraceFilterTests { neverSampleFilter().doFilter(this.request, this.response, this.filterChain); - then(Tracing.current().tracer().currentSpan()).isNull(); + then(this.currentTraceContext.get()).isNull(); then(this.reporter.getSpans()).isNotEmpty(); } @@ -395,7 +393,7 @@ public class TraceFilterTests { this.filter.doFilter(this.request, this.response, this.filterChain); - then(Tracing.current().tracer().currentSpan()).isNull(); + then(this.currentTraceContext.get()).isNull(); then(this.reporter.getSpans()).isNotEmpty(); } @@ -408,7 +406,7 @@ public class TraceFilterTests { neverSampleFilter().doFilter(this.request, this.response, this.filterChain); - then(Tracing.current().tracer().currentSpan()).isNull(); + then(this.currentTraceContext.get()).isNull(); // It is ok to go without a trace ID, if sampling or debug is set then(this.reporter.getSpans()).hasSize(1).extracting("id") .isNotEqualTo(SpanUtil.idToHex(10L)); @@ -423,7 +421,7 @@ public class TraceFilterTests { neverSampleFilter().doFilter(this.request, this.response, this.filterChain); - then(Tracing.current().tracer().currentSpan()).isNull(); + then(this.currentTraceContext.get()).isNull(); then(this.reporter.getSpans()).isEmpty(); } @@ -436,7 +434,7 @@ public class TraceFilterTests { this.filter.doFilter(this.request, this.response, this.filterChain); - then(Tracing.current().tracer().currentSpan()).isNull(); + then(this.currentTraceContext.get()).isNull(); then(this.reporter.getSpans()).hasSize(1); then(this.reporter.getSpans().get(0).tags()) .containsEntry("http.url", "http://localhost/?foo=bar") @@ -453,7 +451,7 @@ public class TraceFilterTests { neverSampleFilter().doFilter(this.request, this.response, this.filterChain); - then(Tracing.current().tracer().currentSpan()).isNull(); + then(this.currentTraceContext.get()).isNull(); then(this.reporter.getSpans()).hasSize(1); then(this.reporter.getSpans().get(0).name()).isEqualTo("http:/"); } diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterWebIntegrationTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterWebIntegrationTests.java index 0e480a9e1..cc5baefbb 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterWebIntegrationTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterWebIntegrationTests.java @@ -22,8 +22,8 @@ import java.util.List; import java.util.regex.Pattern; import java.util.stream.Collectors; -import brave.Tracing; import brave.http.HttpRequest; +import brave.propagation.CurrentTraceContext; import brave.sampler.Sampler; import brave.sampler.SamplerFunction; import org.assertj.core.api.BDDAssertions; @@ -66,10 +66,10 @@ public class TraceFilterWebIntegrationTests { public OutputCapture capture = new OutputCapture(); @Autowired - Tracing tracer; + ArrayListSpanReporter accumulator; @Autowired - ArrayListSpanReporter accumulator; + CurrentTraceContext currentTraceContext; @Autowired @HttpServerSampler @@ -94,7 +94,7 @@ public class TraceFilterWebIntegrationTests { catch (Exception e) { } - then(Tracing.current().tracer().currentSpan()).isNull(); + then(this.currentTraceContext.get()).isNull(); then(this.accumulator.getSpans()).hasSize(1); Span fromFirstTraceFilterFlow = this.accumulator.getSpans().get(0); then(fromFirstTraceFilterFlow.tags()).containsEntry("http.status_code", "500") @@ -122,7 +122,7 @@ public class TraceFilterWebIntegrationTests { catch (HttpClientErrorException e) { } - then(Tracing.current().tracer().currentSpan()).isNull(); + then(this.currentTraceContext.get()).isNull(); then(this.accumulator.getSpans()).hasSize(1); then(this.accumulator.getSpans().get(0).kind().ordinal()) .isEqualTo(Span.Kind.SERVER.ordinal()); 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 15ef1cd65..b46d08d69 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 @@ -25,8 +25,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.sampler.Sampler; import brave.spring.web.TracingClientHttpRequestInterceptor; import org.apache.commons.lang3.StringUtils; @@ -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(); @@ -86,7 +85,8 @@ public class TraceRestTemplateInterceptorTests { @After public void clean() { - Tracing.current().close(); + this.tracing.close(); + this.currentTraceContext.close(); } @Test @@ -141,9 +141,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/RestTemplateTraceAspectIntegrationTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/RestTemplateTraceAspectIntegrationTests.java index 2ff980bc4..5f0538da0 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/RestTemplateTraceAspectIntegrationTests.java +++ b/spring-cloud-sleuth-core/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.junit.After; @@ -72,6 +73,9 @@ public class RestTemplateTraceAspectIntegrationTests { @Autowired AspectTestingController controller; + @Autowired + CurrentTraceContext currentTraceContext; + @Autowired Tracing tracer; @@ -138,7 +142,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/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 f5459fcec..5dcf20705 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.After; import org.junit.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(); + @After + 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 ee2010180..8e75d98e4 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.After; import org.junit.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(); + @After + 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 9a26d4276..b9721ef43 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; @@ -52,11 +51,11 @@ public class TraceRestTemplateInterceptorIntegrationTests { @Rule public final MockWebServer mockWebServer = new MockWebServer(); + 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(); @@ -72,7 +71,8 @@ public class TraceRestTemplateInterceptorIntegrationTests { @After 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/exceptionresolver/Issue585Tests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/exceptionresolver/Issue585Tests.java index dfb3bf9ab..3946e9eca 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/exceptionresolver/Issue585Tests.java +++ b/spring-cloud-sleuth-core/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.Test; @@ -55,6 +56,9 @@ public class Issue585Tests { TestRestTemplate testRestTemplate = new TestRestTemplate(); + @Autowired + CurrentTraceContext currentTraceContext; + @Autowired ArrayListSpanReporter reporter; @@ -67,7 +71,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/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 4d09408a2..27acb79b7 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; @@ -61,11 +60,11 @@ public class FeignRetriesTests { @Mock 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) @@ -78,6 +77,12 @@ public class FeignRetriesTests { .willReturn(this.httpTracing); } + @After + public void close() { + this.tracing.close(); + this.currentTraceContext.close(); + } + @Test public void testRetriedWhenExceededNumberOfRetries() throws Exception { 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 bd193ea76..179788558 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.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -55,9 +53,9 @@ public class TraceFeignAspectTests { @Mock TraceLoadBalancerFeignClient traceLoadBalancerFeignClient; - 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) @@ -69,13 +67,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; } }; } + @After + 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 53dc877cd..1367f7653 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.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -51,11 +51,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(); @@ -73,6 +73,12 @@ public class TracingFeignClientTests { this.traceFeignClient = TracingFeignClient.create(this.httpTracing, this.client); } + @After + 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-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/feign/TracingFeignObjectWrapperTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/feign/TracingFeignObjectWrapperTests.java index a90aee096..5eb3b7112 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/feign/TracingFeignObjectWrapperTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/feign/TracingFeignObjectWrapperTests.java @@ -16,17 +16,12 @@ package org.springframework.cloud.sleuth.instrument.web.client.feign; -import brave.Tracing; -import brave.http.HttpTracing; import feign.Client; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; -import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; -import org.springframework.beans.factory.BeanFactory; - import static org.assertj.core.api.BDDAssertions.then; import static org.mockito.Mockito.mock; @@ -36,13 +31,6 @@ import static org.mockito.Mockito.mock; @RunWith(MockitoJUnitRunner.class) public class TracingFeignObjectWrapperTests { - Tracing tracing = Tracing.newBuilder().build(); - - HttpTracing httpTracing = HttpTracing.create(this.tracing); - - @Mock - BeanFactory beanFactory; - @InjectMocks TraceFeignObjectWrapper traceFeignObjectWrapper; diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/feign/issues/issue502/Issue502Tests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/feign/issues/issue502/Issue502Tests.java index e62690214..9ac806a95 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/feign/issues/issue502/Issue502Tests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/feign/issues/issue502/Issue502Tests.java @@ -21,7 +21,6 @@ import java.nio.charset.Charset; import java.util.HashMap; import java.util.List; -import brave.Tracing; import brave.sampler.Sampler; import feign.Client; import feign.Request; @@ -71,9 +70,6 @@ public class Issue502Tests { @Autowired ArrayListSpanReporter reporter; - @Autowired - Tracing tracer; - @Before public void open() { this.reporter.clear(); diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/zuul/TracePostZuulFilterTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/zuul/TracePostZuulFilterTests.java index af6a3ec83..71a298e68 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/zuul/TracePostZuulFilterTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/zuul/TracePostZuulFilterTests.java @@ -26,8 +26,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 com.netflix.zuul.context.RequestContext; import com.netflix.zuul.monitoring.TracerFactory; import org.junit.After; @@ -57,11 +56,11 @@ public class TracePostZuulFilterTests { @Mock HttpServletResponse httpServletResponse; + 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) @@ -75,7 +74,8 @@ public class TracePostZuulFilterTests { @After public void clean() { RequestContext.getCurrentContext().unset(); - this.httpTracing.tracing().close(); + this.tracing.close(); + this.currentTraceContext.close(); RequestContext.testSetCurrentContext(null); } diff --git a/spring-cloud-sleuth-dependencies/pom.xml b/spring-cloud-sleuth-dependencies/pom.xml index 825fd4b46..05dfa27b8 100644 --- a/spring-cloud-sleuth-dependencies/pom.xml +++ b/spring-cloud-sleuth-dependencies/pom.xml @@ -31,6 +31,7 @@ spring-cloud-sleuth-dependencies Spring Cloud Sleuth Dependencies + 5.11.0 0.33.13 3.0.1 diff --git a/tests/spring-cloud-sleuth-instrumentation-feign-tests/src/test/java/org/springframework/cloud/sleuth/instrument/feign/issues/issueX/IssueXTests.java b/tests/spring-cloud-sleuth-instrumentation-feign-tests/src/test/java/org/springframework/cloud/sleuth/instrument/feign/issues/issueX/IssueXTests.java index 37c75e6ac..7ec8fe67a 100644 --- a/tests/spring-cloud-sleuth-instrumentation-feign-tests/src/test/java/org/springframework/cloud/sleuth/instrument/feign/issues/issueX/IssueXTests.java +++ b/tests/spring-cloud-sleuth-instrumentation-feign-tests/src/test/java/org/springframework/cloud/sleuth/instrument/feign/issues/issueX/IssueXTests.java @@ -21,7 +21,6 @@ import java.nio.charset.Charset; import java.util.HashMap; import java.util.List; -import brave.Tracing; import brave.sampler.Sampler; import feign.Client; import feign.Request; @@ -75,9 +74,6 @@ public class IssueXTests { @Autowired ArrayListSpanReporter reporter; - @Autowired - Tracing tracer; - @Before public void open() { this.reporter.clear();