Fixed wrong gateway integration and b3 parsing; fixes gh-1452

This commit is contained in:
Marcin Grzejszczak
2019-11-08 17:42:30 +01:00
parent b5339925aa
commit 356dd0a3a5
2 changed files with 39 additions and 1 deletions

View File

@@ -66,6 +66,10 @@ final class TraceRequestHttpHeadersFilter extends AbstractHttpHeadersFilter {
HttpHeaders headersWithInput = new HttpHeaders();
headersWithInput.addAll(input);
addHeadersWithInput(carrier.filteredHeaders, headersWithInput);
if (headersWithInput.containsKey("b3") || headersWithInput.containsKey("B3")) {
headersWithInput.keySet().remove("b3");
headersWithInput.keySet().remove("B3");
}
return headersWithInput;
}
@@ -82,7 +86,9 @@ final class TraceRequestHttpHeadersFilter extends AbstractHttpHeadersFilter {
if (currentSpan == null) {
return this.handler.handleSend(this.injector, carrier);
}
return this.handler.handleSend(this.injector, carrier, currentSpan);
Span clientSpan = this.tracer
.nextSpan(TraceContextOrSamplingFlags.create(currentSpan.context()));
return this.handler.handleSend(this.injector, carrier, clientSpan);
}
private void addHeadersWithInput(HttpHeaders filteredHeaders,

View File

@@ -74,6 +74,38 @@ public class TraceRequestHttpHeadersFilterTests {
.isNotNull();
}
@Test
public void should_override_span_tracing_headers_when_using_b3() {
HttpHeadersFilter filter = TraceRequestHttpHeadersFilter.create(this.httpTracing);
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.set("X-Hello", "World");
httpHeaders.set("B3", "1111111111111111-1111111111111111");
MockServerHttpRequest request = MockServerHttpRequest.post("foo/bar")
.headers(httpHeaders).build();
MockServerWebExchange exchange = MockServerWebExchange.builder(request).build();
HttpHeaders filteredHeaders = filter.filter(requestHeaders(httpHeaders),
exchange);
// we want to continue the trace
BDDAssertions.then(filteredHeaders.get("X-B3-TraceId"))
.isEqualTo(Collections.singletonList("1111111111111111"));
// but we want to have a new span id
BDDAssertions.then(filteredHeaders.get("X-B3-SpanId"))
.isNotEqualTo(Collections.singletonList("1111111111111111"));
// we don't want to propagate b3
BDDAssertions.then(filteredHeaders.get("B3")).isNullOrEmpty();
BDDAssertions.then(filteredHeaders.get("X-Hello"))
.isEqualTo(Collections.singletonList("World"));
BDDAssertions.then(filteredHeaders.get("X-Hello-Request"))
.isEqualTo(Collections.singletonList("Request World"));
BDDAssertions.then(filteredHeaders.get("X-Auth-User")).hasSize(1);
BDDAssertions
.then((Object) exchange
.getAttribute(TraceRequestHttpHeadersFilter.SPAN_ATTRIBUTE))
.isNotNull();
}
@Test
public void should_set_tracing_headers() {
HttpHeadersFilter filter = TraceRequestHttpHeadersFilter.create(this.httpTracing);