diff --git a/packages/opentelemetry-propagator-jaeger/src/JaegerPropagator.ts b/packages/opentelemetry-propagator-jaeger/src/JaegerPropagator.ts index 18cf2cee59d..f41f6adf131 100644 --- a/packages/opentelemetry-propagator-jaeger/src/JaegerPropagator.ts +++ b/packages/opentelemetry-propagator-jaeger/src/JaegerPropagator.ts @@ -141,9 +141,10 @@ function deserializeSpanContext(serializedString: string): SpanContext | null { return null; } - const [_traceId, spanId, , flags] = headers; + const [_traceId, _spanId, , flags] = headers; const traceId = _traceId.padStart(32, '0'); + const spanId = _spanId.padStart(16, '0'); const traceFlags = flags.match(/^[0-9a-f]{2}$/i) ? parseInt(flags) & 1 : 1; return { traceId, spanId, isRemote: true, traceFlags }; diff --git a/packages/opentelemetry-propagator-jaeger/test/JaegerPropagator.test.ts b/packages/opentelemetry-propagator-jaeger/test/JaegerPropagator.test.ts index be93f051949..f0683898bff 100644 --- a/packages/opentelemetry-propagator-jaeger/test/JaegerPropagator.test.ts +++ b/packages/opentelemetry-propagator-jaeger/test/JaegerPropagator.test.ts @@ -299,6 +299,21 @@ describe('JaegerPropagator', () => { assert(typeof firstEntry !== 'undefined'); assert(firstEntry.value === 'one'); }); + + it('should 0-pad span and trace id from header', () => { + carrier[UBER_TRACE_ID_HEADER] = '4cda95b652f4a1592b449d5929fda1b:e0c63257de34c92:0:01'; + const extractedSpanContext = trace.getSpanContext( + jaegerPropagator.extract( + ROOT_CONTEXT, + carrier, + defaultTextMapGetter + ) + ); + + assert.ok(extractedSpanContext); + assert.equal(extractedSpanContext.spanId, '0e0c63257de34c92'); + assert.equal(extractedSpanContext.traceId, '04cda95b652f4a1592b449d5929fda1b'); + }); }); describe('.fields()', () => {