Skip to content

Commit c9321b2

Browse files
Merge pull request #27 from ExpediaDotCom/propagation-key-fix
making propagation keys case insensitive
2 parents 1d2f172 + 52e74ab commit c9321b2

3 files changed

Lines changed: 28 additions & 12 deletions

File tree

integration-tests/docker-compose.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
version: '3'
22
services:
33
haystack_agent:
4-
image: expediadotcom/haystack-agent:0.1
4+
image: expediadotcom/haystack-agent:0.1.3
55
depends_on:
66
- zookeeper
77
- kafkasvc
@@ -37,4 +37,4 @@ services:
3737
volumes:
3838
- /var/run/docker.sock:/var/run/docker.sock
3939
ports:
40-
- "9092:9092"
40+
- "9092:9092"

src/propagators/textmap_propagator.ts

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,25 @@ export default class TextMapPropagator implements Propagator {
4242

4343
extract(carrier: any): SpanContext {
4444
const baggage = {};
45+
let traceId = '';
46+
let spanId = '';
47+
let parentSpanId = '';
48+
4549
for (const key in carrier) {
46-
if (carrier.hasOwnProperty(key) && key.indexOf(this._opts.baggageKeyPrefix()) === 0) {
47-
const keySansPrefix = key.substring(this._opts.baggageKeyPrefix().length);
48-
baggage[keySansPrefix] = this._codex.decode(carrier[key]);
49-
}
50+
if (carrier.hasOwnProperty(key)) {
51+
const lcKey = key.toLowerCase();
52+
if (lcKey.indexOf(this._opts.baggageKeyPrefix().toLowerCase()) === 0) {
53+
const keySansPrefix = key.substring(this._opts.baggageKeyPrefix().length);
54+
baggage[keySansPrefix] = this._codex.decode(carrier[key]);
55+
} else if (lcKey === this._opts.traceIdKey().toLowerCase()) {
56+
traceId = carrier[key];
57+
} else if (lcKey === this._opts.spanIdKey().toLowerCase()) {
58+
spanId = carrier[key];
59+
} else if (lcKey === this._opts.parentSpanIdKey().toLowerCase()) {
60+
parentSpanId = carrier[key];
61+
}
62+
}
5063
}
51-
return new SpanContext(carrier[this._opts.traceIdKey()], carrier[this._opts.spanIdKey()], carrier[this._opts.parentSpanIdKey()], baggage);
64+
return new SpanContext(traceId, spanId, parentSpanId, baggage);
5265
}
5366
}

tests/unit/tracer.spec.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,8 @@ describe('Tracer tests', () => {
131131
const tracer = new Tracer(dummyServiceName, inMemSpanStore, commonTags);
132132

133133
const startServerSpanFields = new StartSpanFields();
134-
const carrier = {'Trace-ID': 'T1' , 'Span-ID': 'S1', 'Parent-ID': 'P1', 'Baggage-myKey': 'myVal'};
134+
console.log('starting .....');
135+
const carrier = {'Trace-ID': 'T1' , 'Span-ID': 'S1', 'parent-id': 'P1', 'Baggage-myKey': 'myVal', 'baggage-mylowercasekey': 'myval'};
135136
const clientSpanContext = tracer.extract(opentracing.FORMAT_TEXT_MAP, carrier);
136137
startServerSpanFields.childOf = clientSpanContext;
137138
const serverSpan = tracer.startSpan(dummyOperation, startServerSpanFields);
@@ -140,10 +141,12 @@ describe('Tracer tests', () => {
140141

141142
serverSpan.finish();
142143
expect(inMemSpanStore.spans().length).equal(1);
143-
const receviedSpan = inMemSpanStore.spans()[0];
144-
expect(receviedSpan.context().traceId).eq('T1');
145-
expect(receviedSpan.context().spanId === 'S1').eq(true);
146-
expect(receviedSpan.context().parentSpanId).eq('P1');
144+
const receivedSpan = inMemSpanStore.spans()[0];
145+
expect(receivedSpan.context().traceId).eq('T1');
146+
expect(receivedSpan.context().spanId === 'S1').eq(true);
147+
expect(receivedSpan.context().parentSpanId).eq('P1');
148+
expect(receivedSpan.context().baggage['myKey']).eq('myVal');
149+
expect(receivedSpan.context().baggage['mylowercasekey']).eq('myval');
147150
});
148151

149152
it('should create server span as a non-sharable span if tracer is in dualspan mode and context is extracted', () => {

0 commit comments

Comments
 (0)