Skip to content

Commit 4cfcc59

Browse files
fix(propagator-aws-xray): correctly propagate over grpc (#2604)
Co-authored-by: Marc Pichler <[email protected]>
1 parent 12ee8db commit 4cfcc59

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

propagators/propagator-aws-xray/src/AWSXRayPropagator.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,10 @@ export class AWSXRayPropagator implements TextMapPropagator {
9999
if (!relevantHeaderKey) {
100100
return INVALID_SPAN_CONTEXT;
101101
}
102-
const traceHeader = getter.get(carrier, relevantHeaderKey);
102+
const rawTraceHeader = getter.get(carrier, relevantHeaderKey);
103+
const traceHeader = Array.isArray(rawTraceHeader)
104+
? rawTraceHeader[0]
105+
: rawTraceHeader;
103106

104107
if (!traceHeader || typeof traceHeader !== 'string') {
105108
return INVALID_SPAN_CONTEXT;

propagators/propagator-aws-xray/test/AWSXRayPropagator.test.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import {
2323
SpanContext,
2424
TraceFlags,
2525
trace,
26+
TextMapGetter,
2627
} from '@opentelemetry/api';
2728
import { TraceState } from '@opentelemetry/core';
2829

@@ -317,6 +318,33 @@ describe('AWSXRayPropagator', () => {
317318
});
318319
});
319320

321+
it('should extract multi header using array getter', () => {
322+
carrier[AWSXRAY_TRACE_ID_HEADER] =
323+
'Root=1-8a3c60f7-d188f8fa79d48a391a778fa6;Parent=53995c3f42cd8ad8;Sampled=1';
324+
const multiGetter: TextMapGetter = {
325+
get(carrier, key) {
326+
if (carrier == null || carrier[key] === undefined) {
327+
return undefined;
328+
}
329+
return [carrier[key]];
330+
},
331+
keys: function (carrier: any): string[] {
332+
return defaultTextMapGetter.keys(carrier);
333+
},
334+
};
335+
336+
const extractedSpanContext = trace
337+
.getSpan(xrayPropagator.extract(ROOT_CONTEXT, carrier, multiGetter))
338+
?.spanContext();
339+
340+
assert.deepStrictEqual(extractedSpanContext, {
341+
traceId: TRACE_ID,
342+
spanId: SPAN_ID,
343+
isRemote: true,
344+
traceFlags: TraceFlags.SAMPLED,
345+
});
346+
});
347+
320348
describe('.fields()', () => {
321349
it('should return a field with AWS X-Ray Trace ID header', () => {
322350
const expectedField = xrayPropagator.fields();

0 commit comments

Comments
 (0)