Skip to content

Conversation

onurtemizkan
Copy link
Collaborator

@onurtemizkan onurtemizkan commented Oct 6, 2025

This resolves the issue that occurs when an extra navigation transaction is created after a prematurely ended pageload transaction in React Router lazy routes.

This apparently occurs when there's a long-running pageload with lazy-routes (after fetching assets, there are multiple potentially long-running API calls happening).

This causes the pageload transaction to prematurely end, even before the fully parameterized transaction name is resolved. The reason is that there can be a POP event emitted, which we subscribe to create a navigation transaction. This ends the ongoing pageload transaction before its name is updated with a resolved parameterized route path, and starts a navigation transaction, which contains the remaining spans that were supposed to be a part of the pageload transaction.

This fix makes sure the initial POP events are not necessarily treated as navigation pointers, which should fix both:

  • Duplicate / extra navigation transactions having a part of pageload spans.
  • Remaining wildcards in the pageload transaction names

@onurtemizkan onurtemizkan force-pushed the onur/react-router-long-running-pageload-guard branch from c5b63b9 to b3027fd Compare October 6, 2025 11:21
@onurtemizkan onurtemizkan marked this pull request as ready for review October 6, 2025 12:14
cursor[bot]

This comment was marked as outdated.

Copy link
Member

@chargome chargome left a comment

Choose a reason for hiding this comment

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

Nice find! Any way we can test this in e2e?

cursor[bot]

This comment was marked as outdated.

Copy link
Contributor

github-actions bot commented Oct 8, 2025

node-overhead report 🧳

Note: This is a synthetic benchmark with a minimal express app and does not necessarily reflect the real-world performance impact in an application.

Scenario Requests/s % of Baseline Prev. Requests/s Change %
GET Baseline 9,107 - 8,994 +1%
GET With Sentry 1,424 16% 1,430 -0%
GET With Sentry (error only) 6,157 68% 6,248 -1%
POST Baseline 1,212 - 1,205 +1%
POST With Sentry 555 46% 555 -
POST With Sentry (error only) 1,079 89% 1,068 +1%
MYSQL Baseline 3,381 - 3,329 +2%
MYSQL With Sentry 512 15% 505 +1%
MYSQL With Sentry (error only) 2,763 82% 2,716 +2%

View base workflow run

return;
}
}
}
Copy link

Choose a reason for hiding this comment

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

Bug: Race Condition in Pageload Completion Logic

The pageload completion logic has a race condition. It can prematurely mark pageload as complete if the root span is missing, not necessarily because pageload finished. This causes legitimate POP navigation events immediately following pageload to be incorrectly ignored.

Fix in Cursor Fix in Web

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