feat!: Remove spanId from propagation context - #14733

Merged
mydea merged 5 commits into
developfrom
fn/removeSpanId
Jan 9, 2025
Merged

feat!: Remove spanId from propagation context#14733
mydea merged 5 commits into
developfrom
fn/removeSpanId

Conversation

@mydea

Copy link
Copy Markdown
Member

Closes#12385

This also deprecates getPropagationContextFromSpan as it is no longer used/needed. We may think about removing this in v9, but IMHO we can also just leave this for v9, it does not hurt too much to have it in there...

@mydeamydea self-assigned this Dec 16, 2024
@github-actions

github-actionsBot commented Dec 16, 2024

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser22.8 KB+0.29%+66 B 🔺
@sentry/browser - with treeshaking flags21.55 KB+0.18%+38 B 🔺
@sentry/browser (incl. Tracing)35.4 KB+0.04%+11 B 🔺
@sentry/browser (incl. Tracing, Replay)72.09 KB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags62.63 KB+0.02%+7 B 🔺
@sentry/browser (incl. Tracing, Replay with Canvas)76.35 KB-0.01%-5 B 🔽
@sentry/browser (incl. Tracing, Replay, Feedback)88.38 KB+0.01%+4 B 🔺
@sentry/browser (incl. Feedback)39.12 KB+0.12%+48 B 🔺
@sentry/browser (incl. sendFeedback)27.48 KB+0.22%+60 B 🔺
@sentry/browser (incl. FeedbackAsync)32.3 KB+0.18%+59 B 🔺
@sentry/react25.55 KB+0.22%+57 B 🔺
@sentry/react (incl. Tracing)38.15 KB+0.01%+1 B 🔺
@sentry/vue27.09 KB+0.05%+13 B 🔺
@sentry/vue (incl. Tracing)37.24 KB+0.01%+1 B 🔺
@sentry/svelte22.94 KB+0.34%+78 B 🔺
CDN Bundle24.15 KB+0.13%+30 B 🔺
CDN Bundle (incl. Tracing)35.71 KB+0.05%+15 B 🔺
CDN Bundle (incl. Tracing, Replay)70.27 KB+0.03%+21 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback)75.48 KB+0.03%+19 B 🔺
CDN Bundle - uncompressed70.59 KB+0.18%+124 B 🔺
CDN Bundle (incl. Tracing) - uncompressed106.08 KB+0.04%+39 B 🔺
CDN Bundle (incl. Tracing, Replay) - uncompressed216.96 KB+0.02%+39 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed229.71 KB+0.02%+39 B 🔺
@sentry/nextjs (client)38.28 KB-0.01%-1 B 🔽
@sentry/sveltekit (client)35.91 KB+0.04%+13 B 🔺
@sentry/node161.45 KB-0.02%-19 B 🔽
@sentry/node - without tracing97.34 KB+0.06%+56 B 🔺
@sentry/aws-serverless127.1 KB-0.02%-24 B 🔽

View base workflow run

@@ -1,230 +0,0 @@
import { Scope, getGlobalScope, prepareEvent } from '@sentry/core';

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This test is not needed, it is just a duplicate of the core tests. this is a leftover from the experimental days when node had a forked/custom scope, but it is the same now.

if (isSpanContextValid(parentContext) && parentContext.traceId === traceId) {
if (parentContext.isRemote) {
const parentSampled = getParentRemoteSampled(parentSpan);
const parentSampled = getSamplingDecision(parentSpan.spanContext());

@mydeamydeaDec 16, 2024

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This method implementation was redundant, we already check traceId outside here, so we can simply get the decision directly. This was the only place where we still used getPropagationContextFromSpan.

@mydea
mydeaforce-pushed the fn/removeSpanId branch 2 times, most recently from 5a72bc7 to 4eb2604CompareDecember 17, 2024 08:29
@mydea
mydea marked this pull request as ready for review December 17, 2024 09:11

@Lms24Lms24 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is in a good state, given we already made the decision that it's okay TwP scenarios to have different spanIds in consecutive errors or calls (see my other comment as well).

Before we merge this, I'd like to ensure that we have the following scenarios covered:

  • [TwP] trace id within trace envelope header is equal to event.contexts.trace
  • The sentry-trace header contains the id of the http.client span of the request

I'm fairly sure we already test this but it's probably worth to double check it

Comment on lines +44 to +57
expect(traceData['sentry-trace']).toMatch(/^[a-f0-9]{32}-[a-f0-9]{16}$/);
expect(traceData['sentry-trace']).toContain(`${trace_id}-`);
// span_id is a random span ID
expect(traceData['sentry-trace']).not.toContain(span_id);

expect(traceData.baggage).toContain(`sentry-trace_id=${trace_id}`);
expect(traceData.baggage).not.toContain('sentry-sampled=');

expect(traceData.metaTags).toContain(`<meta name="sentry-trace" content="${trace_id}-${span_id}"/>`);
expect(traceData.metaTags).toMatch(/<meta name="sentry-trace" content="[a-f0-9]{32}-[a-f0-9]{16}"\/>/);
expect(traceData.metaTags).toContain(`<meta name="sentry-trace" content="${trace_id}-`);
// span_id is a random span ID
expect(traceData.metaTags).not.toContain(span_id);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hmm so I'm a bit concerned about this. IIUC previously, the spanIds in this test were equal because we stored it on the PC. Now, consecutive calls to APIs like getTraceData() or getTraceMetaTags() like in this test deliver diverging span ids.

This also implies the following scenario for a TwP-configured SDK:

  1. app makes http request and propagates a sentry-trace header with spanId 123
  2. directly afterwards an error is captured and its event.context.trace holds a different spanId 456

I thought about the implications of this and while I'm still worried, I couldn't really come up with a concrete use case where this is actually problematic. I was especially worried if we'd send different spanIds within one error or transaction event but I think we only send this in event.context.trace. The trace envelope header does not contain the spanId at all, so it shouldn't be a problem.

However, we should ensure that the same traceId is still used in both places. Which I hope we have tests for but it's better to double-check.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, so the traceId is tested here (see line 53).

I totally get what you mean, it was the same for me - thinking, hmm, this is different, but then, is it actually a problem?

Closes#12385
This also deprecates `getPropagationContextFromSpan` as it is no longer used/needed. We may think about removing this in v9, but IMHO we can also just leave this for v9, it does not hurt too much to have it in there...
fix tests
remove unneeded test
fix stuff
fix tests
better test
fix test
@mydea
mydea requested a review from Lms24January 8, 2025 10:30
Comment threadpackages/core/src/types-hoist/tracing.ts Outdated
Co-authored-by: Luca Forstner <luca.forstner@sentry.io>
@mydea
mydea merged commit d5af638 into developJan 9, 2025
@mydea
mydea deleted the fn/removeSpanId branch January 9, 2025 08:26
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[v9] Rethink spanId on propagationContext

3 participants

@mydea@lforst@Lms24
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

feat!: Remove spanId from propagation context - #14733

Merged
mydea merged 5 commits into
developfrom
fn/removeSpanId
Jan 9, 2025
Merged

feat!: Remove spanId from propagation context#14733
mydea merged 5 commits into
developfrom
fn/removeSpanId

Conversation

@mydea

Copy link
Copy Markdown
Member

Closes#12385

This also deprecates getPropagationContextFromSpan as it is no longer used/needed. We may think about removing this in v9, but IMHO we can also just leave this for v9, it does not hurt too much to have it in there...

@mydeamydea self-assigned this Dec 16, 2024
@github-actions

github-actionsBot commented Dec 16, 2024

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser22.8 KB+0.29%+66 B 🔺
@sentry/browser - with treeshaking flags21.55 KB+0.18%+38 B 🔺
@sentry/browser (incl. Tracing)35.4 KB+0.04%+11 B 🔺
@sentry/browser (incl. Tracing, Replay)72.09 KB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags62.63 KB+0.02%+7 B 🔺
@sentry/browser (incl. Tracing, Replay with Canvas)76.35 KB-0.01%-5 B 🔽
@sentry/browser (incl. Tracing, Replay, Feedback)88.38 KB+0.01%+4 B 🔺
@sentry/browser (incl. Feedback)39.12 KB+0.12%+48 B 🔺
@sentry/browser (incl. sendFeedback)27.48 KB+0.22%+60 B 🔺
@sentry/browser (incl. FeedbackAsync)32.3 KB+0.18%+59 B 🔺
@sentry/react25.55 KB+0.22%+57 B 🔺
@sentry/react (incl. Tracing)38.15 KB+0.01%+1 B 🔺
@sentry/vue27.09 KB+0.05%+13 B 🔺
@sentry/vue (incl. Tracing)37.24 KB+0.01%+1 B 🔺
@sentry/svelte22.94 KB+0.34%+78 B 🔺
CDN Bundle24.15 KB+0.13%+30 B 🔺
CDN Bundle (incl. Tracing)35.71 KB+0.05%+15 B 🔺
CDN Bundle (incl. Tracing, Replay)70.27 KB+0.03%+21 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback)75.48 KB+0.03%+19 B 🔺
CDN Bundle - uncompressed70.59 KB+0.18%+124 B 🔺
CDN Bundle (incl. Tracing) - uncompressed106.08 KB+0.04%+39 B 🔺
CDN Bundle (incl. Tracing, Replay) - uncompressed216.96 KB+0.02%+39 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed229.71 KB+0.02%+39 B 🔺
@sentry/nextjs (client)38.28 KB-0.01%-1 B 🔽
@sentry/sveltekit (client)35.91 KB+0.04%+13 B 🔺
@sentry/node161.45 KB-0.02%-19 B 🔽
@sentry/node - without tracing97.34 KB+0.06%+56 B 🔺
@sentry/aws-serverless127.1 KB-0.02%-24 B 🔽

View base workflow run

@@ -1,230 +0,0 @@
import { Scope, getGlobalScope, prepareEvent } from '@sentry/core';

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This test is not needed, it is just a duplicate of the core tests. this is a leftover from the experimental days when node had a forked/custom scope, but it is the same now.

if (isSpanContextValid(parentContext) && parentContext.traceId === traceId) {
if (parentContext.isRemote) {
const parentSampled = getParentRemoteSampled(parentSpan);
const parentSampled = getSamplingDecision(parentSpan.spanContext());

@mydeamydeaDec 16, 2024

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This method implementation was redundant, we already check traceId outside here, so we can simply get the decision directly. This was the only place where we still used getPropagationContextFromSpan.

@mydea
mydeaforce-pushed the fn/removeSpanId branch 2 times, most recently from 5a72bc7 to 4eb2604CompareDecember 17, 2024 08:29
@mydea
mydea marked this pull request as ready for review December 17, 2024 09:11

@Lms24Lms24 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is in a good state, given we already made the decision that it's okay TwP scenarios to have different spanIds in consecutive errors or calls (see my other comment as well).

Before we merge this, I'd like to ensure that we have the following scenarios covered:

  • [TwP] trace id within trace envelope header is equal to event.contexts.trace
  • The sentry-trace header contains the id of the http.client span of the request

I'm fairly sure we already test this but it's probably worth to double check it

Comment on lines +44 to +57
expect(traceData['sentry-trace']).toMatch(/^[a-f0-9]{32}-[a-f0-9]{16}$/);
expect(traceData['sentry-trace']).toContain(`${trace_id}-`);
// span_id is a random span ID
expect(traceData['sentry-trace']).not.toContain(span_id);

expect(traceData.baggage).toContain(`sentry-trace_id=${trace_id}`);
expect(traceData.baggage).not.toContain('sentry-sampled=');

expect(traceData.metaTags).toContain(`<meta name="sentry-trace" content="${trace_id}-${span_id}"/>`);
expect(traceData.metaTags).toMatch(/<meta name="sentry-trace" content="[a-f0-9]{32}-[a-f0-9]{16}"\/>/);
expect(traceData.metaTags).toContain(`<meta name="sentry-trace" content="${trace_id}-`);
// span_id is a random span ID
expect(traceData.metaTags).not.toContain(span_id);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hmm so I'm a bit concerned about this. IIUC previously, the spanIds in this test were equal because we stored it on the PC. Now, consecutive calls to APIs like getTraceData() or getTraceMetaTags() like in this test deliver diverging span ids.

This also implies the following scenario for a TwP-configured SDK:

  1. app makes http request and propagates a sentry-trace header with spanId 123
  2. directly afterwards an error is captured and its event.context.trace holds a different spanId 456

I thought about the implications of this and while I'm still worried, I couldn't really come up with a concrete use case where this is actually problematic. I was especially worried if we'd send different spanIds within one error or transaction event but I think we only send this in event.context.trace. The trace envelope header does not contain the spanId at all, so it shouldn't be a problem.

However, we should ensure that the same traceId is still used in both places. Which I hope we have tests for but it's better to double-check.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, so the traceId is tested here (see line 53).

I totally get what you mean, it was the same for me - thinking, hmm, this is different, but then, is it actually a problem?

Closes#12385
This also deprecates `getPropagationContextFromSpan` as it is no longer used/needed. We may think about removing this in v9, but IMHO we can also just leave this for v9, it does not hurt too much to have it in there...
fix tests
remove unneeded test
fix stuff
fix tests
better test
fix test
@mydea
mydea requested a review from Lms24January 8, 2025 10:30
Comment threadpackages/core/src/types-hoist/tracing.ts Outdated
Co-authored-by: Luca Forstner <luca.forstner@sentry.io>
@mydea
mydea merged commit d5af638 into developJan 9, 2025
@mydea
mydea deleted the fn/removeSpanId branch January 9, 2025 08:26
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[v9] Rethink spanId on propagationContext

3 participants

@mydea@lforst@Lms24
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat!: Remove spanId from propagation context - #14733

Merged
mydea merged 5 commits into
developfrom
fn/removeSpanId
Jan 9, 2025
Merged

feat!: Remove spanId from propagation context#14733
mydea merged 5 commits into
developfrom
fn/removeSpanId

Conversation

@mydea

Copy link
Copy Markdown
Member

Closes#12385

This also deprecates getPropagationContextFromSpan as it is no longer used/needed. We may think about removing this in v9, but IMHO we can also just leave this for v9, it does not hurt too much to have it in there...

@mydeamydea self-assigned this Dec 16, 2024
@github-actions

github-actionsBot commented Dec 16, 2024

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser22.8 KB+0.29%+66 B 🔺
@sentry/browser - with treeshaking flags21.55 KB+0.18%+38 B 🔺
@sentry/browser (incl. Tracing)35.4 KB+0.04%+11 B 🔺
@sentry/browser (incl. Tracing, Replay)72.09 KB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags62.63 KB+0.02%+7 B 🔺
@sentry/browser (incl. Tracing, Replay with Canvas)76.35 KB-0.01%-5 B 🔽
@sentry/browser (incl. Tracing, Replay, Feedback)88.38 KB+0.01%+4 B 🔺
@sentry/browser (incl. Feedback)39.12 KB+0.12%+48 B 🔺
@sentry/browser (incl. sendFeedback)27.48 KB+0.22%+60 B 🔺
@sentry/browser (incl. FeedbackAsync)32.3 KB+0.18%+59 B 🔺
@sentry/react25.55 KB+0.22%+57 B 🔺
@sentry/react (incl. Tracing)38.15 KB+0.01%+1 B 🔺
@sentry/vue27.09 KB+0.05%+13 B 🔺
@sentry/vue (incl. Tracing)37.24 KB+0.01%+1 B 🔺
@sentry/svelte22.94 KB+0.34%+78 B 🔺
CDN Bundle24.15 KB+0.13%+30 B 🔺
CDN Bundle (incl. Tracing)35.71 KB+0.05%+15 B 🔺
CDN Bundle (incl. Tracing, Replay)70.27 KB+0.03%+21 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback)75.48 KB+0.03%+19 B 🔺
CDN Bundle - uncompressed70.59 KB+0.18%+124 B 🔺
CDN Bundle (incl. Tracing) - uncompressed106.08 KB+0.04%+39 B 🔺
CDN Bundle (incl. Tracing, Replay) - uncompressed216.96 KB+0.02%+39 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed229.71 KB+0.02%+39 B 🔺
@sentry/nextjs (client)38.28 KB-0.01%-1 B 🔽
@sentry/sveltekit (client)35.91 KB+0.04%+13 B 🔺
@sentry/node161.45 KB-0.02%-19 B 🔽
@sentry/node - without tracing97.34 KB+0.06%+56 B 🔺
@sentry/aws-serverless127.1 KB-0.02%-24 B 🔽

View base workflow run

@@ -1,230 +0,0 @@
import { Scope, getGlobalScope, prepareEvent } from '@sentry/core';

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This test is not needed, it is just a duplicate of the core tests. this is a leftover from the experimental days when node had a forked/custom scope, but it is the same now.

if (isSpanContextValid(parentContext) && parentContext.traceId === traceId) {
if (parentContext.isRemote) {
const parentSampled = getParentRemoteSampled(parentSpan);
const parentSampled = getSamplingDecision(parentSpan.spanContext());

@mydeamydeaDec 16, 2024

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This method implementation was redundant, we already check traceId outside here, so we can simply get the decision directly. This was the only place where we still used getPropagationContextFromSpan.

@mydea
mydeaforce-pushed the fn/removeSpanId branch 2 times, most recently from 5a72bc7 to 4eb2604CompareDecember 17, 2024 08:29
@mydea
mydea marked this pull request as ready for review December 17, 2024 09:11

@Lms24Lms24 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is in a good state, given we already made the decision that it's okay TwP scenarios to have different spanIds in consecutive errors or calls (see my other comment as well).

Before we merge this, I'd like to ensure that we have the following scenarios covered:

  • [TwP] trace id within trace envelope header is equal to event.contexts.trace
  • The sentry-trace header contains the id of the http.client span of the request

I'm fairly sure we already test this but it's probably worth to double check it

Comment on lines +44 to +57
expect(traceData['sentry-trace']).toMatch(/^[a-f0-9]{32}-[a-f0-9]{16}$/);
expect(traceData['sentry-trace']).toContain(`${trace_id}-`);
// span_id is a random span ID
expect(traceData['sentry-trace']).not.toContain(span_id);

expect(traceData.baggage).toContain(`sentry-trace_id=${trace_id}`);
expect(traceData.baggage).not.toContain('sentry-sampled=');

expect(traceData.metaTags).toContain(`<meta name="sentry-trace" content="${trace_id}-${span_id}"/>`);
expect(traceData.metaTags).toMatch(/<meta name="sentry-trace" content="[a-f0-9]{32}-[a-f0-9]{16}"\/>/);
expect(traceData.metaTags).toContain(`<meta name="sentry-trace" content="${trace_id}-`);
// span_id is a random span ID
expect(traceData.metaTags).not.toContain(span_id);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hmm so I'm a bit concerned about this. IIUC previously, the spanIds in this test were equal because we stored it on the PC. Now, consecutive calls to APIs like getTraceData() or getTraceMetaTags() like in this test deliver diverging span ids.

This also implies the following scenario for a TwP-configured SDK:

  1. app makes http request and propagates a sentry-trace header with spanId 123
  2. directly afterwards an error is captured and its event.context.trace holds a different spanId 456

I thought about the implications of this and while I'm still worried, I couldn't really come up with a concrete use case where this is actually problematic. I was especially worried if we'd send different spanIds within one error or transaction event but I think we only send this in event.context.trace. The trace envelope header does not contain the spanId at all, so it shouldn't be a problem.

However, we should ensure that the same traceId is still used in both places. Which I hope we have tests for but it's better to double-check.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, so the traceId is tested here (see line 53).

I totally get what you mean, it was the same for me - thinking, hmm, this is different, but then, is it actually a problem?

Closes#12385
This also deprecates `getPropagationContextFromSpan` as it is no longer used/needed. We may think about removing this in v9, but IMHO we can also just leave this for v9, it does not hurt too much to have it in there...
fix tests
remove unneeded test
fix stuff
fix tests
better test
fix test
@mydea
mydea requested a review from Lms24January 8, 2025 10:30
Comment threadpackages/core/src/types-hoist/tracing.ts Outdated
Co-authored-by: Luca Forstner <luca.forstner@sentry.io>
@mydea
mydea merged commit d5af638 into developJan 9, 2025
@mydea
mydea deleted the fn/removeSpanId branch January 9, 2025 08:26
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[v9] Rethink spanId on propagationContext

3 participants

@mydea@lforst@Lms24
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat!: Remove spanId from propagation context - #14733

Merged
mydea merged 5 commits into
developfrom
fn/removeSpanId
Jan 9, 2025
Merged

feat!: Remove spanId from propagation context#14733
mydea merged 5 commits into
developfrom
fn/removeSpanId

Conversation

@mydea

Copy link
Copy Markdown
Member

Closes#12385

This also deprecates getPropagationContextFromSpan as it is no longer used/needed. We may think about removing this in v9, but IMHO we can also just leave this for v9, it does not hurt too much to have it in there...

@mydeamydea self-assigned this Dec 16, 2024
@github-actions

github-actionsBot commented Dec 16, 2024

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser22.8 KB+0.29%+66 B 🔺
@sentry/browser - with treeshaking flags21.55 KB+0.18%+38 B 🔺
@sentry/browser (incl. Tracing)35.4 KB+0.04%+11 B 🔺
@sentry/browser (incl. Tracing, Replay)72.09 KB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags62.63 KB+0.02%+7 B 🔺
@sentry/browser (incl. Tracing, Replay with Canvas)76.35 KB-0.01%-5 B 🔽
@sentry/browser (incl. Tracing, Replay, Feedback)88.38 KB+0.01%+4 B 🔺
@sentry/browser (incl. Feedback)39.12 KB+0.12%+48 B 🔺
@sentry/browser (incl. sendFeedback)27.48 KB+0.22%+60 B 🔺
@sentry/browser (incl. FeedbackAsync)32.3 KB+0.18%+59 B 🔺
@sentry/react25.55 KB+0.22%+57 B 🔺
@sentry/react (incl. Tracing)38.15 KB+0.01%+1 B 🔺
@sentry/vue27.09 KB+0.05%+13 B 🔺
@sentry/vue (incl. Tracing)37.24 KB+0.01%+1 B 🔺
@sentry/svelte22.94 KB+0.34%+78 B 🔺
CDN Bundle24.15 KB+0.13%+30 B 🔺
CDN Bundle (incl. Tracing)35.71 KB+0.05%+15 B 🔺
CDN Bundle (incl. Tracing, Replay)70.27 KB+0.03%+21 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback)75.48 KB+0.03%+19 B 🔺
CDN Bundle - uncompressed70.59 KB+0.18%+124 B 🔺
CDN Bundle (incl. Tracing) - uncompressed106.08 KB+0.04%+39 B 🔺
CDN Bundle (incl. Tracing, Replay) - uncompressed216.96 KB+0.02%+39 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed229.71 KB+0.02%+39 B 🔺
@sentry/nextjs (client)38.28 KB-0.01%-1 B 🔽
@sentry/sveltekit (client)35.91 KB+0.04%+13 B 🔺
@sentry/node161.45 KB-0.02%-19 B 🔽
@sentry/node - without tracing97.34 KB+0.06%+56 B 🔺
@sentry/aws-serverless127.1 KB-0.02%-24 B 🔽

View base workflow run

@@ -1,230 +0,0 @@
import { Scope, getGlobalScope, prepareEvent } from '@sentry/core';

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This test is not needed, it is just a duplicate of the core tests. this is a leftover from the experimental days when node had a forked/custom scope, but it is the same now.

if (isSpanContextValid(parentContext) && parentContext.traceId === traceId) {
if (parentContext.isRemote) {
const parentSampled = getParentRemoteSampled(parentSpan);
const parentSampled = getSamplingDecision(parentSpan.spanContext());

@mydeamydeaDec 16, 2024

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This method implementation was redundant, we already check traceId outside here, so we can simply get the decision directly. This was the only place where we still used getPropagationContextFromSpan.

@mydea
mydeaforce-pushed the fn/removeSpanId branch 2 times, most recently from 5a72bc7 to 4eb2604CompareDecember 17, 2024 08:29
@mydea
mydea marked this pull request as ready for review December 17, 2024 09:11

@Lms24Lms24 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is in a good state, given we already made the decision that it's okay TwP scenarios to have different spanIds in consecutive errors or calls (see my other comment as well).

Before we merge this, I'd like to ensure that we have the following scenarios covered:

  • [TwP] trace id within trace envelope header is equal to event.contexts.trace
  • The sentry-trace header contains the id of the http.client span of the request

I'm fairly sure we already test this but it's probably worth to double check it

Comment on lines +44 to +57
expect(traceData['sentry-trace']).toMatch(/^[a-f0-9]{32}-[a-f0-9]{16}$/);
expect(traceData['sentry-trace']).toContain(`${trace_id}-`);
// span_id is a random span ID
expect(traceData['sentry-trace']).not.toContain(span_id);

expect(traceData.baggage).toContain(`sentry-trace_id=${trace_id}`);
expect(traceData.baggage).not.toContain('sentry-sampled=');

expect(traceData.metaTags).toContain(`<meta name="sentry-trace" content="${trace_id}-${span_id}"/>`);
expect(traceData.metaTags).toMatch(/<meta name="sentry-trace" content="[a-f0-9]{32}-[a-f0-9]{16}"\/>/);
expect(traceData.metaTags).toContain(`<meta name="sentry-trace" content="${trace_id}-`);
// span_id is a random span ID
expect(traceData.metaTags).not.toContain(span_id);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hmm so I'm a bit concerned about this. IIUC previously, the spanIds in this test were equal because we stored it on the PC. Now, consecutive calls to APIs like getTraceData() or getTraceMetaTags() like in this test deliver diverging span ids.

This also implies the following scenario for a TwP-configured SDK:

  1. app makes http request and propagates a sentry-trace header with spanId 123
  2. directly afterwards an error is captured and its event.context.trace holds a different spanId 456

I thought about the implications of this and while I'm still worried, I couldn't really come up with a concrete use case where this is actually problematic. I was especially worried if we'd send different spanIds within one error or transaction event but I think we only send this in event.context.trace. The trace envelope header does not contain the spanId at all, so it shouldn't be a problem.

However, we should ensure that the same traceId is still used in both places. Which I hope we have tests for but it's better to double-check.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, so the traceId is tested here (see line 53).

I totally get what you mean, it was the same for me - thinking, hmm, this is different, but then, is it actually a problem?

Closes#12385
This also deprecates `getPropagationContextFromSpan` as it is no longer used/needed. We may think about removing this in v9, but IMHO we can also just leave this for v9, it does not hurt too much to have it in there...
fix tests
remove unneeded test
fix stuff
fix tests
better test
fix test
@mydea
mydea requested a review from Lms24January 8, 2025 10:30
Comment threadpackages/core/src/types-hoist/tracing.ts Outdated
Co-authored-by: Luca Forstner <luca.forstner@sentry.io>
@mydea
mydea merged commit d5af638 into developJan 9, 2025
@mydea
mydea deleted the fn/removeSpanId branch January 9, 2025 08:26
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[v9] Rethink spanId on propagationContext

3 participants

@mydea@lforst@Lms24
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

feat!: Remove spanId from propagation context - #14733

Merged
mydea merged 5 commits into
developfrom
fn/removeSpanId
Jan 9, 2025
Merged

feat!: Remove spanId from propagation context#14733
mydea merged 5 commits into
developfrom
fn/removeSpanId

Conversation

@mydea

Copy link
Copy Markdown
Member

Closes#12385

This also deprecates getPropagationContextFromSpan as it is no longer used/needed. We may think about removing this in v9, but IMHO we can also just leave this for v9, it does not hurt too much to have it in there...

@mydeamydea self-assigned this Dec 16, 2024
@github-actions

github-actionsBot commented Dec 16, 2024

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser22.8 KB+0.29%+66 B 🔺
@sentry/browser - with treeshaking flags21.55 KB+0.18%+38 B 🔺
@sentry/browser (incl. Tracing)35.4 KB+0.04%+11 B 🔺
@sentry/browser (incl. Tracing, Replay)72.09 KB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags62.63 KB+0.02%+7 B 🔺
@sentry/browser (incl. Tracing, Replay with Canvas)76.35 KB-0.01%-5 B 🔽
@sentry/browser (incl. Tracing, Replay, Feedback)88.38 KB+0.01%+4 B 🔺
@sentry/browser (incl. Feedback)39.12 KB+0.12%+48 B 🔺
@sentry/browser (incl. sendFeedback)27.48 KB+0.22%+60 B 🔺
@sentry/browser (incl. FeedbackAsync)32.3 KB+0.18%+59 B 🔺
@sentry/react25.55 KB+0.22%+57 B 🔺
@sentry/react (incl. Tracing)38.15 KB+0.01%+1 B 🔺
@sentry/vue27.09 KB+0.05%+13 B 🔺
@sentry/vue (incl. Tracing)37.24 KB+0.01%+1 B 🔺
@sentry/svelte22.94 KB+0.34%+78 B 🔺
CDN Bundle24.15 KB+0.13%+30 B 🔺
CDN Bundle (incl. Tracing)35.71 KB+0.05%+15 B 🔺
CDN Bundle (incl. Tracing, Replay)70.27 KB+0.03%+21 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback)75.48 KB+0.03%+19 B 🔺
CDN Bundle - uncompressed70.59 KB+0.18%+124 B 🔺
CDN Bundle (incl. Tracing) - uncompressed106.08 KB+0.04%+39 B 🔺
CDN Bundle (incl. Tracing, Replay) - uncompressed216.96 KB+0.02%+39 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed229.71 KB+0.02%+39 B 🔺
@sentry/nextjs (client)38.28 KB-0.01%-1 B 🔽
@sentry/sveltekit (client)35.91 KB+0.04%+13 B 🔺
@sentry/node161.45 KB-0.02%-19 B 🔽
@sentry/node - without tracing97.34 KB+0.06%+56 B 🔺
@sentry/aws-serverless127.1 KB-0.02%-24 B 🔽

View base workflow run

@@ -1,230 +0,0 @@
import { Scope, getGlobalScope, prepareEvent } from '@sentry/core';

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This test is not needed, it is just a duplicate of the core tests. this is a leftover from the experimental days when node had a forked/custom scope, but it is the same now.

if (isSpanContextValid(parentContext) && parentContext.traceId === traceId) {
if (parentContext.isRemote) {
const parentSampled = getParentRemoteSampled(parentSpan);
const parentSampled = getSamplingDecision(parentSpan.spanContext());

@mydeamydeaDec 16, 2024

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This method implementation was redundant, we already check traceId outside here, so we can simply get the decision directly. This was the only place where we still used getPropagationContextFromSpan.

@mydea
mydeaforce-pushed the fn/removeSpanId branch 2 times, most recently from 5a72bc7 to 4eb2604CompareDecember 17, 2024 08:29
@mydea
mydea marked this pull request as ready for review December 17, 2024 09:11

@Lms24Lms24 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is in a good state, given we already made the decision that it's okay TwP scenarios to have different spanIds in consecutive errors or calls (see my other comment as well).

Before we merge this, I'd like to ensure that we have the following scenarios covered:

  • [TwP] trace id within trace envelope header is equal to event.contexts.trace
  • The sentry-trace header contains the id of the http.client span of the request

I'm fairly sure we already test this but it's probably worth to double check it

Comment on lines +44 to +57
expect(traceData['sentry-trace']).toMatch(/^[a-f0-9]{32}-[a-f0-9]{16}$/);
expect(traceData['sentry-trace']).toContain(`${trace_id}-`);
// span_id is a random span ID
expect(traceData['sentry-trace']).not.toContain(span_id);

expect(traceData.baggage).toContain(`sentry-trace_id=${trace_id}`);
expect(traceData.baggage).not.toContain('sentry-sampled=');

expect(traceData.metaTags).toContain(`<meta name="sentry-trace" content="${trace_id}-${span_id}"/>`);
expect(traceData.metaTags).toMatch(/<meta name="sentry-trace" content="[a-f0-9]{32}-[a-f0-9]{16}"\/>/);
expect(traceData.metaTags).toContain(`<meta name="sentry-trace" content="${trace_id}-`);
// span_id is a random span ID
expect(traceData.metaTags).not.toContain(span_id);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hmm so I'm a bit concerned about this. IIUC previously, the spanIds in this test were equal because we stored it on the PC. Now, consecutive calls to APIs like getTraceData() or getTraceMetaTags() like in this test deliver diverging span ids.

This also implies the following scenario for a TwP-configured SDK:

  1. app makes http request and propagates a sentry-trace header with spanId 123
  2. directly afterwards an error is captured and its event.context.trace holds a different spanId 456

I thought about the implications of this and while I'm still worried, I couldn't really come up with a concrete use case where this is actually problematic. I was especially worried if we'd send different spanIds within one error or transaction event but I think we only send this in event.context.trace. The trace envelope header does not contain the spanId at all, so it shouldn't be a problem.

However, we should ensure that the same traceId is still used in both places. Which I hope we have tests for but it's better to double-check.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, so the traceId is tested here (see line 53).

I totally get what you mean, it was the same for me - thinking, hmm, this is different, but then, is it actually a problem?

Closes#12385
This also deprecates `getPropagationContextFromSpan` as it is no longer used/needed. We may think about removing this in v9, but IMHO we can also just leave this for v9, it does not hurt too much to have it in there...
fix tests
remove unneeded test
fix stuff
fix tests
better test
fix test
@mydea
mydea requested a review from Lms24January 8, 2025 10:30
Comment threadpackages/core/src/types-hoist/tracing.ts Outdated
Co-authored-by: Luca Forstner <luca.forstner@sentry.io>
@mydea
mydea merged commit d5af638 into developJan 9, 2025
@mydea
mydea deleted the fn/removeSpanId branch January 9, 2025 08:26
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[v9] Rethink spanId on propagationContext

3 participants

@mydea@lforst@Lms24
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat!: Remove spanId from propagation context - #14733

Merged
mydea merged 5 commits into
developfrom
fn/removeSpanId
Jan 9, 2025
Merged

feat!: Remove spanId from propagation context#14733
mydea merged 5 commits into
developfrom
fn/removeSpanId

Conversation

@mydea

Copy link
Copy Markdown
Member

Closes#12385

This also deprecates getPropagationContextFromSpan as it is no longer used/needed. We may think about removing this in v9, but IMHO we can also just leave this for v9, it does not hurt too much to have it in there...

@mydeamydea self-assigned this Dec 16, 2024
@github-actions

github-actionsBot commented Dec 16, 2024

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser22.8 KB+0.29%+66 B 🔺
@sentry/browser - with treeshaking flags21.55 KB+0.18%+38 B 🔺
@sentry/browser (incl. Tracing)35.4 KB+0.04%+11 B 🔺
@sentry/browser (incl. Tracing, Replay)72.09 KB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags62.63 KB+0.02%+7 B 🔺
@sentry/browser (incl. Tracing, Replay with Canvas)76.35 KB-0.01%-5 B 🔽
@sentry/browser (incl. Tracing, Replay, Feedback)88.38 KB+0.01%+4 B 🔺
@sentry/browser (incl. Feedback)39.12 KB+0.12%+48 B 🔺
@sentry/browser (incl. sendFeedback)27.48 KB+0.22%+60 B 🔺
@sentry/browser (incl. FeedbackAsync)32.3 KB+0.18%+59 B 🔺
@sentry/react25.55 KB+0.22%+57 B 🔺
@sentry/react (incl. Tracing)38.15 KB+0.01%+1 B 🔺
@sentry/vue27.09 KB+0.05%+13 B 🔺
@sentry/vue (incl. Tracing)37.24 KB+0.01%+1 B 🔺
@sentry/svelte22.94 KB+0.34%+78 B 🔺
CDN Bundle24.15 KB+0.13%+30 B 🔺
CDN Bundle (incl. Tracing)35.71 KB+0.05%+15 B 🔺
CDN Bundle (incl. Tracing, Replay)70.27 KB+0.03%+21 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback)75.48 KB+0.03%+19 B 🔺
CDN Bundle - uncompressed70.59 KB+0.18%+124 B 🔺
CDN Bundle (incl. Tracing) - uncompressed106.08 KB+0.04%+39 B 🔺
CDN Bundle (incl. Tracing, Replay) - uncompressed216.96 KB+0.02%+39 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed229.71 KB+0.02%+39 B 🔺
@sentry/nextjs (client)38.28 KB-0.01%-1 B 🔽
@sentry/sveltekit (client)35.91 KB+0.04%+13 B 🔺
@sentry/node161.45 KB-0.02%-19 B 🔽
@sentry/node - without tracing97.34 KB+0.06%+56 B 🔺
@sentry/aws-serverless127.1 KB-0.02%-24 B 🔽

View base workflow run

@@ -1,230 +0,0 @@
import { Scope, getGlobalScope, prepareEvent } from '@sentry/core';

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This test is not needed, it is just a duplicate of the core tests. this is a leftover from the experimental days when node had a forked/custom scope, but it is the same now.

if (isSpanContextValid(parentContext) && parentContext.traceId === traceId) {
if (parentContext.isRemote) {
const parentSampled = getParentRemoteSampled(parentSpan);
const parentSampled = getSamplingDecision(parentSpan.spanContext());

@mydeamydeaDec 16, 2024

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This method implementation was redundant, we already check traceId outside here, so we can simply get the decision directly. This was the only place where we still used getPropagationContextFromSpan.

@mydea
mydeaforce-pushed the fn/removeSpanId branch 2 times, most recently from 5a72bc7 to 4eb2604CompareDecember 17, 2024 08:29
@mydea
mydea marked this pull request as ready for review December 17, 2024 09:11

@Lms24Lms24 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is in a good state, given we already made the decision that it's okay TwP scenarios to have different spanIds in consecutive errors or calls (see my other comment as well).

Before we merge this, I'd like to ensure that we have the following scenarios covered:

  • [TwP] trace id within trace envelope header is equal to event.contexts.trace
  • The sentry-trace header contains the id of the http.client span of the request

I'm fairly sure we already test this but it's probably worth to double check it

Comment on lines +44 to +57
expect(traceData['sentry-trace']).toMatch(/^[a-f0-9]{32}-[a-f0-9]{16}$/);
expect(traceData['sentry-trace']).toContain(`${trace_id}-`);
// span_id is a random span ID
expect(traceData['sentry-trace']).not.toContain(span_id);

expect(traceData.baggage).toContain(`sentry-trace_id=${trace_id}`);
expect(traceData.baggage).not.toContain('sentry-sampled=');

expect(traceData.metaTags).toContain(`<meta name="sentry-trace" content="${trace_id}-${span_id}"/>`);
expect(traceData.metaTags).toMatch(/<meta name="sentry-trace" content="[a-f0-9]{32}-[a-f0-9]{16}"\/>/);
expect(traceData.metaTags).toContain(`<meta name="sentry-trace" content="${trace_id}-`);
// span_id is a random span ID
expect(traceData.metaTags).not.toContain(span_id);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hmm so I'm a bit concerned about this. IIUC previously, the spanIds in this test were equal because we stored it on the PC. Now, consecutive calls to APIs like getTraceData() or getTraceMetaTags() like in this test deliver diverging span ids.

This also implies the following scenario for a TwP-configured SDK:

  1. app makes http request and propagates a sentry-trace header with spanId 123
  2. directly afterwards an error is captured and its event.context.trace holds a different spanId 456

I thought about the implications of this and while I'm still worried, I couldn't really come up with a concrete use case where this is actually problematic. I was especially worried if we'd send different spanIds within one error or transaction event but I think we only send this in event.context.trace. The trace envelope header does not contain the spanId at all, so it shouldn't be a problem.

However, we should ensure that the same traceId is still used in both places. Which I hope we have tests for but it's better to double-check.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, so the traceId is tested here (see line 53).

I totally get what you mean, it was the same for me - thinking, hmm, this is different, but then, is it actually a problem?

Closes#12385
This also deprecates `getPropagationContextFromSpan` as it is no longer used/needed. We may think about removing this in v9, but IMHO we can also just leave this for v9, it does not hurt too much to have it in there...
fix tests
remove unneeded test
fix stuff
fix tests
better test
fix test
@mydea
mydea requested a review from Lms24January 8, 2025 10:30
Comment threadpackages/core/src/types-hoist/tracing.ts Outdated
Co-authored-by: Luca Forstner <luca.forstner@sentry.io>
@mydea
mydea merged commit d5af638 into developJan 9, 2025
@mydea
mydea deleted the fn/removeSpanId branch January 9, 2025 08:26
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[v9] Rethink spanId on propagationContext

3 participants

@mydea@lforst@Lms24
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat!: Remove spanId from propagation context - #14733

Merged
mydea merged 5 commits into
developfrom
fn/removeSpanId
Jan 9, 2025
Merged

feat!: Remove spanId from propagation context#14733
mydea merged 5 commits into
developfrom
fn/removeSpanId

Conversation

@mydea

Copy link
Copy Markdown
Member

Closes#12385

This also deprecates getPropagationContextFromSpan as it is no longer used/needed. We may think about removing this in v9, but IMHO we can also just leave this for v9, it does not hurt too much to have it in there...

@mydeamydea self-assigned this Dec 16, 2024
@github-actions

github-actionsBot commented Dec 16, 2024

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser22.8 KB+0.29%+66 B 🔺
@sentry/browser - with treeshaking flags21.55 KB+0.18%+38 B 🔺
@sentry/browser (incl. Tracing)35.4 KB+0.04%+11 B 🔺
@sentry/browser (incl. Tracing, Replay)72.09 KB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags62.63 KB+0.02%+7 B 🔺
@sentry/browser (incl. Tracing, Replay with Canvas)76.35 KB-0.01%-5 B 🔽
@sentry/browser (incl. Tracing, Replay, Feedback)88.38 KB+0.01%+4 B 🔺
@sentry/browser (incl. Feedback)39.12 KB+0.12%+48 B 🔺
@sentry/browser (incl. sendFeedback)27.48 KB+0.22%+60 B 🔺
@sentry/browser (incl. FeedbackAsync)32.3 KB+0.18%+59 B 🔺
@sentry/react25.55 KB+0.22%+57 B 🔺
@sentry/react (incl. Tracing)38.15 KB+0.01%+1 B 🔺
@sentry/vue27.09 KB+0.05%+13 B 🔺
@sentry/vue (incl. Tracing)37.24 KB+0.01%+1 B 🔺
@sentry/svelte22.94 KB+0.34%+78 B 🔺
CDN Bundle24.15 KB+0.13%+30 B 🔺
CDN Bundle (incl. Tracing)35.71 KB+0.05%+15 B 🔺
CDN Bundle (incl. Tracing, Replay)70.27 KB+0.03%+21 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback)75.48 KB+0.03%+19 B 🔺
CDN Bundle - uncompressed70.59 KB+0.18%+124 B 🔺
CDN Bundle (incl. Tracing) - uncompressed106.08 KB+0.04%+39 B 🔺
CDN Bundle (incl. Tracing, Replay) - uncompressed216.96 KB+0.02%+39 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed229.71 KB+0.02%+39 B 🔺
@sentry/nextjs (client)38.28 KB-0.01%-1 B 🔽
@sentry/sveltekit (client)35.91 KB+0.04%+13 B 🔺
@sentry/node161.45 KB-0.02%-19 B 🔽
@sentry/node - without tracing97.34 KB+0.06%+56 B 🔺
@sentry/aws-serverless127.1 KB-0.02%-24 B 🔽

View base workflow run

@@ -1,230 +0,0 @@
import { Scope, getGlobalScope, prepareEvent } from '@sentry/core';

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This test is not needed, it is just a duplicate of the core tests. this is a leftover from the experimental days when node had a forked/custom scope, but it is the same now.

if (isSpanContextValid(parentContext) && parentContext.traceId === traceId) {
if (parentContext.isRemote) {
const parentSampled = getParentRemoteSampled(parentSpan);
const parentSampled = getSamplingDecision(parentSpan.spanContext());

@mydeamydeaDec 16, 2024

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This method implementation was redundant, we already check traceId outside here, so we can simply get the decision directly. This was the only place where we still used getPropagationContextFromSpan.

@mydea
mydeaforce-pushed the fn/removeSpanId branch 2 times, most recently from 5a72bc7 to 4eb2604CompareDecember 17, 2024 08:29
@mydea
mydea marked this pull request as ready for review December 17, 2024 09:11

@Lms24Lms24 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is in a good state, given we already made the decision that it's okay TwP scenarios to have different spanIds in consecutive errors or calls (see my other comment as well).

Before we merge this, I'd like to ensure that we have the following scenarios covered:

  • [TwP] trace id within trace envelope header is equal to event.contexts.trace
  • The sentry-trace header contains the id of the http.client span of the request

I'm fairly sure we already test this but it's probably worth to double check it

Comment on lines +44 to +57
expect(traceData['sentry-trace']).toMatch(/^[a-f0-9]{32}-[a-f0-9]{16}$/);
expect(traceData['sentry-trace']).toContain(`${trace_id}-`);
// span_id is a random span ID
expect(traceData['sentry-trace']).not.toContain(span_id);

expect(traceData.baggage).toContain(`sentry-trace_id=${trace_id}`);
expect(traceData.baggage).not.toContain('sentry-sampled=');

expect(traceData.metaTags).toContain(`<meta name="sentry-trace" content="${trace_id}-${span_id}"/>`);
expect(traceData.metaTags).toMatch(/<meta name="sentry-trace" content="[a-f0-9]{32}-[a-f0-9]{16}"\/>/);
expect(traceData.metaTags).toContain(`<meta name="sentry-trace" content="${trace_id}-`);
// span_id is a random span ID
expect(traceData.metaTags).not.toContain(span_id);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hmm so I'm a bit concerned about this. IIUC previously, the spanIds in this test were equal because we stored it on the PC. Now, consecutive calls to APIs like getTraceData() or getTraceMetaTags() like in this test deliver diverging span ids.

This also implies the following scenario for a TwP-configured SDK:

  1. app makes http request and propagates a sentry-trace header with spanId 123
  2. directly afterwards an error is captured and its event.context.trace holds a different spanId 456

I thought about the implications of this and while I'm still worried, I couldn't really come up with a concrete use case where this is actually problematic. I was especially worried if we'd send different spanIds within one error or transaction event but I think we only send this in event.context.trace. The trace envelope header does not contain the spanId at all, so it shouldn't be a problem.

However, we should ensure that the same traceId is still used in both places. Which I hope we have tests for but it's better to double-check.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, so the traceId is tested here (see line 53).

I totally get what you mean, it was the same for me - thinking, hmm, this is different, but then, is it actually a problem?

Closes#12385
This also deprecates `getPropagationContextFromSpan` as it is no longer used/needed. We may think about removing this in v9, but IMHO we can also just leave this for v9, it does not hurt too much to have it in there...
fix tests
remove unneeded test
fix stuff
fix tests
better test
fix test
@mydea
mydea requested a review from Lms24January 8, 2025 10:30
Comment threadpackages/core/src/types-hoist/tracing.ts Outdated
Co-authored-by: Luca Forstner <luca.forstner@sentry.io>
@mydea
mydea merged commit d5af638 into developJan 9, 2025
@mydea
mydea deleted the fn/removeSpanId branch January 9, 2025 08:26
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[v9] Rethink spanId on propagationContext

3 participants

@mydea@lforst@Lms24
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

feat!: Remove spanId from propagation context - #14733

Merged
mydea merged 5 commits into
developfrom
fn/removeSpanId
Jan 9, 2025
Merged

feat!: Remove spanId from propagation context#14733
mydea merged 5 commits into
developfrom
fn/removeSpanId

Conversation

@mydea

Copy link
Copy Markdown
Member

Closes#12385

This also deprecates getPropagationContextFromSpan as it is no longer used/needed. We may think about removing this in v9, but IMHO we can also just leave this for v9, it does not hurt too much to have it in there...

@mydeamydea self-assigned this Dec 16, 2024
@github-actions

github-actionsBot commented Dec 16, 2024

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser22.8 KB+0.29%+66 B 🔺
@sentry/browser - with treeshaking flags21.55 KB+0.18%+38 B 🔺
@sentry/browser (incl. Tracing)35.4 KB+0.04%+11 B 🔺
@sentry/browser (incl. Tracing, Replay)72.09 KB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags62.63 KB+0.02%+7 B 🔺
@sentry/browser (incl. Tracing, Replay with Canvas)76.35 KB-0.01%-5 B 🔽
@sentry/browser (incl. Tracing, Replay, Feedback)88.38 KB+0.01%+4 B 🔺
@sentry/browser (incl. Feedback)39.12 KB+0.12%+48 B 🔺
@sentry/browser (incl. sendFeedback)27.48 KB+0.22%+60 B 🔺
@sentry/browser (incl. FeedbackAsync)32.3 KB+0.18%+59 B 🔺
@sentry/react25.55 KB+0.22%+57 B 🔺
@sentry/react (incl. Tracing)38.15 KB+0.01%+1 B 🔺
@sentry/vue27.09 KB+0.05%+13 B 🔺
@sentry/vue (incl. Tracing)37.24 KB+0.01%+1 B 🔺
@sentry/svelte22.94 KB+0.34%+78 B 🔺
CDN Bundle24.15 KB+0.13%+30 B 🔺
CDN Bundle (incl. Tracing)35.71 KB+0.05%+15 B 🔺
CDN Bundle (incl. Tracing, Replay)70.27 KB+0.03%+21 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback)75.48 KB+0.03%+19 B 🔺
CDN Bundle - uncompressed70.59 KB+0.18%+124 B 🔺
CDN Bundle (incl. Tracing) - uncompressed106.08 KB+0.04%+39 B 🔺
CDN Bundle (incl. Tracing, Replay) - uncompressed216.96 KB+0.02%+39 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed229.71 KB+0.02%+39 B 🔺
@sentry/nextjs (client)38.28 KB-0.01%-1 B 🔽
@sentry/sveltekit (client)35.91 KB+0.04%+13 B 🔺
@sentry/node161.45 KB-0.02%-19 B 🔽
@sentry/node - without tracing97.34 KB+0.06%+56 B 🔺
@sentry/aws-serverless127.1 KB-0.02%-24 B 🔽

View base workflow run

@@ -1,230 +0,0 @@
import { Scope, getGlobalScope, prepareEvent } from '@sentry/core';

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This test is not needed, it is just a duplicate of the core tests. this is a leftover from the experimental days when node had a forked/custom scope, but it is the same now.

if (isSpanContextValid(parentContext) && parentContext.traceId === traceId) {
if (parentContext.isRemote) {
const parentSampled = getParentRemoteSampled(parentSpan);
const parentSampled = getSamplingDecision(parentSpan.spanContext());

@mydeamydeaDec 16, 2024

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This method implementation was redundant, we already check traceId outside here, so we can simply get the decision directly. This was the only place where we still used getPropagationContextFromSpan.

@mydea
mydeaforce-pushed the fn/removeSpanId branch 2 times, most recently from 5a72bc7 to 4eb2604CompareDecember 17, 2024 08:29
@mydea
mydea marked this pull request as ready for review December 17, 2024 09:11

@Lms24Lms24 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is in a good state, given we already made the decision that it's okay TwP scenarios to have different spanIds in consecutive errors or calls (see my other comment as well).

Before we merge this, I'd like to ensure that we have the following scenarios covered:

  • [TwP] trace id within trace envelope header is equal to event.contexts.trace
  • The sentry-trace header contains the id of the http.client span of the request

I'm fairly sure we already test this but it's probably worth to double check it

Comment on lines +44 to +57
expect(traceData['sentry-trace']).toMatch(/^[a-f0-9]{32}-[a-f0-9]{16}$/);
expect(traceData['sentry-trace']).toContain(`${trace_id}-`);
// span_id is a random span ID
expect(traceData['sentry-trace']).not.toContain(span_id);

expect(traceData.baggage).toContain(`sentry-trace_id=${trace_id}`);
expect(traceData.baggage).not.toContain('sentry-sampled=');

expect(traceData.metaTags).toContain(`<meta name="sentry-trace" content="${trace_id}-${span_id}"/>`);
expect(traceData.metaTags).toMatch(/<meta name="sentry-trace" content="[a-f0-9]{32}-[a-f0-9]{16}"\/>/);
expect(traceData.metaTags).toContain(`<meta name="sentry-trace" content="${trace_id}-`);
// span_id is a random span ID
expect(traceData.metaTags).not.toContain(span_id);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hmm so I'm a bit concerned about this. IIUC previously, the spanIds in this test were equal because we stored it on the PC. Now, consecutive calls to APIs like getTraceData() or getTraceMetaTags() like in this test deliver diverging span ids.

This also implies the following scenario for a TwP-configured SDK:

  1. app makes http request and propagates a sentry-trace header with spanId 123
  2. directly afterwards an error is captured and its event.context.trace holds a different spanId 456

I thought about the implications of this and while I'm still worried, I couldn't really come up with a concrete use case where this is actually problematic. I was especially worried if we'd send different spanIds within one error or transaction event but I think we only send this in event.context.trace. The trace envelope header does not contain the spanId at all, so it shouldn't be a problem.

However, we should ensure that the same traceId is still used in both places. Which I hope we have tests for but it's better to double-check.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, so the traceId is tested here (see line 53).

I totally get what you mean, it was the same for me - thinking, hmm, this is different, but then, is it actually a problem?

Closes#12385
This also deprecates `getPropagationContextFromSpan` as it is no longer used/needed. We may think about removing this in v9, but IMHO we can also just leave this for v9, it does not hurt too much to have it in there...
fix tests
remove unneeded test
fix stuff
fix tests
better test
fix test
@mydea
mydea requested a review from Lms24January 8, 2025 10:30
Comment threadpackages/core/src/types-hoist/tracing.ts Outdated
Co-authored-by: Luca Forstner <luca.forstner@sentry.io>
@mydea
mydea merged commit d5af638 into developJan 9, 2025
@mydea
mydea deleted the fn/removeSpanId branch January 9, 2025 08:26
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[v9] Rethink spanId on propagationContext

3 participants

@mydea@lforst@Lms24