From 7b7a372614b3d9b06c46386b009e5aaf06758198 Mon Sep 17 00:00:00 2001 From: Amir Blum Date: Wed, 10 Sep 2025 17:37:31 +0300 Subject: [PATCH 1/4] fix(otlp-transformer): trunc hrTime to int for nanos converting --- experimental/packages/otlp-transformer/src/common/utils.ts | 2 +- experimental/packages/otlp-transformer/test/trace.test.ts | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/experimental/packages/otlp-transformer/src/common/utils.ts b/experimental/packages/otlp-transformer/src/common/utils.ts index 756e80f4a4d..1d526645677 100644 --- a/experimental/packages/otlp-transformer/src/common/utils.ts +++ b/experimental/packages/otlp-transformer/src/common/utils.ts @@ -21,7 +21,7 @@ import { hexToBinary } from './hex-to-binary'; export function hrTimeToNanos(hrTime: HrTime): bigint { const NANOSECONDS = BigInt(1_000_000_000); - return BigInt(hrTime[0]) * NANOSECONDS + BigInt(hrTime[1]); + return BigInt(Math.trunc(hrTime[0])) * NANOSECONDS + BigInt(Math.trunc(hrTime[1])); } export function toLongBits(value: bigint): LongBits { diff --git a/experimental/packages/otlp-transformer/test/trace.test.ts b/experimental/packages/otlp-transformer/test/trace.test.ts index f76ea753f24..9fad977170f 100644 --- a/experimental/packages/otlp-transformer/test/trace.test.ts +++ b/experimental/packages/otlp-transformer/test/trace.test.ts @@ -544,6 +544,12 @@ describe('Trace', () => { assert.deepStrictEqual(JSON.parse(decoder.decode(serialized)), expected); }); + it('hrtime contains float value', () => { + const span = createSpanWithResource(resource); + (span as any).startTime = [1640715557.5, 342725388.5]; + JsonTraceSerializer.serializeRequest([span]); + }); + it('deserializes a response', () => { const expectedResponse = { partialSuccess: { From eb94a4660988b6beb7bf93f51d575a84c11ac53b Mon Sep 17 00:00:00 2001 From: Amir Blum Date: Wed, 10 Sep 2025 17:46:38 +0300 Subject: [PATCH 2/4] chore: add changelog --- experimental/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md index e69d5617b87..b4246d2723e 100644 --- a/experimental/CHANGELOG.md +++ b/experimental/CHANGELOG.md @@ -13,6 +13,7 @@ For notes on migrating to 2.x / 0.200.x see [the upgrade guide](doc/upgrade-to-2 ### :bug: Bug Fixes * fix(instrumentation-http): respect requireParent flag when INVALID_SPAN_CONTEXT is used [#4788](https://github.com/open-telemetry/opentelemetry-js/pull/4788) @reberhardt7 +* fix(otlp-transformer): trunc hrTime to int for nanos converting #5924(https://github.com/open-telemetry/opentelemetry-js/pull/5924) ### :books: Documentation From 491a03e99177bc9179f12db1c0b7194f8777d9dc Mon Sep 17 00:00:00 2001 From: Amir Blum Date: Wed, 10 Sep 2025 17:49:30 +0300 Subject: [PATCH 3/4] chore: lint fix --- experimental/packages/otlp-transformer/src/common/utils.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/experimental/packages/otlp-transformer/src/common/utils.ts b/experimental/packages/otlp-transformer/src/common/utils.ts index 1d526645677..f4f8cb65e41 100644 --- a/experimental/packages/otlp-transformer/src/common/utils.ts +++ b/experimental/packages/otlp-transformer/src/common/utils.ts @@ -21,7 +21,9 @@ import { hexToBinary } from './hex-to-binary'; export function hrTimeToNanos(hrTime: HrTime): bigint { const NANOSECONDS = BigInt(1_000_000_000); - return BigInt(Math.trunc(hrTime[0])) * NANOSECONDS + BigInt(Math.trunc(hrTime[1])); + return ( + BigInt(Math.trunc(hrTime[0])) * NANOSECONDS + BigInt(Math.trunc(hrTime[1])) + ); } export function toLongBits(value: bigint): LongBits { From 1d69ab5b1cdce1caf0d53d17044054856d3e1e0b Mon Sep 17 00:00:00 2001 From: Amir Blum Date: Wed, 10 Sep 2025 19:03:35 +0300 Subject: [PATCH 4/4] chore: changelog lint --- experimental/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md index b4246d2723e..978ca31b371 100644 --- a/experimental/CHANGELOG.md +++ b/experimental/CHANGELOG.md @@ -13,7 +13,7 @@ For notes on migrating to 2.x / 0.200.x see [the upgrade guide](doc/upgrade-to-2 ### :bug: Bug Fixes * fix(instrumentation-http): respect requireParent flag when INVALID_SPAN_CONTEXT is used [#4788](https://github.com/open-telemetry/opentelemetry-js/pull/4788) @reberhardt7 -* fix(otlp-transformer): trunc hrTime to int for nanos converting #5924(https://github.com/open-telemetry/opentelemetry-js/pull/5924) +* fix(otlp-transformer): trunc hrTime to int for nanos converting [#5924](https://github.com/open-telemetry/opentelemetry-js/pull/5924) @blumamir ### :books: Documentation