From 1ec629949711b21c537e432175ce25bbcadb322b Mon Sep 17 00:00:00 2001 From: Siddhitha Bhoopathy Date: Thu, 22 Oct 2026 11:38:58 -0400 Subject: [PATCH 1/2] fix(trace): keep sampling priority numeric in SpanContextWrapper.fromTraceContext Co-authored-by: Cursor --- src/trace/context/extractor.spec.ts | 4 ++-- src/trace/context/extractors/custom.spec.ts | 2 +- src/trace/span-context-wrapper.spec.ts | 20 +++++++++++++++++++- src/trace/span-context-wrapper.ts | 2 +- src/trace/xray-service.spec.ts | 2 +- 5 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/trace/context/extractor.spec.ts b/src/trace/context/extractor.spec.ts index 0e553db6a..6eb84d57f 100644 --- a/src/trace/context/extractor.spec.ts +++ b/src/trace/context/extractor.spec.ts @@ -144,7 +144,7 @@ describe("TraceContextExtractor", () => { expect(traceContext?.toTraceId()).toBe("4110911582297405551"); expect(traceContext?.toSpanId()).toBe("797643193680388251"); - expect(traceContext?.sampleMode()).toBe("2"); + expect(traceContext?.sampleMode()).toBe(2); expect(traceContext?.source).toBe("event"); }); }); @@ -797,7 +797,7 @@ describe("TraceContextExtractor", () => { expect(traceContext?.toTraceId()).toBe("4110911582297405557"); expect(traceContext?.toSpanId()).toBe("797643193680388254"); - expect(traceContext?.sampleMode()).toBe("2"); + expect(traceContext?.sampleMode()).toBe(2); expect(traceContext?.source).toBe("xray"); }); }); diff --git a/src/trace/context/extractors/custom.spec.ts b/src/trace/context/extractors/custom.spec.ts index 916e5e663..f92d4fe76 100644 --- a/src/trace/context/extractors/custom.spec.ts +++ b/src/trace/context/extractors/custom.spec.ts @@ -106,7 +106,7 @@ describe("CustomTraceExtractor", () => { expect(traceContext?.toTraceId()).toBe("4110911582297405551"); expect(traceContext?.toSpanId()).toBe("797643193680388251"); - expect(traceContext?.sampleMode()).toBe("2"); + expect(traceContext?.sampleMode()).toBe(2); expect(traceContext?.source).toBe("event"); }); diff --git a/src/trace/span-context-wrapper.spec.ts b/src/trace/span-context-wrapper.spec.ts index 102d4eb7b..da5ab7475 100644 --- a/src/trace/span-context-wrapper.spec.ts +++ b/src/trace/span-context-wrapper.spec.ts @@ -15,12 +15,30 @@ describe("SpanContextWrapper", () => { expect(spanContext?.toTraceId()).toBe("8768810343773813232"); expect(spanContext?.toSpanId()).toBe("6918894271950871724"); - expect(spanContext?.sampleMode()).toBe("1"); + expect(spanContext?.sampleMode()).toBe(1); expect(spanContext?.source).toBe("event"); expect(spanContext?.spanContext._traceId.toArray()).toEqual([121, 177, 18, 140, 107, 104, 185, 240]); expect(spanContext?.spanContext._spanId.toArray()).toEqual([96, 4, 217, 174, 182, 29, 220, 172]); }); + // dd-trace only injects x-datadog-sampling-priority when the priority is an integer. + it.each([ + ["USER_KEEP", SampleMode.USER_KEEP], + ["USER_REJECT", SampleMode.USER_REJECT], + ["AUTO_KEEP", SampleMode.AUTO_KEEP], + ["AUTO_REJECT", SampleMode.AUTO_REJECT], + ])("fromTraceContext keeps %s sampling priority as an integer", (_, sampleMode) => { + const spanContext = SpanContextWrapper.fromTraceContext({ + traceId: "8768810343773813232", + parentId: "6918894271950871724", + sampleMode, + source: TraceSource.Xray, + }); + + expect(spanContext?.sampleMode()).toBe(sampleMode); + expect(Number.isInteger(spanContext?.spanContext._sampling.priority)).toBe(true); + }); + describe("sampleMode", () => { it("should return AUTO_KEEP when sampling priority is not available in spanContext", () => { const spanContext = new SpanContextWrapper( diff --git a/src/trace/span-context-wrapper.ts b/src/trace/span-context-wrapper.ts index b7ec6a4b8..d997c7b6b 100644 --- a/src/trace/span-context-wrapper.ts +++ b/src/trace/span-context-wrapper.ts @@ -42,7 +42,7 @@ export class SpanContextWrapper implements SpanContext { return null; } - const samplingPriority = traceContext.sampleMode.toString(10); + const samplingPriority = traceContext.sampleMode; const source = traceContext.source; try { // Try requiring class from the tracer. diff --git a/src/trace/xray-service.spec.ts b/src/trace/xray-service.spec.ts index e746d1e03..2824ce193 100644 --- a/src/trace/xray-service.spec.ts +++ b/src/trace/xray-service.spec.ts @@ -52,7 +52,7 @@ describe("XrayService", () => { expect(traceContext?.toTraceId()).toBe("3995693151288333088"); expect(traceContext?.toSpanId()).toBe("10713633173203262661"); - expect(traceContext?.sampleMode()).toBe("2"); + expect(traceContext?.sampleMode()).toBe(2); expect(traceContext?.source).toBe("xray"); }); From 8f152516c15b91148f2cb4199f1558432f2572c6 Mon Sep 17 00:00:00 2001 From: Siddhitha Bhoopathy Date: Thu, 22 Oct 2026 13:06:48 -0400 Subject: [PATCH 2/2] test: update remaining string sampling priority assertions and custom-extractor snapshot Co-authored-by: Cursor --- .../snapshots/logs/cjs-custom-extractor.log | 54 ++++++++++++------- src/trace/context/extractors/sns-sqs.spec.ts | 2 +- src/trace/context/extractors/sns.spec.ts | 2 +- src/trace/context/extractors/sqs.spec.ts | 2 +- src/trace/xray-service.spec.ts | 2 +- 5 files changed, 40 insertions(+), 22 deletions(-) diff --git a/integration_tests_local/snapshots/logs/cjs-custom-extractor.log b/integration_tests_local/snapshots/logs/cjs-custom-extractor.log index b9a881245..fca10c6eb 100644 --- a/integration_tests_local/snapshots/logs/cjs-custom-extractor.log +++ b/integration_tests_local/snapshots/logs/cjs-custom-extractor.log @@ -57,7 +57,8 @@ XXXX [INFO] (rapid) INVOKE START(requestId: XXXX) }, "metrics": { "_dd.measured": 1, - "process_id":XXXX + "process_id":XXXX, + "_sampling_priority_v1": 1 }, "start":XXXX, "duration":XXXX @@ -96,7 +97,8 @@ XXXX [INFO] (rapid) INVOKE START(requestId: XXXX) }, "metrics": { "_dd.measured": 1, - "process_id":XXXX + "process_id":XXXX, + "_sampling_priority_v1": 1 }, "start":XXXX, "duration":XXXX @@ -162,7 +164,8 @@ XXXX [INFO] (rapid) INVOKE START(requestId: XXXX) "metrics": { "_dd.measured": 1, "size_bytes": 37, - "process_id":XXXX + "process_id":XXXX, + "_sampling_priority_v1": 1 }, "start":XXXX, "duration":XXXX @@ -198,7 +201,8 @@ XXXX [INFO] (rapid) INVOKE START(requestId: XXXX) }, "metrics": { "_dd.measured": 1, - "process_id":XXXX + "process_id":XXXX, + "_sampling_priority_v1": 1 }, "start":XXXX, "duration":XXXX @@ -264,7 +268,8 @@ XXXX [INFO] (rapid) INVOKE START(requestId: XXXX) "metrics": { "_dd.measured": 1, "size_bytes": 37, - "process_id":XXXX + "process_id":XXXX, + "_sampling_priority_v1": 1 }, "start":XXXX, "duration":XXXX @@ -300,7 +305,8 @@ XXXX [INFO] (rapid) INVOKE START(requestId: XXXX) }, "metrics": { "_dd.measured": 1, - "process_id":XXXX + "process_id":XXXX, + "_sampling_priority_v1": 1 }, "start":XXXX, "duration":XXXX @@ -366,7 +372,8 @@ XXXX [INFO] (rapid) INVOKE START(requestId: XXXX) "metrics": { "_dd.measured": 1, "size_bytes": 37, - "process_id":XXXX + "process_id":XXXX, + "_sampling_priority_v1": 1 }, "start":XXXX, "duration":XXXX @@ -402,7 +409,8 @@ XXXX [INFO] (rapid) INVOKE START(requestId: XXXX) }, "metrics": { "_dd.measured": 1, - "process_id":XXXX + "process_id":XXXX, + "_sampling_priority_v1": 1 }, "start":XXXX, "duration":XXXX @@ -467,7 +475,8 @@ START RequestId: XXXX Version: $LATEST "metrics": { "_dd.measured": 1, "object_size": 8388608, - "process_id":XXXX + "process_id":XXXX, + "_sampling_priority_v1": 1 }, "start":XXXX, "duration":XXXX @@ -503,7 +512,8 @@ START RequestId: XXXX Version: $LATEST }, "metrics": { "_dd.measured": 1, - "process_id":XXXX + "process_id":XXXX, + "_sampling_priority_v1": 1 }, "start":XXXX, "duration":XXXX @@ -568,7 +578,8 @@ START RequestId: XXXX Version: $LATEST "metrics": { "_dd.measured": 1, "object_size": 100, - "process_id":XXXX + "process_id":XXXX, + "_sampling_priority_v1": 1 }, "start":XXXX, "duration":XXXX @@ -604,7 +615,8 @@ START RequestId: XXXX Version: $LATEST }, "metrics": { "_dd.measured": 1, - "process_id":XXXX + "process_id":XXXX, + "_sampling_priority_v1": 1 }, "start":XXXX, "duration":XXXX @@ -669,7 +681,8 @@ XXXX [INFO] (rapid) INVOKE START(requestId: XXXX) "metrics": { "_dd.measured": 1, "object_size": 100, - "process_id":XXXX + "process_id":XXXX, + "_sampling_priority_v1": 1 }, "start":XXXX, "duration":XXXX @@ -705,7 +718,8 @@ XXXX [INFO] (rapid) INVOKE START(requestId: XXXX) }, "metrics": { "_dd.measured": 1, - "process_id":XXXX + "process_id":XXXX, + "_sampling_priority_v1": 1 }, "start":XXXX, "duration":XXXX @@ -769,7 +783,8 @@ XXXX [INFO] (rapid) INVOKE START(requestId: XXXX) }, "metrics": { "_dd.measured": 1, - "process_id":XXXX + "process_id":XXXX, + "_sampling_priority_v1": 1 }, "start":XXXX, "duration":XXXX @@ -805,7 +820,8 @@ XXXX [INFO] (rapid) INVOKE START(requestId: XXXX) }, "metrics": { "_dd.measured": 1, - "process_id":XXXX + "process_id":XXXX, + "_sampling_priority_v1": 1 }, "start":XXXX, "duration":XXXX @@ -868,7 +884,8 @@ XXXX [INFO] (rapid) INVOKE START(requestId: XXXX) "metrics": { "_dd.measured": 1, "retry_count": 1, - "process_id":XXXX + "process_id":XXXX, + "_sampling_priority_v1": 1 }, "start":XXXX, "duration":XXXX @@ -904,7 +921,8 @@ XXXX [INFO] (rapid) INVOKE START(requestId: XXXX) }, "metrics": { "_dd.measured": 1, - "process_id":XXXX + "process_id":XXXX, + "_sampling_priority_v1": 1 }, "start":XXXX, "duration":XXXX diff --git a/src/trace/context/extractors/sns-sqs.spec.ts b/src/trace/context/extractors/sns-sqs.spec.ts index b6b6a86bd..c1be783cd 100644 --- a/src/trace/context/extractors/sns-sqs.spec.ts +++ b/src/trace/context/extractors/sns-sqs.spec.ts @@ -271,7 +271,7 @@ describe("SNSSQSEventTraceExtractor", () => { expect(traceContext?.toTraceId()).toBe("5027664352514971920"); expect(traceContext?.toSpanId()).toBe("1797917631284315439"); - expect(traceContext?.sampleMode()).toBe("1"); + expect(traceContext?.sampleMode()).toBe(1); expect(traceContext?.source).toBe("event"); }); diff --git a/src/trace/context/extractors/sns.spec.ts b/src/trace/context/extractors/sns.spec.ts index d68521cd3..cd214c4dc 100644 --- a/src/trace/context/extractors/sns.spec.ts +++ b/src/trace/context/extractors/sns.spec.ts @@ -315,7 +315,7 @@ describe("SNSEventTraceExtractor", () => { expect(traceContext?.toTraceId()).toBe("1705928277274000281"); expect(traceContext?.toSpanId()).toBe("1366252104075042743"); - expect(traceContext?.sampleMode()).toBe("1"); + expect(traceContext?.sampleMode()).toBe(1); expect(traceContext?.source).toBe("event"); }); diff --git a/src/trace/context/extractors/sqs.spec.ts b/src/trace/context/extractors/sqs.spec.ts index f6eabdbb7..a222bf751 100644 --- a/src/trace/context/extractors/sqs.spec.ts +++ b/src/trace/context/extractors/sqs.spec.ts @@ -286,7 +286,7 @@ describe("SQSEventTraceExtractor", () => { expect(traceContext?.toTraceId()).toBe("625397077193750208"); expect(traceContext?.toSpanId()).toBe("6538302989251745223"); - expect(traceContext?.sampleMode()).toBe("1"); + expect(traceContext?.sampleMode()).toBe(1); expect(traceContext?.source).toBe("event"); }); diff --git a/src/trace/xray-service.spec.ts b/src/trace/xray-service.spec.ts index 2824ce193..af41e943d 100644 --- a/src/trace/xray-service.spec.ts +++ b/src/trace/xray-service.spec.ts @@ -371,7 +371,7 @@ describe("XrayService", () => { expect(ddTraceContext?.toTraceId()).toEqual("625397077193750208"); expect(ddTraceContext?.toSpanId()).toEqual("6538302989251745223"); - expect(ddTraceContext?.sampleMode()).toEqual("1"); + expect(ddTraceContext?.sampleMode()).toEqual(1); }); it("returns null when AWS trace header is NOT injected by dd-trace", () => {