Skip to content

Commit 64c8ef5

Browse files
authored
chore: do not inject span context when instrumentation is suppressed (#2082)
* chore: do not inject span context when instrumentation is suppressed * chore: review comments
1 parent 80ff5e2 commit 64c8ef5

File tree

11 files changed

+122
-11
lines changed

11 files changed

+122
-11
lines changed

packages/opentelemetry-core/src/baggage/propagation/HttpBaggage.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import {
2525
TextMapSetter,
2626
createBaggage,
2727
baggageEntryMetadataFromString,
28+
isInstrumentationSuppressed,
2829
} from '@opentelemetry/api';
2930

3031
const KEY_PAIR_SEPARATOR = '=';
@@ -49,7 +50,7 @@ export const MAX_TOTAL_LENGTH = 8192;
4950
export class HttpBaggage implements TextMapPropagator {
5051
inject(context: Context, carrier: unknown, setter: TextMapSetter) {
5152
const baggage = getBaggage(context);
52-
if (!baggage) return;
53+
if (!baggage || isInstrumentationSuppressed(context)) return;
5354
const keyPairs = this._getKeyPairs(baggage)
5455
.filter((pair: string) => {
5556
return pair.length <= MAX_PER_NAME_VALUE_PAIRS;

packages/opentelemetry-core/src/context/propagation/HttpTraceContext.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import {
1818
Context,
1919
getSpanContext,
20+
isInstrumentationSuppressed,
2021
isSpanContextValid,
2122
setSpanContext,
2223
SpanContext,
@@ -74,7 +75,12 @@ export function parseTraceParent(traceParent: string): SpanContext | null {
7475
export class HttpTraceContext implements TextMapPropagator {
7576
inject(context: Context, carrier: unknown, setter: TextMapSetter) {
7677
const spanContext = getSpanContext(context);
77-
if (!spanContext || !isSpanContextValid(spanContext)) return;
78+
if (
79+
!spanContext ||
80+
isInstrumentationSuppressed(context) ||
81+
!isSpanContextValid(spanContext)
82+
)
83+
return;
7884

7985
const traceParent = `${VERSION}-${spanContext.traceId}-${
8086
spanContext.spanId

packages/opentelemetry-core/test/context/HttpTraceContext.test.ts

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,15 @@
1717
import {
1818
defaultTextMapGetter,
1919
defaultTextMapSetter,
20-
SpanContext,
21-
TraceFlags,
2220
getSpanContext,
23-
setSpanContext,
24-
INVALID_TRACEID,
2521
INVALID_SPANID,
22+
INVALID_TRACEID,
23+
ROOT_CONTEXT,
24+
setSpanContext,
25+
SpanContext,
26+
suppressInstrumentation,
27+
TraceFlags,
2628
} from '@opentelemetry/api';
27-
import { ROOT_CONTEXT } from '@opentelemetry/api';
2829
import * as assert from 'assert';
2930
import {
3031
HttpTraceContext,
@@ -81,6 +82,22 @@ describe('HttpTraceContext', () => {
8182
assert.deepStrictEqual(carrier[TRACE_STATE_HEADER], 'foo=bar,baz=qux');
8283
});
8384

85+
it('should not set traceparent and tracestate header if instrumentation is suppressed', () => {
86+
const spanContext: SpanContext = {
87+
traceId: 'd4cda95b652f4a1592b449d5929fda1b',
88+
spanId: '6e0c63257de34c92',
89+
traceFlags: TraceFlags.SAMPLED,
90+
};
91+
92+
httpTraceContext.inject(
93+
suppressInstrumentation(setSpanContext(ROOT_CONTEXT, spanContext)),
94+
carrier,
95+
defaultTextMapSetter
96+
);
97+
assert.strictEqual(carrier[TRACE_PARENT_HEADER], undefined);
98+
assert.strictEqual(carrier[TRACE_STATE_HEADER], undefined);
99+
});
100+
84101
it('should ignore invalid span context', () => {
85102
const spanContext: SpanContext = {
86103
traceId: INVALID_TRACEID,
@@ -90,7 +107,7 @@ describe('HttpTraceContext', () => {
90107
};
91108

92109
httpTraceContext.inject(
93-
setSpanContext(ROOT_CONTEXT, spanContext),
110+
suppressInstrumentation(setSpanContext(ROOT_CONTEXT, spanContext)),
94111
carrier,
95112
defaultTextMapSetter
96113
);

packages/opentelemetry-propagator-b3/src/B3MultiPropagator.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import {
1818
Context,
1919
getSpanContext,
20+
isInstrumentationSuppressed,
2021
isSpanContextValid,
2122
isValidSpanId,
2223
isValidTraceId,
@@ -95,7 +96,12 @@ function getTraceFlags(
9596
export class B3MultiPropagator implements TextMapPropagator {
9697
inject(context: Context, carrier: unknown, setter: TextMapSetter) {
9798
const spanContext = getSpanContext(context);
98-
if (!spanContext || !isSpanContextValid(spanContext)) return;
99+
if (
100+
!spanContext ||
101+
!isSpanContextValid(spanContext) ||
102+
isInstrumentationSuppressed(context)
103+
)
104+
return;
99105

100106
const debug = context.getValue(B3_DEBUG_FLAG_KEY);
101107
setter.set(carrier, X_B3_TRACE_ID, spanContext.traceId);

packages/opentelemetry-propagator-b3/src/B3Propagator.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
import {
1818
Context,
19+
isInstrumentationSuppressed,
1920
TextMapGetter,
2021
TextMapPropagator,
2122
TextMapSetter,
@@ -53,6 +54,9 @@ export class B3Propagator implements TextMapPropagator {
5354
}
5455

5556
inject(context: Context, carrier: unknown, setter: TextMapSetter) {
57+
if (isInstrumentationSuppressed(context)) {
58+
return;
59+
}
5660
this._inject(context, carrier, setter);
5761
}
5862

packages/opentelemetry-propagator-b3/src/B3SinglePropagator.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import {
1818
Context,
1919
getSpanContext,
20+
isInstrumentationSuppressed,
2021
isSpanContextValid,
2122
isValidSpanId,
2223
isValidTraceId,
@@ -52,7 +53,12 @@ function convertToTraceFlags(samplingState: string | undefined): TraceFlags {
5253
export class B3SinglePropagator implements TextMapPropagator {
5354
inject(context: Context, carrier: unknown, setter: TextMapSetter) {
5455
const spanContext = getSpanContext(context);
55-
if (!spanContext || !isSpanContextValid(spanContext)) return;
56+
if (
57+
!spanContext ||
58+
!isSpanContextValid(spanContext) ||
59+
isInstrumentationSuppressed(context)
60+
)
61+
return;
5662

5763
const samplingState =
5864
context.getValue(B3_DEBUG_FLAG_KEY) || spanContext.traceFlags & 0x1;

packages/opentelemetry-propagator-b3/test/B3MultiPropagator.test.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import {
2020
getSpanContext,
2121
setSpanContext,
2222
SpanContext,
23+
suppressInstrumentation,
2324
TraceFlags,
2425
} from '@opentelemetry/api';
2526
import { ROOT_CONTEXT } from '@opentelemetry/api';
@@ -138,6 +139,23 @@ describe('B3MultiPropagator', () => {
138139
assert.deepStrictEqual(carrier[X_B3_FLAGS], undefined);
139140
assert.deepStrictEqual(carrier[X_B3_PARENT_SPAN_ID], undefined);
140141
});
142+
143+
it('should not inject if instrumentation suppressed', () => {
144+
const spanContext = {
145+
traceId: 'd4cda95b652f4a1592b449d5929fda1b',
146+
spanId: '6e0c63257de34c92',
147+
traceFlags: TraceFlags.SAMPLED,
148+
};
149+
b3Propagator.inject(
150+
suppressInstrumentation(setSpanContext(ROOT_CONTEXT, spanContext)),
151+
carrier,
152+
defaultTextMapSetter
153+
);
154+
assert.strictEqual(carrier[X_B3_TRACE_ID], undefined);
155+
assert.strictEqual(carrier[X_B3_SPAN_ID], undefined);
156+
assert.strictEqual(carrier[X_B3_FLAGS], undefined);
157+
assert.strictEqual(carrier[X_B3_PARENT_SPAN_ID], undefined);
158+
});
141159
});
142160

143161
describe('.extract()', () => {

packages/opentelemetry-propagator-b3/test/B3Propagator.test.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import {
2323
getSpanContext,
2424
setSpanContext,
2525
ROOT_CONTEXT,
26+
suppressInstrumentation,
2627
} from '@opentelemetry/api';
2728
import { B3Propagator } from '../src/B3Propagator';
2829
import { B3InjectEncoding } from '../src/types';
@@ -88,6 +89,24 @@ describe('B3Propagator', () => {
8889
assert.strictEqual(carrier[X_B3_SPAN_ID], 'e457b5a2e4d86bd1');
8990
assert.strictEqual(carrier[X_B3_SAMPLED], '1');
9091
});
92+
93+
it('should not inject if instrumentation suppressed', () => {
94+
propagator = new B3Propagator();
95+
96+
const spanContext: SpanContext = {
97+
traceId: '80f198ee56343ba864fe8b2a57d3eff7',
98+
spanId: 'e457b5a2e4d86bd1',
99+
traceFlags: TraceFlags.SAMPLED,
100+
};
101+
102+
propagator.inject(
103+
suppressInstrumentation(setSpanContext(ROOT_CONTEXT, spanContext)),
104+
carrier,
105+
defaultTextMapSetter
106+
);
107+
108+
assert.strictEqual(carrier[B3_CONTEXT_HEADER], undefined);
109+
});
91110
});
92111

93112
describe('.extract()', () => {

packages/opentelemetry-propagator-b3/test/B3SinglePropagator.test.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import {
2323
setSpanContext,
2424
SpanContext,
2525
TraceFlags,
26+
suppressInstrumentation,
2627
} from '@opentelemetry/api';
2728
import { ROOT_CONTEXT } from '@opentelemetry/api';
2829
import * as assert from 'assert';
@@ -123,6 +124,22 @@ describe('B3SinglePropagator', () => {
123124

124125
assert.strictEqual(carrier[B3_CONTEXT_HEADER], undefined);
125126
});
127+
128+
it('does not inject if instrumentation is suppressed', () => {
129+
const spanContext: SpanContext = {
130+
traceId: '80f198ee56343ba864fe8b2a57d3eff7',
131+
spanId: 'e457b5a2e4d86bd1',
132+
traceFlags: TraceFlags.SAMPLED,
133+
};
134+
135+
propagator.inject(
136+
suppressInstrumentation(setSpanContext(ROOT_CONTEXT, spanContext)),
137+
carrier,
138+
defaultTextMapSetter
139+
);
140+
141+
assert.strictEqual(carrier[B3_CONTEXT_HEADER], undefined);
142+
});
126143
});
127144

128145
describe('.extract', () => {

packages/opentelemetry-propagator-jaeger/src/JaegerHttpTracePropagator.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import {
2323
TextMapGetter,
2424
TextMapPropagator,
2525
TextMapSetter,
26+
isInstrumentationSuppressed,
2627
} from '@opentelemetry/api';
2728

2829
export const UBER_TRACE_ID_HEADER = 'uber-trace-id';
@@ -54,7 +55,7 @@ export class JaegerHttpTracePropagator implements TextMapPropagator {
5455

5556
inject(context: Context, carrier: unknown, setter: TextMapSetter) {
5657
const spanContext = getSpanContext(context);
57-
if (!spanContext) return;
58+
if (!spanContext || isInstrumentationSuppressed(context)) return;
5859

5960
const traceFlags = `0${(spanContext.traceFlags || TraceFlags.NONE).toString(
6061
16

0 commit comments

Comments
 (0)