From 35652a43d983e1f4c22b4b5eaa3a9b01958cb17a Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Mon, 11 Jul 2016 13:21:31 +0200 Subject: [PATCH] Removed sending the tracing information back in the response (#329) fixes #327 --- .../web/HttpServletResponseInjector.java | 44 ------------------- .../sleuth/instrument/web/TraceFilter.java | 21 +-------- .../web/TraceWebAutoConfiguration.java | 11 +---- ...ceFilterAlwaysSamplerIntegrationTests.java | 8 +--- .../web/TraceFilterCustomExtractorTests.java | 9 +--- .../web/TraceFilterIntegrationTests.java | 19 +++----- .../TraceFilterMockChainIntegrationTests.java | 4 +- .../instrument/web/TraceFilterTests.java | 33 +++++++------- .../instrument/web/client/WebClientTests.java | 11 ++--- .../common/AbstractMvcIntegrationTest.java | 3 -- 10 files changed, 33 insertions(+), 130 deletions(-) delete mode 100644 spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/HttpServletResponseInjector.java diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/HttpServletResponseInjector.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/HttpServletResponseInjector.java deleted file mode 100644 index e0f7a92fe..000000000 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/HttpServletResponseInjector.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 2013-2016 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.cloud.sleuth.instrument.web; - -import javax.servlet.http.HttpServletResponse; - -import org.springframework.cloud.sleuth.Span; -import org.springframework.cloud.sleuth.SpanInjector; - -/** - * Span injector that injects tracing info to {@link HttpServletResponse} - * - * @author Marcin Grzejszczak - * - * @since 1.0.0 - */ -class HttpServletResponseInjector implements SpanInjector { - - @Override - public void inject(Span span, HttpServletResponse carrier) { - if (span == null) { - return; - } - if (!carrier.containsHeader(Span.SPAN_ID_NAME)) { - carrier.addHeader(Span.SPAN_ID_NAME, Span.idToHex(span.getSpanId())); - carrier.addHeader(Span.TRACE_ID_NAME, Span.idToHex(span.getTraceId())); - } - } - -} diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceFilter.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceFilter.java index 30efa50c4..a593922a4 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceFilter.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceFilter.java @@ -32,7 +32,6 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.cloud.sleuth.Span; import org.springframework.cloud.sleuth.SpanExtractor; -import org.springframework.cloud.sleuth.SpanInjector; import org.springframework.cloud.sleuth.SpanReporter; import org.springframework.cloud.sleuth.TraceKeys; import org.springframework.cloud.sleuth.Tracer; @@ -45,8 +44,6 @@ import org.springframework.web.context.request.async.WebAsyncUtils; import org.springframework.web.filter.GenericFilterBean; import org.springframework.web.util.UrlPathHelper; -import static org.springframework.util.StringUtils.hasText; - /** * Filter that takes the value of the {@link Span#SPAN_ID_NAME} and * {@link Span#TRACE_ID_NAME} header from either request or response and uses them to @@ -89,29 +86,25 @@ public class TraceFilter extends GenericFilterBean { private final Pattern skipPattern; private final SpanReporter spanReporter; private final SpanExtractor spanExtractor; - private final SpanInjector spanInjector; private final HttpTraceKeysInjector httpTraceKeysInjector; private UrlPathHelper urlPathHelper = new UrlPathHelper(); public TraceFilter(Tracer tracer, TraceKeys traceKeys, SpanReporter spanReporter, SpanExtractor spanExtractor, - SpanInjector spanInjector, HttpTraceKeysInjector httpTraceKeysInjector) { this(tracer, traceKeys, Pattern.compile(DEFAULT_SKIP_PATTERN), spanReporter, - spanExtractor, spanInjector, httpTraceKeysInjector); + spanExtractor, httpTraceKeysInjector); } public TraceFilter(Tracer tracer, TraceKeys traceKeys, Pattern skipPattern, SpanReporter spanReporter, SpanExtractor spanExtractor, - SpanInjector spanInjector, HttpTraceKeysInjector httpTraceKeysInjector) { this.tracer = tracer; this.traceKeys = traceKeys; this.skipPattern = skipPattern; this.spanReporter = spanReporter; this.spanExtractor = spanExtractor; - this.spanInjector = spanInjector; this.httpTraceKeysInjector = httpTraceKeysInjector; } @@ -138,7 +131,6 @@ public class TraceFilter extends GenericFilterBean { processErrorRequest(filterChain, request, response, spanFromRequest); return; } - addToResponseIfNotPresent(response, Span.SAMPLED_NAME, skip ? Span.SPAN_NOT_SAMPLED : Span.SPAN_SAMPLED); String name = HTTP_COMPONENT + ":" + uri; try { spanFromRequest = createSpan(request, skip, spanFromRequest, name); @@ -150,9 +142,6 @@ public class TraceFilter extends GenericFilterBean { } Throwable exception = null; try { - this.spanInjector.inject(spanFromRequest, response); - // Add headers before filter chain in case one of the filters flushes the - // response... filterChain.doFilter(request, response); } catch (Throwable e) { exception = e; @@ -166,7 +155,6 @@ public class TraceFilter extends GenericFilterBean { return; } spanFromRequest = createSpanIfRequestNotHandled(request, spanFromRequest, name, skip); - addToResponseIfNotPresent(response, Span.SAMPLED_NAME, skip ? Span.SPAN_NOT_SAMPLED : Span.SPAN_SAMPLED); detachOrCloseSpans(request, response, spanFromRequest, exception); } } @@ -364,13 +352,6 @@ public class TraceFilter extends GenericFilterBean { } } - private void addToResponseIfNotPresent(HttpServletResponse response, String name, - String value) { - if (!hasText(response.getHeader(name))) { - response.addHeader(name, value); - } - } - protected boolean isAsyncStarted(HttpServletRequest request) { return WebAsyncUtils.getAsyncManager(request).isConcurrentHandlingStarted(); } diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceWebAutoConfiguration.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceWebAutoConfiguration.java index 64bb9819a..e2b00eeaf 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceWebAutoConfiguration.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceWebAutoConfiguration.java @@ -16,7 +16,6 @@ package org.springframework.cloud.sleuth.instrument.web; import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.util.regex.Pattern; import org.springframework.beans.factory.BeanFactory; @@ -32,7 +31,6 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplicat import org.springframework.boot.context.embedded.FilterRegistrationBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.cloud.sleuth.SpanExtractor; -import org.springframework.cloud.sleuth.SpanInjector; import org.springframework.cloud.sleuth.SpanNamer; import org.springframework.cloud.sleuth.SpanReporter; import org.springframework.cloud.sleuth.TraceKeys; @@ -89,7 +87,6 @@ public class TraceWebAutoConfiguration { public FilterRegistrationBean traceWebFilter(Tracer tracer, TraceKeys traceKeys, SkipPatternProvider skipPatternProvider, SpanReporter spanReporter, SpanExtractor spanExtractor, - SpanInjector spanInjector, HttpTraceKeysInjector httpTraceKeysInjector, TraceFilter traceFilter) { FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(traceFilter); filterRegistrationBean.setDispatcherTypes(ASYNC, ERROR, FORWARD, INCLUDE, REQUEST); @@ -100,10 +97,9 @@ public class TraceWebAutoConfiguration { public TraceFilter traceFilter(Tracer tracer, TraceKeys traceKeys, SkipPatternProvider skipPatternProvider, SpanReporter spanReporter, SpanExtractor spanExtractor, - SpanInjector spanInjector, HttpTraceKeysInjector httpTraceKeysInjector) { return new TraceFilter(tracer, traceKeys, skipPatternProvider.skipPattern(), - spanReporter, spanExtractor, spanInjector, httpTraceKeysInjector); + spanReporter, spanExtractor, httpTraceKeysInjector); } @Bean @@ -112,11 +108,6 @@ public class TraceWebAutoConfiguration { return new HttpServletRequestExtractor(skipPatternProvider.skipPattern()); } - @Bean - public SpanInjector httpServletResponseSpanInjector() { - return new HttpServletResponseInjector(); - } - @Configuration @ConditionalOnClass(ManagementServerProperties.class) @ConditionalOnMissingBean(SkipPatternProvider.class) diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterAlwaysSamplerIntegrationTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterAlwaysSamplerIntegrationTests.java index 69de76f39..3e799e838 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterAlwaysSamplerIntegrationTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterAlwaysSamplerIntegrationTests.java @@ -42,7 +42,6 @@ public class TraceFilterAlwaysSamplerIntegrationTests extends AbstractMvcIntegra MvcResult mvcResult = whenSentPingWithTraceId(expectedTraceId); - then(tracingHeaderFrom(mvcResult)).isEqualTo(expectedTraceId); then(span.isExportable()); } @@ -52,14 +51,13 @@ public class TraceFilterAlwaysSamplerIntegrationTests extends AbstractMvcIntegra MvcResult mvcResult = whenSentPingWithTraceIdAndNotSampling(expectedTraceId); - then(tracingHeaderFrom(mvcResult)).isEqualTo(expectedTraceId); then(span.isExportable()).isFalse(); } @Override protected void configureMockMvcBuilder(DefaultMockMvcBuilder mockMvcBuilder) { mockMvcBuilder.addFilters(new TraceFilter(this.tracer, this.traceKeys, - new NoOpSpanReporter(), this.spanExtractor, this.spanInjector, + new NoOpSpanReporter(), this.spanExtractor, this.httpTraceKeysInjector)); } @@ -87,10 +85,6 @@ public class TraceFilterAlwaysSamplerIntegrationTests extends AbstractMvcIntegra return this.mockMvc.perform(request).andReturn(); } - private Long tracingHeaderFrom(MvcResult mvcResult) { - return Span.hexToId(mvcResult.getResponse().getHeader(Span.TRACE_ID_NAME)); - } - @DefaultTestAutoConfiguration @RestController @Configuration diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterCustomExtractorTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterCustomExtractorTests.java index 400aa722c..652d961fa 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterCustomExtractorTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterCustomExtractorTests.java @@ -19,7 +19,6 @@ package org.springframework.cloud.sleuth.instrument.web; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.net.URI; -import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Random; @@ -84,20 +83,16 @@ public class TraceFilterCustomExtractorTests { .header("mySpanId", Span.idToHex(spanId)).build(); @SuppressWarnings("rawtypes") - ResponseEntity requestHeaders = this.restTemplate.exchange(requestEntity, + ResponseEntity responseHeaders = this.restTemplate.exchange(requestEntity, Map.class); await().until(() -> then(this.accumulator.getSpans().stream().filter( span -> span.getSpanId() == spanId).findFirst().get()) .hasTraceIdEqualTo(traceId)); - then(requestHeaders.getBody()) + then(responseHeaders.getBody()) .containsEntry("correlationid", Span.idToHex(traceId)) .containsEntry("myspanid", Span.idToHex(spanId)) .as("input request headers"); - then(requestHeaders.getHeaders()) - .containsEntry("correlationId", - Collections.singletonList(Span.idToHex(traceId))) - .containsKey("mySpanId").as("response headers"); } @Configuration diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterIntegrationTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterIntegrationTests.java index 4b645eea6..ef32f43db 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterIntegrationTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterIntegrationTests.java @@ -59,9 +59,8 @@ public class TraceFilterIntegrationTests extends AbstractMvcIntegrationTest { @Test public void should_create_and_return_trace_in_HTTP_header() throws Exception { - MvcResult mvcResult = whenSentPingWithoutTracingData(); + whenSentPingWithoutTracingData(); - then(tracingHeaderFrom(mvcResult)).isNotNull(); Span parentSpan = this.spanAccumulator.getSpans().stream().filter( span -> span.getSpanId() == TraceFilterIntegrationTests.span.getParents().get(0)) .findFirst().get(); @@ -75,7 +74,9 @@ public class TraceFilterIntegrationTests extends AbstractMvcIntegrationTest { throws Exception { MvcResult mvcResult = whenSentInfoWithTraceId(new Random().nextLong()); - then(notSampledHeaderIsPresent(mvcResult)).isEqualTo(true); + // https://github.com/spring-cloud/spring-cloud-sleuth/issues/327 + // we don't want to respond with any tracing data + then(notSampledHeaderIsPresent(mvcResult)).isEqualTo(false); then(ExceptionUtils.getLastException()).isNull(); } @@ -86,7 +87,6 @@ public class TraceFilterIntegrationTests extends AbstractMvcIntegrationTest { MvcResult mvcResult = whenSentPingWithTraceId(expectedTraceId); - then(tracingHeaderFrom(mvcResult)).isEqualTo(expectedTraceId); then(ExceptionUtils.getLastException()).isNull(); } @@ -108,7 +108,6 @@ public class TraceFilterIntegrationTests extends AbstractMvcIntegrationTest { this.mockMvc.perform(asyncDispatch(mvcResult)) .andExpect(status().isOk()).andReturn(); - then(tracingHeaderFrom(mvcResult)).isEqualTo(expectedTraceId); then(this.tracer.getCurrentSpan()).isNull(); then(ExceptionUtils.getLastException()).isNull(); } @@ -121,7 +120,6 @@ public class TraceFilterIntegrationTests extends AbstractMvcIntegrationTest { this.mockMvc.perform(asyncDispatch(mvcResult)) .andExpect(status().isOk()).andReturn(); - then(tracingHeaderFrom(mvcResult)).isEqualTo(expectedTraceId); Optional taggedSpan = this.spanAccumulator.getSpans().stream() .filter(span -> span.tags().containsKey("tag")).findFirst(); then(taggedSpan.isPresent()).isTrue(); @@ -137,7 +135,6 @@ public class TraceFilterIntegrationTests extends AbstractMvcIntegrationTest { MvcResult mvcResult = whenSentToNonExistentEndpointWithTraceId(expectedTraceId); - then(tracingHeaderFrom(mvcResult)).isEqualTo(expectedTraceId); then(this.tracer.getCurrentSpan()).isNull(); then(ExceptionUtils.getLastException()).isNull(); } @@ -208,12 +205,10 @@ public class TraceFilterIntegrationTests extends AbstractMvcIntegrationTest { private MvcResult whenSentRequestWithTraceIdAndNoSpanId(Long traceId) throws Exception { - MvcResult mvcResult = this.mockMvc + return this.mockMvc .perform(MockMvcRequestBuilders.get("/ping").accept(MediaType.TEXT_PLAIN) .header(Span.TRACE_ID_NAME, Span.idToHex(traceId))) .andReturn(); - then(tracingHeaderFrom(mvcResult)).isEqualTo(traceId); - return mvcResult; } private MvcResult sendRequestWithTraceId(String path, String headerName, Long traceId, HttpStatus status) @@ -226,10 +221,6 @@ public class TraceFilterIntegrationTests extends AbstractMvcIntegrationTest { .andReturn(); } - private Long tracingHeaderFrom(MvcResult mvcResult) { - return Span.hexToId(mvcResult.getResponse().getHeader(Span.TRACE_ID_NAME)); - } - private boolean notSampledHeaderIsPresent(MvcResult mvcResult) { return Span.SPAN_NOT_SAMPLED .equals(mvcResult.getResponse().getHeader(Span.SAMPLED_NAME)); diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterMockChainIntegrationTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterMockChainIntegrationTests.java index f8dbb0134..5f29beea6 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterMockChainIntegrationTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterMockChainIntegrationTests.java @@ -74,7 +74,7 @@ public class TraceFilterMockChainIntegrationTests { public void startsNewTrace() throws Exception { TraceFilter filter = new TraceFilter(this.tracer, this.traceKeys, new NoOpSpanReporter(), new HttpServletRequestExtractor(Pattern.compile(TraceFilter.DEFAULT_SKIP_PATTERN)), - new HttpServletResponseInjector(), keysInjector); + keysInjector); filter.doFilter(this.request, this.response, this.filterChain); assertNull(TestSpanContextHolder.getCurrentSpan()); } @@ -86,7 +86,7 @@ public class TraceFilterMockChainIntegrationTests { .header(Span.TRACE_ID_NAME, generator.nextLong()).buildRequest(new MockServletContext()); TraceFilter filter = new TraceFilter(this.tracer, this.traceKeys, new NoOpSpanReporter(), new HttpServletRequestExtractor(Pattern.compile(TraceFilter.DEFAULT_SKIP_PATTERN)), - new HttpServletResponseInjector(), keysInjector); + keysInjector); filter.doFilter(this.request, this.response, this.filterChain); assertNull(TestSpanContextHolder.getCurrentSpan()); } 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 28c80214e..4787beef3 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 @@ -17,7 +17,6 @@ package org.springframework.cloud.sleuth.instrument.web; import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.util.Optional; import java.util.Random; import java.util.regex.Pattern; @@ -30,7 +29,6 @@ import org.springframework.cloud.sleuth.DefaultSpanNamer; import org.springframework.cloud.sleuth.Sampler; import org.springframework.cloud.sleuth.Span; import org.springframework.cloud.sleuth.SpanExtractor; -import org.springframework.cloud.sleuth.SpanInjector; import org.springframework.cloud.sleuth.SpanReporter; import org.springframework.cloud.sleuth.TraceKeys; import org.springframework.cloud.sleuth.Tracer; @@ -51,8 +49,8 @@ import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilde import static org.junit.Assert.assertEquals; import static org.mockito.MockitoAnnotations.initMocks; import static org.springframework.cloud.sleuth.assertions.SleuthAssertions.assertThat; -import static org.springframework.cloud.sleuth.assertions.SleuthAssertions.then; import static org.springframework.cloud.sleuth.assertions.SleuthAssertions.entry; +import static org.springframework.cloud.sleuth.assertions.SleuthAssertions.then; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; /** @@ -67,7 +65,6 @@ public class TraceFilterTests { ArrayListSpanAccumulator spanReporter = new ArrayListSpanAccumulator(); SpanExtractor spanExtractor = new HttpServletRequestExtractor(Pattern .compile(TraceFilter.DEFAULT_SKIP_PATTERN)); - SpanInjector spanInjector = new HttpServletResponseInjector(); private Tracer tracer; private TraceKeys traceKeys = new TraceKeys(); @@ -112,7 +109,7 @@ public class TraceFilterTests { public void notTraced() throws Exception { this.sampler = NeverSampler.INSTANCE; TraceFilter filter = new TraceFilter(this.tracer, this.traceKeys, this.spanReporter, - this.spanExtractor, this.spanInjector, this.httpTraceKeysInjector); + this.spanExtractor, this.httpTraceKeysInjector); this.request = get("/favicon.ico").accept(MediaType.ALL) .buildRequest(new MockServletContext()); @@ -126,7 +123,7 @@ public class TraceFilterTests { @Test public void startsNewTrace() throws Exception { TraceFilter filter = new TraceFilter(this.tracer, this.traceKeys, this.spanReporter, - this.spanExtractor, this.spanInjector, this.httpTraceKeysInjector); + this.spanExtractor, this.httpTraceKeysInjector); filter.doFilter(this.request, this.response, this.filterChain); verifyCurrentSpanStatusCode(HttpStatus.OK); @@ -137,7 +134,7 @@ public class TraceFilterTests { @Test public void shouldNotStoreHttpStatusCodeWhenResponseCodeHasNotYetBeenSet() throws Exception { TraceFilter filter = new TraceFilter(this.tracer, this.traceKeys, this.spanReporter, - this.spanExtractor, this.spanInjector, this.httpTraceKeysInjector); + this.spanExtractor, this.httpTraceKeysInjector); this.response.setStatus(0); filter.doFilter(this.request, this.response, this.filterChain); @@ -154,7 +151,7 @@ public class TraceFilterTests { .header(Span.PARENT_ID_NAME, Span.idToHex(3L)) .buildRequest(new MockServletContext()); TraceFilter filter = new TraceFilter(this.tracer, this.traceKeys, this.spanReporter, - this.spanExtractor, this.spanInjector, this.httpTraceKeysInjector); + this.spanExtractor, this.httpTraceKeysInjector); filter.doFilter(this.request, this.response, this.filterChain); @@ -187,7 +184,7 @@ public class TraceFilterTests { TestSpanContextHolder.removeCurrentSpan(); TraceFilter filter = new TraceFilter(this.tracer, this.traceKeys, this.spanReporter, - this.spanExtractor, this.spanInjector, this.httpTraceKeysInjector); + this.spanExtractor, this.httpTraceKeysInjector); filter.doFilter(this.request, this.response, this.filterChain); then(TestSpanContextHolder.getCurrentSpan()).isNull(); @@ -203,7 +200,7 @@ public class TraceFilterTests { TestSpanContextHolder.removeCurrentSpan(); TraceFilter filter = new TraceFilter(this.tracer, this.traceKeys, this.spanReporter, - this.spanExtractor, this.spanInjector, this.httpTraceKeysInjector); + this.spanExtractor, this.httpTraceKeysInjector); filter.doFilter(this.request, this.response, this.filterChain); then(TestSpanContextHolder.getCurrentSpan()).isNull(); @@ -220,7 +217,7 @@ public class TraceFilterTests { TestSpanContextHolder.removeCurrentSpan(); TraceFilter filter = new TraceFilter(this.tracer, this.traceKeys, this.spanReporter, - this.spanExtractor, this.spanInjector, this.httpTraceKeysInjector); + this.spanExtractor, this.httpTraceKeysInjector); filter.doFilter(this.request, this.response, this.filterChain); then(TestSpanContextHolder.getCurrentSpan()).isNull(); @@ -232,7 +229,7 @@ public class TraceFilterTests { .header(Span.TRACE_ID_NAME, 20L).buildRequest(new MockServletContext()); TraceFilter filter = new TraceFilter(this.tracer, this.traceKeys, this.spanReporter, - this.spanExtractor, this.spanInjector, this.httpTraceKeysInjector); + this.spanExtractor, this.httpTraceKeysInjector); filter.doFilter(this.request, this.response, this.filterChain); verifyParentSpanHttpTags(); @@ -247,7 +244,7 @@ public class TraceFilterTests { this.traceKeys.getHttp().getHeaders().add("x-foo"); TraceFilter filter = new TraceFilter(this.tracer, this.traceKeys, this.spanReporter, - this.spanExtractor, this.spanInjector, this.httpTraceKeysInjector); + this.spanExtractor, this.httpTraceKeysInjector); this.request.addHeader("X-Foo", "bar"); filter.doFilter(this.request, this.response, this.filterChain); @@ -261,7 +258,7 @@ public class TraceFilterTests { this.request = builder().header(Span.SPAN_ID_NAME, PARENT_ID) .header(Span.TRACE_ID_NAME, 20L).buildRequest(new MockServletContext()); TraceFilter filter = new TraceFilter(this.tracer, this.traceKeys, spanIsStoppedVeryfingReporter(), - this.spanExtractor, this.spanInjector, this.httpTraceKeysInjector); + this.spanExtractor, this.httpTraceKeysInjector); filter.doFilter(this.request, this.response, this.filterChain); } @@ -277,7 +274,7 @@ public class TraceFilterTests { this.traceKeys.getHttp().getHeaders().add("x-foo"); TraceFilter filter = new TraceFilter(this.tracer, this.traceKeys, this.spanReporter, - this.spanExtractor, this.spanInjector, this.httpTraceKeysInjector); + this.spanExtractor, this.httpTraceKeysInjector); this.request.addHeader("X-Foo", "bar"); this.request.addHeader("X-Foo", "spam"); filter.doFilter(this.request, this.response, this.filterChain); @@ -292,7 +289,7 @@ public class TraceFilterTests { this.request = builder().header(Span.SPAN_ID_NAME, PARENT_ID) .header(Span.TRACE_ID_NAME, 20L).buildRequest(new MockServletContext()); TraceFilter filter = new TraceFilter(this.tracer, this.traceKeys, this.spanReporter, - this.spanExtractor, this.spanInjector, this.httpTraceKeysInjector); + this.spanExtractor, this.httpTraceKeysInjector); this.filterChain = new MockFilterChain() { @Override public void doFilter(javax.servlet.ServletRequest request, @@ -317,7 +314,7 @@ public class TraceFilterTests { this.request = builder().header(Span.SPAN_ID_NAME, PARENT_ID) .header(Span.TRACE_ID_NAME, 20L).buildRequest(new MockServletContext()); TraceFilter filter = new TraceFilter(this.tracer, this.traceKeys, this.spanReporter, - this.spanExtractor, this.spanInjector, this.httpTraceKeysInjector); + this.spanExtractor, this.httpTraceKeysInjector); this.response.setStatus(404); filter.doFilter(this.request, this.response, this.filterChain); @@ -330,7 +327,7 @@ public class TraceFilterTests { this.request = builder().header(Span.SPAN_ID_NAME, "asd") .header(Span.TRACE_ID_NAME, 20L).buildRequest(new MockServletContext()); TraceFilter filter = new TraceFilter(this.tracer, this.traceKeys, this.spanReporter, - this.spanExtractor, this.spanInjector, this.httpTraceKeysInjector); + this.spanExtractor, this.httpTraceKeysInjector); filter.doFilter(this.request, this.response, this.filterChain); diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/WebClientTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/WebClientTests.java index d33726a99..5e4a02512 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/WebClientTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/WebClientTests.java @@ -112,8 +112,8 @@ public class WebClientTests { ResponseEntityProvider provider) { ResponseEntity response = provider.get(this); - then(getHeader(response, Span.TRACE_ID_NAME)).isNotNull(); - then(getHeader(response, Span.SPAN_ID_NAME)).isNotNull(); + then(getHeader(response, Span.TRACE_ID_NAME)).isNull(); + then(getHeader(response, Span.SPAN_ID_NAME)).isNull(); then(this.listener.getSpans()).isNotEmpty(); Awaitility.await().atMost(3, TimeUnit.SECONDS).until(() -> { log.info("Seraching for a notrace span in " + this.listener.getSpans()); @@ -172,9 +172,10 @@ public class WebClientTests { ResponseEntity response = provider.get(this); - then(getHeader(response, Span.SAMPLED_NAME)).isEqualTo(Span.SPAN_SAMPLED); - then(Span.hexToId(getHeader(response, Span.TRACE_ID_NAME))) - .isEqualTo(currentTraceId); + // https://github.com/spring-cloud/spring-cloud-sleuth/issues/327 + // we don't want to respond with any tracing data + then(getHeader(response, Span.SAMPLED_NAME)).isNull(); + then(getHeader(response, Span.TRACE_ID_NAME)).isNull(); thenRegisteredClientSentAndReceivedEvents(spanWithClientEvents()); } diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/common/AbstractMvcIntegrationTest.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/common/AbstractMvcIntegrationTest.java index af3f80282..1ad11b4d3 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/common/AbstractMvcIntegrationTest.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/common/AbstractMvcIntegrationTest.java @@ -1,12 +1,10 @@ package org.springframework.cloud.sleuth.instrument.web.common; import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import org.junit.Before; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.sleuth.SpanExtractor; -import org.springframework.cloud.sleuth.SpanInjector; import org.springframework.cloud.sleuth.TraceKeys; import org.springframework.cloud.sleuth.Tracer; import org.springframework.cloud.sleuth.instrument.web.HttpTraceKeysInjector; @@ -37,7 +35,6 @@ public abstract class AbstractMvcIntegrationTest { @Autowired protected Tracer tracer; @Autowired protected TraceKeys traceKeys; @Autowired protected SpanExtractor spanExtractor; - @Autowired protected SpanInjector spanInjector; @Autowired protected HttpTraceKeysInjector httpTraceKeysInjector; @Before