Fixes gh-1809, if traceIdHigh is zero, brave returns a 16 digits long traceId instead of a 32 digits long one (#1810)
This commit is contained in:
@@ -140,7 +140,7 @@ class W3CPropagation extends Propagation.Factory implements Propagation<String>
|
||||
chars[0] = VERSION.charAt(0);
|
||||
chars[1] = VERSION.charAt(1);
|
||||
chars[2] = TRACEPARENT_DELIMITER;
|
||||
String traceId = context.traceIdString();
|
||||
String traceId = padLeftWithZeros(context.traceIdString(), TRACE_ID_HEX_SIZE);
|
||||
for (int i = 0; i < traceId.length(); i++) {
|
||||
chars[TRACE_ID_OFFSET + i] = traceId.charAt(i);
|
||||
}
|
||||
@@ -157,6 +157,20 @@ class W3CPropagation extends Propagation.Factory implements Propagation<String>
|
||||
};
|
||||
}
|
||||
|
||||
private String padLeftWithZeros(String string, int length) {
|
||||
if (string.length() >= length) {
|
||||
return string;
|
||||
}
|
||||
else {
|
||||
StringBuilder sb = new StringBuilder(length);
|
||||
for (int i = string.length(); i < length; i++) {
|
||||
sb.append('0');
|
||||
}
|
||||
|
||||
return sb.append(string).toString();
|
||||
}
|
||||
}
|
||||
|
||||
void copyTraceFlagsHexTo(char[] dest, int destOffset, TraceContext context) {
|
||||
dest[destOffset] = '0';
|
||||
dest[destOffset + 1] = Boolean.TRUE.equals(context.sampled()) ? '1' : '0';
|
||||
@@ -327,7 +341,6 @@ class W3CBaggagePropagator {
|
||||
return built;
|
||||
}
|
||||
|
||||
@SuppressWarnings("StringSplitter")
|
||||
List<AbstractMap.SimpleEntry<BaggageField, String>> addBaggageToContext(String baggageHeader,
|
||||
TraceContextOrSamplingFlags.Builder builder) {
|
||||
List<AbstractMap.SimpleEntry<BaggageField, String>> pairs = new ArrayList<>();
|
||||
|
||||
@@ -63,15 +63,19 @@ class W3CPropagationTest {
|
||||
}
|
||||
|
||||
private TraceContext.Builder sampledTraceContext() {
|
||||
return sampledTraceContext("ff00000000000000", "0000000000000041", "ff00000000000041");
|
||||
}
|
||||
|
||||
private TraceContext.Builder sampledTraceContext(String traceIdHigh, String traceId, String spanId) {
|
||||
return TraceContext.newBuilder().sampled(SAMPLED_TRACE_OPTIONS)
|
||||
.spanId(BigendianEncoding.longFromBase16String("ff00000000000041"))
|
||||
.traceIdHigh(BigendianEncoding.longFromBase16String("ff00000000000000"))
|
||||
.traceId(BigendianEncoding.longFromBase16String("0000000000000041"));
|
||||
.traceIdHigh(BigendianEncoding.longFromBase16String(traceIdHigh))
|
||||
.traceId(BigendianEncoding.longFromBase16String(traceId))
|
||||
.spanId(BigendianEncoding.longFromBase16String(spanId));
|
||||
}
|
||||
|
||||
@Test
|
||||
void inject_SampledContext() {
|
||||
final Map<String, String> carrier = new LinkedHashMap<>();
|
||||
Map<String, String> carrier = new LinkedHashMap<>();
|
||||
TraceContext traceContext = sampledTraceContext().build();
|
||||
w3CPropagation.injector((ignored, key, value) -> carrier.put(key, value)).inject(traceContext, carrier);
|
||||
assertThat(carrier).containsExactly(entry(TRACE_PARENT, TRACEPARENT_HEADER_SAMPLED));
|
||||
@@ -79,12 +83,23 @@ class W3CPropagationTest {
|
||||
|
||||
@Test
|
||||
void inject_NotSampledContext() {
|
||||
final Map<String, String> carrier = new LinkedHashMap<>();
|
||||
Map<String, String> carrier = new LinkedHashMap<>();
|
||||
TraceContext traceContext = notSampledTraceContext().build();
|
||||
w3CPropagation.injector((ignored, key, value) -> carrier.put(key, value)).inject(traceContext, carrier);
|
||||
assertThat(carrier).containsExactly(entry(TRACE_PARENT, TRACEPARENT_HEADER_NOT_SAMPLED));
|
||||
}
|
||||
|
||||
/**
|
||||
* see: gh-1809
|
||||
*/
|
||||
@Test
|
||||
void inject_traceIdShouldBePaddedWithZeros() {
|
||||
Map<String, String> carrier = new LinkedHashMap<>();
|
||||
TraceContext traceContext = sampledTraceContext("0000000000000000", "123456789abcdef0", "123456789abcdef1").build();
|
||||
w3CPropagation.injector((ignored, key, value) -> carrier.put(key, value)).inject(traceContext, carrier);
|
||||
assertThat(carrier).containsExactly(entry(TRACE_PARENT, "00-0000000000000000123456789abcdef0-123456789abcdef1-01"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void extract_Nothing() {
|
||||
// Context remains untouched.
|
||||
|
||||
Reference in New Issue
Block a user