From be2e1249c6fba819ffef8707f239e1a0e39b7840 Mon Sep 17 00:00:00 2001 From: Jordan Worner Date: Wed, 16 Jun 2021 10:28:59 +0100 Subject: [PATCH 1/2] fix(propagator-b3): update extract to check for array --- .../src/B3Propagator.ts | 4 ++- .../test/B3Propagator.test.ts | 25 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/packages/opentelemetry-propagator-b3/src/B3Propagator.ts b/packages/opentelemetry-propagator-b3/src/B3Propagator.ts index 597873e36d..2e0f7acc52 100644 --- a/packages/opentelemetry-propagator-b3/src/B3Propagator.ts +++ b/packages/opentelemetry-propagator-b3/src/B3Propagator.ts @@ -61,7 +61,9 @@ export class B3Propagator implements TextMapPropagator { } extract(context: Context, carrier: unknown, getter: TextMapGetter): Context { - if (getter.get(carrier, B3_CONTEXT_HEADER)) { + const b3Context = getter.get(carrier, B3_CONTEXT_HEADER); + + if (b3Context && b3Context.length) { return this._b3SinglePropagator.extract(context, carrier, getter); } else { return this._b3MultiPropagator.extract(context, carrier, getter); diff --git a/packages/opentelemetry-propagator-b3/test/B3Propagator.test.ts b/packages/opentelemetry-propagator-b3/test/B3Propagator.test.ts index 6efec8336a..6e5a7b4a7c 100644 --- a/packages/opentelemetry-propagator-b3/test/B3Propagator.test.ts +++ b/packages/opentelemetry-propagator-b3/test/B3Propagator.test.ts @@ -152,6 +152,31 @@ describe('B3Propagator', () => { }); }); + it('extracts multi header b3 using array getter', () => { + const context = propagator.extract( + ROOT_CONTEXT, + b3MultiCarrier, + { + get(carrier, key) { + if (carrier == null || carrier[key] === undefined) { + return []; + } + return [carrier[key]]; + }, + + keys: defaultTextMapGetter.keys + } + ); + + const extractedSpanContext = trace.getSpanContext(context); + assert.deepStrictEqual(extractedSpanContext, { + spanId: '6e0c63257de34c92', + traceId: 'd4cda95b652f4a1592b449d5929fda1b', + isRemote: true, + traceFlags: TraceFlags.SAMPLED, + }); + }); + it('extracts single header over multi', () => { const context = propagator.extract( ROOT_CONTEXT, From a90e0415c46915b7dee8d035b01bb646431db106 Mon Sep 17 00:00:00 2001 From: Jordan Worner Date: Wed, 16 Jun 2021 15:23:03 +0100 Subject: [PATCH 2/2] fix(propagator-b3): normalize header value --- packages/opentelemetry-propagator-b3/src/B3Propagator.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/opentelemetry-propagator-b3/src/B3Propagator.ts b/packages/opentelemetry-propagator-b3/src/B3Propagator.ts index 2e0f7acc52..760752d84b 100644 --- a/packages/opentelemetry-propagator-b3/src/B3Propagator.ts +++ b/packages/opentelemetry-propagator-b3/src/B3Propagator.ts @@ -61,9 +61,10 @@ export class B3Propagator implements TextMapPropagator { } extract(context: Context, carrier: unknown, getter: TextMapGetter): Context { - const b3Context = getter.get(carrier, B3_CONTEXT_HEADER); + const header = getter.get(carrier, B3_CONTEXT_HEADER); + const b3Context = Array.isArray(header) ? header[0] : header; - if (b3Context && b3Context.length) { + if (b3Context) { return this._b3SinglePropagator.extract(context, carrier, getter); } else { return this._b3MultiPropagator.extract(context, carrier, getter);