Skip to content

Commit 36d4cfe

Browse files
committed
ref: Read propagation context off of scope and isolation scope when propagating
1 parent 8e21feb commit 36d4cfe

File tree

27 files changed

+219
-199
lines changed

27 files changed

+219
-199
lines changed

dev-packages/e2e-tests/test-applications/node-experimental-fastify-app/tests/propagation.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ test('Propagates trace for outgoing fetch requests', async ({ baseURL }) => {
164164
'sentry.origin': 'auto.http.otel.http',
165165
},
166166
op: 'http.server',
167+
parent_span_id: expect.any(String),
167168
span_id: expect.any(String),
168169
status: 'ok',
169170
tags: {

dev-packages/node-integration-tests/suites/express/sentry-trace/baggage-header-assign/test.ts

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@ afterAll(() => {
55
cleanupChildProcesses();
66
});
77

8-
test('Should not overwrite baggage if the incoming request already has Sentry baggage data.', async () => {
8+
test('Should overwrite baggage if the incoming request already has Sentry baggage data but no sentry-trace', async () => {
99
const runner = createRunner(__dirname, '..', 'server.ts').start();
1010

1111
const response = await runner.makeRequest<TestAPIResponse>('get', '/test/express', {
1212
baggage: 'sentry-release=2.0.0,sentry-environment=myEnv',
1313
});
1414

1515
expect(response).toBeDefined();
16-
expect(response).toMatchObject({
16+
expect(response).not.toMatchObject({
1717
test_data: {
1818
host: 'somewhere.not.sentry',
1919
baggage: 'sentry-release=2.0.0,sentry-environment=myEnv',
@@ -25,7 +25,7 @@ test('Should propagate sentry trace baggage data from an incoming to an outgoing
2525
const runner = createRunner(__dirname, '..', 'server.ts').start();
2626

2727
const response = await runner.makeRequest<TestAPIResponse>('get', '/test/express', {
28-
'sentry-trace': '',
28+
'sentry-trace': '12312012123120121231201212312012-1121201211212012-1',
2929
baggage: 'sentry-release=2.0.0,sentry-environment=myEnv,dogs=great',
3030
});
3131

@@ -38,11 +38,28 @@ test('Should propagate sentry trace baggage data from an incoming to an outgoing
3838
});
3939
});
4040

41-
test('Should not propagate baggage if sentry-trace header is present in incoming request but no baggage header', async () => {
41+
test('Should not propagate baggage data from an incoming to an outgoing request if sentry-trace is faulty.', async () => {
4242
const runner = createRunner(__dirname, '..', 'server.ts').start();
4343

4444
const response = await runner.makeRequest<TestAPIResponse>('get', '/test/express', {
4545
'sentry-trace': '',
46+
baggage: 'sentry-release=2.0.0,sentry-environment=myEnv,dogs=great',
47+
});
48+
49+
expect(response).toBeDefined();
50+
expect(response).not.toMatchObject({
51+
test_data: {
52+
host: 'somewhere.not.sentry',
53+
baggage: 'sentry-release=2.0.0,sentry-environment=myEnv',
54+
},
55+
});
56+
});
57+
58+
test('Should not propagate baggage if sentry-trace header is present in incoming request but no baggage header', async () => {
59+
const runner = createRunner(__dirname, '..', 'server.ts').start();
60+
61+
const response = await runner.makeRequest<TestAPIResponse>('get', '/test/express', {
62+
'sentry-trace': '12312012123120121231201212312012-1121201211212012-1',
4663
});
4764

4865
expect(response).toBeDefined();
@@ -57,7 +74,7 @@ test('Should not propagate baggage and ignore original 3rd party baggage entries
5774
const runner = createRunner(__dirname, '..', 'server.ts').start();
5875

5976
const response = await runner.makeRequest<TestAPIResponse>('get', '/test/express', {
60-
'sentry-trace': '',
77+
'sentry-trace': '12312012123120121231201212312012-1121201211212012-1',
6178
baggage: 'foo=bar',
6279
});
6380

dev-packages/node-integration-tests/suites/express/sentry-trace/baggage-other-vendors-with-sentry-entries/test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ test('should ignore sentry-values in `baggage` header of a third party vendor an
99
const runner = createRunner(__dirname, 'server.ts').start();
1010

1111
const response = await runner.makeRequest<TestAPIResponse>('get', '/test/express', {
12-
'sentry-trace': '',
12+
'sentry-trace': '12312012123120121231201212312012-1121201211212012-1',
1313
baggage: 'sentry-release=2.1.0,sentry-environment=myEnv',
1414
});
1515

dev-packages/node-integration-tests/suites/express/sentry-trace/baggage-other-vendors/test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ test('should merge `baggage` header of a third party vendor with the Sentry DSC
99
const runner = createRunner(__dirname, 'server.ts').start();
1010

1111
const response = await runner.makeRequest<TestAPIResponse>('get', '/test/express', {
12-
'sentry-trace': '',
12+
'sentry-trace': '12312012123120121231201212312012-1121201211212012-1',
1313
baggage: 'sentry-release=2.0.0,sentry-environment=myEnv',
1414
});
1515

packages/core/src/baseclient.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import type {
2020
MetricsAggregator,
2121
Outcome,
2222
ParameterizedString,
23-
PropagationContext,
2423
SdkMetadata,
2524
Session,
2625
SessionAggregates,
@@ -638,13 +637,14 @@ export abstract class BaseClient<O extends ClientOptions> implements Client<O> {
638637
return evt;
639638
}
640639

641-
// If a trace context is not set on the event, we use the propagationContext set on the event to
642-
// generate a trace context. If the propagationContext does not have a dynamic sampling context, we
643-
// also generate one for it.
644-
const { propagationContext } = evt.sdkProcessingMetadata || {};
640+
const propagationContext = {
641+
...isolationScope.getPropagationContext(),
642+
...(scope ? scope.getPropagationContext() : undefined),
643+
};
644+
645645
const trace = evt.contexts && evt.contexts.trace;
646646
if (!trace && propagationContext) {
647-
const { traceId: trace_id, spanId, parentSpanId, dsc } = propagationContext as PropagationContext;
647+
const { traceId: trace_id, spanId, parentSpanId, dsc } = propagationContext;
648648
evt.contexts = {
649649
trace: {
650650
trace_id,

packages/core/src/tracing/trace.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -346,7 +346,7 @@ export function continueTrace<V>(
346346
const transactionContext: Partial<TransactionContext> = {
347347
...traceparentData,
348348
metadata: dropUndefinedKeys({
349-
dynamicSamplingContext: traceparentData && !dynamicSamplingContext ? {} : dynamicSamplingContext,
349+
dynamicSamplingContext,
350350
}),
351351
};
352352

packages/core/src/utils/applyScopeDataToEvent.ts

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { Breadcrumb, Event, PropagationContext, ScopeData, Span } from '@sentry/types';
1+
import type { Breadcrumb, Event, ScopeData, Span } from '@sentry/types';
22
import { arrayify, dropUndefinedKeys } from '@sentry/utils';
33
import { getDynamicSamplingContextFromSpan } from '../tracing/dynamicSamplingContext';
44
import { getRootSpan } from './getRootSpan';
@@ -8,7 +8,7 @@ import { spanToJSON, spanToTraceContext } from './spanUtils';
88
* Applies data from the scope to the event and runs all event processors on it.
99
*/
1010
export function applyScopeDataToEvent(event: Event, data: ScopeData): void {
11-
const { fingerprint, span, breadcrumbs, sdkProcessingMetadata, propagationContext } = data;
11+
const { fingerprint, span, breadcrumbs, sdkProcessingMetadata } = data;
1212

1313
// Apply general data
1414
applyDataToEvent(event, data);
@@ -22,7 +22,7 @@ export function applyScopeDataToEvent(event: Event, data: ScopeData): void {
2222

2323
applyFingerprintToEvent(event, fingerprint);
2424
applyBreadcrumbsToEvent(event, breadcrumbs);
25-
applySdkMetadataToEvent(event, sdkProcessingMetadata, propagationContext);
25+
applySdkMetadataToEvent(event, sdkProcessingMetadata);
2626
}
2727

2828
/** Merge data of two scopes together. */
@@ -163,15 +163,10 @@ function applyBreadcrumbsToEvent(event: Event, breadcrumbs: Breadcrumb[]): void
163163
event.breadcrumbs = mergedBreadcrumbs.length ? mergedBreadcrumbs : undefined;
164164
}
165165

166-
function applySdkMetadataToEvent(
167-
event: Event,
168-
sdkProcessingMetadata: ScopeData['sdkProcessingMetadata'],
169-
propagationContext: PropagationContext,
170-
): void {
166+
function applySdkMetadataToEvent(event: Event, sdkProcessingMetadata: ScopeData['sdkProcessingMetadata']): void {
171167
event.sdkProcessingMetadata = {
172168
...event.sdkProcessingMetadata,
173169
...sdkProcessingMetadata,
174-
propagationContext: propagationContext,
175170
};
176171
}
177172

packages/core/test/lib/prepareEvent.test.ts

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -228,12 +228,7 @@ describe('prepareEvent', () => {
228228
event_id: expect.any(String),
229229
environment: 'production',
230230
message: 'foo',
231-
sdkProcessingMetadata: {
232-
propagationContext: {
233-
spanId: expect.any(String),
234-
traceId: expect.any(String),
235-
},
236-
},
231+
sdkProcessingMetadata: {},
237232
});
238233
});
239234

@@ -309,16 +304,15 @@ describe('prepareEvent', () => {
309304
user: { id: '1', email: '[email protected]' },
310305
tags: { tag1: 'aa', tag2: 'aa' },
311306
extra: { extra1: 'aa', extra2: 'aa' },
312-
contexts: { os: { name: 'os1' }, culture: { display_name: 'name1' } },
307+
contexts: {
308+
os: { name: 'os1' },
309+
culture: { display_name: 'name1' },
310+
},
313311
fingerprint: ['dd', 'aa'],
314312
breadcrumbs: [breadcrumb4, breadcrumb2, breadcrumb3, breadcrumb1],
315313
sdkProcessingMetadata: {
316314
aa: 'aa',
317315
bb: 'bb',
318-
propagationContext: {
319-
spanId: '1',
320-
traceId: '1',
321-
},
322316
},
323317
});
324318
});
@@ -382,7 +376,6 @@ describe('prepareEvent', () => {
382376
sdkProcessingMetadata: {
383377
aa: 'aa',
384378
bb: 'bb',
385-
propagationContext: isolationScope.getPropagationContext(),
386379
},
387380
});
388381
});

packages/core/test/lib/scope.test.ts

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -132,12 +132,7 @@ describe('Scope', () => {
132132

133133
expect(event).toEqual({
134134
message: 'foo',
135-
sdkProcessingMetadata: {
136-
propagationContext: {
137-
spanId: expect.any(String),
138-
traceId: expect.any(String),
139-
},
140-
},
135+
sdkProcessingMetadata: {},
141136
});
142137
});
143138

@@ -166,15 +161,14 @@ describe('Scope', () => {
166161
user: { id: '1', email: '[email protected]' },
167162
tags: { tag1: 'aa', tag2: 'aa' },
168163
extra: { extra1: 'aa', extra2: 'aa' },
169-
contexts: { os: { name: 'os1' }, culture: { display_name: 'name1' } },
164+
contexts: {
165+
os: { name: 'os1' },
166+
culture: { display_name: 'name1' },
167+
},
170168
fingerprint: ['dd', 'aa'],
171169
breadcrumbs: [breadcrumb2, breadcrumb1],
172170
sdkProcessingMetadata: {
173171
aa: 'aa',
174-
propagationContext: {
175-
spanId: '1',
176-
traceId: '1',
177-
},
178172
},
179173
});
180174
});

packages/core/test/lib/tracing/trace.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -455,6 +455,7 @@ describe('continueTrace', () => {
455455
const scope = getCurrentScope();
456456

457457
expect(scope.getPropagationContext()).toEqual({
458+
dsc: {}, // DSC should be an empty object (frozen), because there was an incoming trace
458459
sampled: false,
459460
parentSpanId: '1121201211212012',
460461
spanId: expect.any(String),

packages/hub/test/scope.test.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -261,8 +261,6 @@ describe('Scope', () => {
261261
expect(processedEvent!.contexts).toEqual({ os: { id: '1' } });
262262
expect(processedEvent!.sdkProcessingMetadata).toEqual({
263263
dogs: 'are great!',
264-
// @ts-expect-error accessing private property for test
265-
propagationContext: scope._propagationContext,
266264
});
267265
});
268266

packages/node-experimental/test/integration/transactions.test.ts

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -108,11 +108,6 @@ describe('Integration | Transactions', () => {
108108
trace_id: expect.any(String),
109109
transaction: 'test name',
110110
}),
111-
propagationContext: {
112-
sampled: undefined,
113-
spanId: expect.any(String),
114-
traceId: expect.any(String),
115-
},
116111
sampleRate: 1,
117112
source: 'task',
118113
spanMetadata: expect.any(Object),

packages/node-experimental/test/sdk/scope.test.ts

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -130,12 +130,7 @@ describe('Unit | Scope', () => {
130130
event_id: expect.any(String),
131131
environment: 'production',
132132
message: 'foo',
133-
sdkProcessingMetadata: {
134-
propagationContext: {
135-
spanId: expect.any(String),
136-
traceId: expect.any(String),
137-
},
138-
},
133+
sdkProcessingMetadata: {},
139134
});
140135
});
141136

@@ -213,16 +208,15 @@ describe('Unit | Scope', () => {
213208
user: { id: '1', email: '[email protected]' },
214209
tags: { tag1: 'aa', tag2: 'aa' },
215210
extra: { extra1: 'aa', extra2: 'aa' },
216-
contexts: { os: { name: 'os1' }, culture: { display_name: 'name1' } },
211+
contexts: {
212+
os: { name: 'os1' },
213+
culture: { display_name: 'name1' },
214+
},
217215
fingerprint: ['dd', 'aa'],
218216
breadcrumbs: [breadcrumb4, breadcrumb2, breadcrumb3, breadcrumb1],
219217
sdkProcessingMetadata: {
220218
aa: 'aa',
221219
bb: 'bb',
222-
propagationContext: {
223-
spanId: '1',
224-
traceId: '1',
225-
},
226220
},
227221
});
228222
});

0 commit comments

Comments
 (0)