Skip to content

Commit 8fd9f24

Browse files
vivekmahajanvmahajanhopperhughsimpson
authored
Properly parse unsigned integer trace id (#1305)
* Fix issue * import Long * Add tests * fix test name * checking upper bound * fix tests --------- Co-authored-by: Vivek Mahajan <[email protected]> Co-authored-by: hughsimpson <[email protected]>
1 parent 99fb2df commit 8fd9f24

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

core/kamon-core-tests/src/test/scala/kamon/trace/DataDogSpanPropagationSpec.scala

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,28 @@ class DataDogSpanPropagationSpec extends AnyWordSpec with Matchers with OptionVa
118118
}
119119
}
120120

121+
122+
"SpanPropagation.DataDog.decodeUnsignedLongToHex" should {
123+
"decode unsigned long to expected hex value " in {
124+
val expectedHex1 = "0";
125+
val actualHex1 = SpanPropagation.DataDog.decodeUnsignedLongToHex("0");
126+
expectedHex1 shouldBe actualHex1;
127+
128+
val expectedHex2 = "ff";
129+
val actualHex2 = SpanPropagation.DataDog.decodeUnsignedLongToHex("255");
130+
expectedHex2 shouldBe actualHex2;
131+
132+
val expectedHex3 = "c5863f7d672b65bf";
133+
val actualHex3 = SpanPropagation.DataDog.decodeUnsignedLongToHex("14233133480185390527");
134+
expectedHex3 shouldBe actualHex3;
135+
136+
val expectedHex4 = "ffffffffffffffff";
137+
val actualHex4 = SpanPropagation.DataDog.decodeUnsignedLongToHex("18446744073709551615");
138+
expectedHex4 shouldBe actualHex4;
139+
140+
}
141+
}
142+
121143
def unsignedLongString(id: String): String = BigInt(id, 16).toString
122144

123145
def headerReaderFromMap(map: Map[String, String]): HttpPropagation.HeaderReader = new HttpPropagation.HeaderReader {

core/kamon-core/src/main/scala/kamon/trace/SpanPropagation.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import kamon.context.HttpPropagation.{HeaderReader, HeaderWriter}
2424
import kamon.context.generated.binary.span.{Span => ColferSpan}
2525
import kamon.context.{Context, _}
2626
import kamon.trace.Trace.SamplingDecision
27+
import java.lang.{Long => JLong}
2728

2829
import scala.util.Try
2930

@@ -450,7 +451,7 @@ object W3CTraceContext {
450451
* https://docs.datadoghq.com/tracing/guide/send_traces_to_agent_by_api/
451452
*/
452453
def decodeUnsignedLongToHex(id: String): String =
453-
urlDecode(id).toLong.toHexString
454+
JLong.parseUnsignedLong(urlDecode(id), 10).toHexString
454455
}
455456

456457
class DataDog extends Propagation.EntryReader[HeaderReader] with Propagation.EntryWriter[HeaderWriter] {

0 commit comments

Comments
 (0)