-
Notifications
You must be signed in to change notification settings - Fork 782
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Picks tracing data from B3 if present; fixes gh-1077
- Loading branch information
1 parent
d1dba30
commit b7302a6
Showing
13 changed files
with
222 additions
and
21 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -57,18 +57,19 @@ private boolean onlySpanIdIsPresent(Map<String, String> carrier) { | |
} | ||
|
||
private boolean traceIdIsMissing(Map<String, String> carrier) { | ||
return carrier.get(Span.TRACE_ID_NAME) == null; | ||
return traceId(carrier) == null; | ||
} | ||
|
||
private boolean spanIdIsPresent(Map<String, String> carrier) { | ||
return carrier.get(Span.SPAN_ID_NAME) != null; | ||
return spanId(carrier) != null; | ||
} | ||
|
||
private String generateId() { | ||
return Span.idToHex(this.random.nextLong()); | ||
} | ||
|
||
private long spanId(String spanId, String traceId) { | ||
private long spanIdOrDefault(Map<String, String> carrier, String traceId) { | ||
String spanId = spanId(carrier); | ||
if (spanId == null) { | ||
if (log.isDebugEnabled()) { | ||
log.debug("Request is missing a span id but it has a trace id. We'll assume that this is " | ||
|
@@ -80,15 +81,53 @@ private long spanId(String spanId, String traceId) { | |
} | ||
} | ||
|
||
private Span buildParentSpan(Map<String, String> carrier, boolean idToBeGenerated) { | ||
String traceId = carrier.get(Span.TRACE_ID_NAME); | ||
private String traceId(Map<String, String> carrier) { | ||
String b3 = carrier.get(Span.B3_NAME); | ||
if (StringUtils.hasText(b3)) { | ||
String[] split = b3.split("-"); | ||
if (split.length == 3) { | ||
return split[0]; | ||
} | ||
} | ||
return carrier.get(Span.TRACE_ID_NAME); | ||
} | ||
|
||
private String spanId(Map<String, String> carrier) { | ||
String b3 = carrier.get(Span.B3_NAME); | ||
if (StringUtils.hasText(b3)) { | ||
String[] split = b3.split("-"); | ||
if (split.length == 3) { | ||
return split[1]; | ||
} | ||
} | ||
return carrier.get(Span.SPAN_ID_NAME); | ||
} | ||
|
||
private String sampled(Map<String, String> carrier) { | ||
String b3 = carrier.get(Span.B3_NAME); | ||
if (StringUtils.hasText(b3)) { | ||
String[] split = b3.split("-"); | ||
if (split.length == 3) { | ||
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong.
shakuzen
Contributor
|
||
return split[2]; | ||
} | ||
} | ||
return carrier.get(Span.SAMPLED_NAME); | ||
} | ||
|
||
private String traceIdOrDefaut(Map<String, String> carrier) { | ||
String traceId = traceId(carrier); | ||
if (traceId == null) { | ||
traceId = generateId(); | ||
} | ||
return traceId; | ||
} | ||
|
||
private Span buildParentSpan(Map<String, String> carrier, boolean idToBeGenerated) { | ||
String traceId = traceIdOrDefaut(carrier); | ||
Span.SpanBuilder span = Span.builder() | ||
.traceIdHigh(traceId.length() == 32 ? Span.hexToId(traceId, 0) : 0) | ||
.traceId(Span.hexToId(traceId)) | ||
.spanId(spanId(carrier.get(Span.SPAN_ID_NAME), traceId)); | ||
.spanId(spanIdOrDefault(carrier, traceId)); | ||
String parentName = carrier.get(Span.SPAN_NAME_NAME); | ||
if (StringUtils.hasText(parentName)) { | ||
span.name(parentName); | ||
|
@@ -108,7 +147,7 @@ private Span buildParentSpan(Map<String, String> carrier, boolean idToBeGenerate | |
|
||
boolean skip = this.skipPattern | ||
.matcher(carrier.get(ZipkinHttpSpanMapper.URI_HEADER)).matches() | ||
|| Span.SPAN_NOT_SAMPLED.equals(carrier.get(Span.SAMPLED_NAME)); | ||
|| Span.SPAN_NOT_SAMPLED.equals(sampled(carrier)); | ||
// trace, span id were retrieved from the headers and span is sampled | ||
span.shared(!(skip || idToBeGenerated)); | ||
boolean debug = Span.SPAN_SAMPLED.equals(carrier.get(Span.SPAN_FLAGS)); | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
I think sampled could also be the only field, for instance when just sending an unsampled decision
0
. It's one of the examples here: openzipkin/b3-propagation#21 (comment)Also, it could be
d
in the third position when the debug flag is set, which this method will parse but the caller doesn't seem to handle it currently.