Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(browser): Avoid recording long task spans starting before their parent span #14183

Merged
merged 4 commits into from
Nov 5, 2024

Conversation

Lms24
Copy link
Member

@Lms24 Lms24 commented Nov 5, 2024

This PR fixes inconsistent behaviour in our browserTracingIntegration, where we'd previously add ui.long-task spans to an ongoing (navigation) transaction, even if the long task started before the navigation transaction started.

Most other browserTracingIntegration spans (resource, timing, measure/mark spans) are already dropped/not started if their start time stamp is earlier than the navigation start time stamp. This happens in one central location but it does not apply to long-task spans because they have to be handled separately.

This PR specifically:

  • not checks for the start time stamp and drops long task spans starting before a navigation spans started.
  • refactors the start and end logic a bit to compensate for bundle size increase (see comment)
  • adds a regression test that previously would fail

Note: We have similar behaviour for long animation frame spans. I'll probably open another PR to adjust the logic there as well.

continue;
}

startAndEndSpan(parent, startTime, startTime + duration, {
Copy link
Member Author

@Lms24 Lms24 Nov 5, 2024

Choose a reason for hiding this comment

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

small refactor: I switched from manually starting and ending the span to using the startAndEndSpan helper which does just that. However, the helper would also adjust the navigation span start time stamp if the stamp was started beforehand.
I medium-strongly feel we should not adjust this start time stamp b/c the long task might have nothing to do with the navigation but it would look like it otherwise.
If reviewers prefer the other way around (i.e. actually record the span and adjust the transaction start time), I'm also fine with that.

Copy link
Contributor

github-actions bot commented Nov 5, 2024

size-limit report 📦

⚠️ Warning: Base artifact is not the latest one, because the latest workflow run is not done yet. This may lead to incorrect results. Try to re-run all tests to get up to date results.

Path Size % Change Change
@sentry/browser 22.76 KB - -
@sentry/browser - with treeshaking flags 21.54 KB - -
@sentry/browser (incl. Tracing) 35.18 KB +0.07% +25 B 🔺
@sentry/browser (incl. Tracing, Replay) 71.9 KB +0.05% +33 B 🔺
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags 62.33 KB +0.07% +40 B 🔺
@sentry/browser (incl. Tracing, Replay with Canvas) 76.22 KB +0.05% +33 B 🔺
@sentry/browser (incl. Tracing, Replay, Feedback) 89.02 KB +0.05% +40 B 🔺
@sentry/browser (incl. Feedback) 39.9 KB - -
@sentry/browser (incl. sendFeedback) 27.4 KB - -
@sentry/browser (incl. FeedbackAsync) 32.2 KB - -
@sentry/react 25.51 KB - -
@sentry/react (incl. Tracing) 38.15 KB +0.08% +30 B 🔺
@sentry/vue 26.9 KB - -
@sentry/vue (incl. Tracing) 37.07 KB +0.08% +28 B 🔺
@sentry/svelte 22.9 KB - -
CDN Bundle 24.1 KB - -
CDN Bundle (incl. Tracing) 36.99 KB +0.08% +27 B 🔺
CDN Bundle (incl. Tracing, Replay) 71.66 KB +0.05% +34 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback) 77 KB +0.05% +37 B 🔺
CDN Bundle - uncompressed 70.66 KB - -
CDN Bundle (incl. Tracing) - uncompressed 109.79 KB +0.06% +60 B 🔺
CDN Bundle (incl. Tracing, Replay) - uncompressed 222.31 KB +0.03% +60 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed 235.52 KB +0.03% +60 B 🔺
@sentry/nextjs (client) 38.23 KB +0.08% +28 B 🔺
@sentry/sveltekit (client) 35.78 KB +0.09% +30 B 🔺
@sentry/node 131.52 KB - -
@sentry/node - without tracing 95.64 KB - -
@sentry/aws-serverless 105.91 KB -0.01% -1 B 🔽

View base workflow run

@Lms24 Lms24 self-assigned this Nov 5, 2024
@Lms24 Lms24 requested review from AbhiPrasad and lforst November 5, 2024 12:37
Copy link
Member

@lforst lforst left a comment

Choose a reason for hiding this comment

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

☀️

@@ -40,7 +40,7 @@ module.exports = [
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init', 'browserTracingIntegration'),
gzip: true,
limit: '36 KB',
limit: '36.5 KB',
Copy link
Member Author

@Lms24 Lms24 Nov 5, 2024

Choose a reason for hiding this comment

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

we're just ~15 bytes over the previous limit but I figured I'd give the limit a slightly bigger bump as we usually do

@Lms24 Lms24 merged commit ac57e53 into develop Nov 5, 2024
143 checks passed
@Lms24 Lms24 deleted the lms/fix-browser-longtask-starttime branch November 5, 2024 13:12
Lms24 added a commit that referenced this pull request Nov 6, 2024
…ore their parent span (#14186)

- Check for start time of parent navigation span and don't start
long animation frame span if its start timestamp is earlier than the
navigation start time stamp
- Refactor span starting logic to use common helper function to
compensate the bundle size increase
- Add regression test that failed previously
- Improve regression test from #14183 to avoid flakes and improve the
in-test navigation
alexandresoro pushed a commit to alexandresoro/ouca that referenced this pull request Nov 9, 2024
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [@sentry/node](https://github.com/getsentry/sentry-javascript/tree/master/packages/node) ([source](https://github.com/getsentry/sentry-javascript)) | dependencies | minor | [`8.36.0` -> `8.37.1`](https://renovatebot.com/diffs/npm/@sentry%2fnode/8.36.0/8.37.1) |
| [@sentry/react](https://github.com/getsentry/sentry-javascript/tree/master/packages/react) ([source](https://github.com/getsentry/sentry-javascript)) | dependencies | minor | [`8.36.0` -> `8.37.1`](https://renovatebot.com/diffs/npm/@sentry%2freact/8.36.0/8.37.1) |

---

### Release Notes

<details>
<summary>getsentry/sentry-javascript (@&#8203;sentry/node)</summary>

### [`v8.37.1`](https://github.com/getsentry/sentry-javascript/blob/HEAD/CHANGELOG.md#8371)

[Compare Source](getsentry/sentry-javascript@8.37.0...8.37.1)

-   feat(deps): Bump [@&#8203;opentelemetry/instrumentation](https://github.com/opentelemetry/instrumentation) from 0.53.0 to 0.54.0 for [@&#8203;sentry/opentelemetry](https://github.com/sentry/opentelemetry) ([#&#8203;14187](getsentry/sentry-javascript#14187))

### [`v8.37.0`](https://github.com/getsentry/sentry-javascript/blob/HEAD/CHANGELOG.md#8370)

[Compare Source](getsentry/sentry-javascript@8.36.0...8.37.0)

##### Important Changes

-   **feat(nuxt): Add `piniaIntegration` ([#&#8203;14138](getsentry/sentry-javascript#14138

The Nuxt SDK now allows you to track Pinia state for captured errors. To enable the Pinia plugin, add the `piniaIntegration` to your client config:

```ts
// sentry.client.config.ts
import { usePinia } from '#imports';

Sentry.init({
  integrations: [
    Sentry.piniaIntegration(usePinia(), {
      /* optional Pinia plugin options */
    }),
  ],
});
```

-   **feat: Deprecate metrics API ([#&#8203;14157](getsentry/sentry-javascript#14157

The Sentry Metrics beta has ended in favour of revisiting metrics in another form at a later date.

This new approach will include different APIs, making the current metrics API unnecessary. This release
deprecates the metrics API with the plan to remove in the next SDK major version. If you currently use the
metrics API in your code, you can safely continue to do so but sent data will no longer be processed by Sentry.

[Learn more](https://sentry.zendesk.com/hc/en-us/articles/26369339769883-Metrics-Beta-Ended-on-October-7th) about the end of the Metrics beta.

##### Other Changes

-   feat(browser): Add `http.response_delivery_type` attribute to resource spans ([#&#8203;14056](getsentry/sentry-javascript#14056))
-   feat(browser): Add `skipBrowserExtensionCheck` escape hatch option ([#&#8203;14147](getsentry/sentry-javascript#14147))
-   feat(deps): Bump [@&#8203;opentelemetry/instrumentation](https://github.com/opentelemetry/instrumentation) from 0.53.0 to 0.54.0 ([#&#8203;14174](getsentry/sentry-javascript#14174))
-   feat(deps): Bump [@&#8203;opentelemetry/instrumentation-fastify](https://github.com/opentelemetry/instrumentation-fastify) from 0.40.0 to 0.41.0 ([#&#8203;14175](getsentry/sentry-javascript#14175))
-   feat(deps): Bump [@&#8203;opentelemetry/instrumentation-graphql](https://github.com/opentelemetry/instrumentation-graphql) from 0.43.0 to 0.44.0 ([#&#8203;14173](getsentry/sentry-javascript#14173))
-   feat(deps): Bump [@&#8203;opentelemetry/instrumentation-mongodb](https://github.com/opentelemetry/instrumentation-mongodb) from 0.47.0 to 0.48.0 ([#&#8203;14171](getsentry/sentry-javascript#14171))
-   feat(deps): Bump [@&#8203;opentelemetry/propagator-aws-xray](https://github.com/opentelemetry/propagator-aws-xray) from 1.25.1 to 1.26.0 ([#&#8203;14172](getsentry/sentry-javascript#14172))
-   feat(nuxt): Add `asyncFunctionReExports` to define re-exported server functions ([#&#8203;14104](getsentry/sentry-javascript#14104))
-   feat(nuxt): Add `piniaIntegration` ([#&#8203;14138](getsentry/sentry-javascript#14138))
-   fix(browser): Avoid recording long task spans starting before their parent span ([#&#8203;14183](getsentry/sentry-javascript#14183))
-   fix(core): Ensure errors thrown in async cron jobs bubble up ([#&#8203;14182](getsentry/sentry-javascript#14182))
-   fix(core): Silently fail `maybeInstrument` ([#&#8203;14140](getsentry/sentry-javascript#14140))
-   fix(nextjs): Resolve path for dynamic webpack import ([#&#8203;13751](getsentry/sentry-javascript#13751))
-   fix(node): Make sure `modulesIntegration` does not crash esm apps ([#&#8203;14169](getsentry/sentry-javascript#14169))

Work in this release was contributed by [@&#8203;rexxars](https://github.com/rexxars). Thank you for your contribution!

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC4xNDIuNyIsInVwZGF0ZWRJblZlciI6IjM4LjE0Mi43IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=-->

Reviewed-on: https://git.tristess.app/alexandresoro/ouca/pulls/299
Reviewed-by: Alexandre Soro <[email protected]>
Co-authored-by: renovate <[email protected]>
Co-committed-by: renovate <[email protected]>
Sign up for free to 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.

2 participants