From 185d10e3958e91c69db392f2463c291788df263b Mon Sep 17 00:00:00 2001 From: Bogdan Drutu Date: Thu, 22 Oct 2020 21:33:41 -0700 Subject: [PATCH] Serialize the entire trace flags not only the sample bit (#1774) * Serialize the entire trace flags not only the sample bit Signed-off-by: Bogdan Drutu * Add test for more than just sampling bit in the context Signed-off-by: Bogdan Drutu * Update api/src/test/java/io/opentelemetry/trace/propagation/HttpTraceContextTest.java Co-authored-by: Anuraag Agrawal --- .../main/java/io/opentelemetry/trace/SpanContext.java | 3 +-- .../trace/propagation/HttpTraceContextTest.java | 11 +++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/api/src/main/java/io/opentelemetry/trace/SpanContext.java b/api/src/main/java/io/opentelemetry/trace/SpanContext.java index 9b79833408..b514f9b84e 100644 --- a/api/src/main/java/io/opentelemetry/trace/SpanContext.java +++ b/api/src/main/java/io/opentelemetry/trace/SpanContext.java @@ -120,8 +120,7 @@ public abstract class SpanContext { public abstract byte getTraceFlags(); public void copyTraceFlagsHexTo(char[] dest, int destOffset) { - dest[destOffset] = '0'; - dest[destOffset + 1] = isSampled() ? '1' : '0'; + BigendianEncoding.byteToBase16String(getTraceFlags(), dest, destOffset); } /** diff --git a/api/src/test/java/io/opentelemetry/trace/propagation/HttpTraceContextTest.java b/api/src/test/java/io/opentelemetry/trace/propagation/HttpTraceContextTest.java index 37ae48f10d..a9b2eb9039 100644 --- a/api/src/test/java/io/opentelemetry/trace/propagation/HttpTraceContextTest.java +++ b/api/src/test/java/io/opentelemetry/trace/propagation/HttpTraceContextTest.java @@ -177,6 +177,17 @@ class HttpTraceContextTest { TRACE_ID_BASE16, SPAN_ID_BASE16, SAMPLED_TRACE_OPTIONS, TRACE_STATE_DEFAULT)); } + @Test + void extractAndInject_MoreFlags() { + String traceParent = "00-" + TRACE_ID_BASE16 + "-" + SPAN_ID_BASE16 + "-03"; + Map extractCarrier = new LinkedHashMap<>(); + extractCarrier.put(TRACE_PARENT, traceParent); + Context context = httpTraceContext.extract(Context.current(), extractCarrier, getter); + Map injectCarrier = new LinkedHashMap<>(); + httpTraceContext.inject(context, injectCarrier, setter); + assertThat(extractCarrier).isEqualTo(injectCarrier); + } + @Test void extract_NotSampledContext() { Map carrier = new LinkedHashMap<>();