Skip to content

Conversation

unstubbable
Copy link
Collaborator

@unstubbable unstubbable commented Oct 6, 2025

Alternative to #34638, covering not only hanging promises, but also unresolved I/O. In fact, the stacks for hanging promises when aborting prerenders can already be fixed by defining a displayName for those promises, as enabled by #34825. Therefore this PR does not change anything about those, and just adds tests for confirm the expected behavior in the prerender abort case.

For unresolved I/O, we're adding special handling to the async_hooks tracking so that for aborted async functions (typically server components) we can find an unresolved await node that we can serialize as I/O node, and subsequently use for owner and component stacks, to indicate where the component suspended when the prerender was aborted.

@meta-cla meta-cla bot added the CLA Signed label Oct 6, 2025
@unstubbable unstubbable changed the title [Flight] Improve owner and components stacks when aborting [Flight] Improve owner and components stack when aborting Oct 6, 2025
@github-actions github-actions bot added the React Core Team Opened by a member of the React Core Team label Oct 6, 2025
@unstubbable unstubbable changed the title [Flight] Improve owner and components stack when aborting [Flight] Improve owner and component stacks when aborting Oct 6, 2025
@unstubbable unstubbable force-pushed the improve-aborted-promise-stacks branch 2 times, most recently from 5e89b83 to b174161 Compare October 6, 2025 16:18
@react-sizebot
Copy link

react-sizebot commented Oct 6, 2025

Comparing: 5f2b571...6d836b3

Critical size changes

Includes critical production bundles, as well as any change greater than 2%:

Name +/- Base Current +/- gzip Base gzip Current gzip
oss-stable/react-dom/cjs/react-dom.production.js = 6.68 kB 6.68 kB = 1.83 kB 1.83 kB
oss-stable/react-dom/cjs/react-dom-client.production.js = 605.41 kB 605.41 kB = 107.22 kB 107.22 kB
oss-experimental/react-dom/cjs/react-dom.production.js = 6.69 kB 6.69 kB = 1.83 kB 1.83 kB
oss-experimental/react-dom/cjs/react-dom-client.production.js = 664.38 kB 664.38 kB = 117.09 kB 117.09 kB
facebook-www/ReactDOM-prod.classic.js = 688.25 kB 688.25 kB = 121.13 kB 121.13 kB
facebook-www/ReactDOM-prod.modern.js = 678.67 kB 678.67 kB = 119.49 kB 119.48 kB

Significant size changes

Includes any change greater than 0.2%:

Expand to show
Name +/- Base Current +/- gzip Base gzip Current gzip
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +0.50% 211.65 kB 212.71 kB +0.46% 38.66 kB 38.84 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +0.50% 211.65 kB 212.71 kB +0.46% 38.66 kB 38.84 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +0.49% 216.26 kB 217.32 kB +0.44% 39.49 kB 39.66 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.development.js +0.49% 218.16 kB 219.22 kB +0.47% 39.34 kB 39.52 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.development.js +0.49% 218.16 kB 219.22 kB +0.47% 39.34 kB 39.52 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.development.js +0.48% 222.77 kB 223.83 kB +0.42% 40.17 kB 40.34 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js +0.47% 224.87 kB 225.93 kB +0.46% 40.41 kB 40.59 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js +0.47% 224.87 kB 225.93 kB +0.46% 40.41 kB 40.59 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +0.47% 226.08 kB 227.14 kB +0.44% 40.71 kB 40.89 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +0.47% 226.08 kB 227.14 kB +0.44% 40.71 kB 40.89 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +0.47% 226.13 kB 227.19 kB +0.43% 40.71 kB 40.89 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +0.47% 226.13 kB 227.19 kB +0.43% 40.71 kB 40.89 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js +0.46% 229.48 kB 230.54 kB +0.41% 41.24 kB 41.41 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +0.46% 230.69 kB 231.75 kB +0.41% 41.54 kB 41.71 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +0.46% 230.74 kB 231.80 kB +0.42% 41.54 kB 41.71 kB

Generated by 🚫 dangerJS against 6d836b3

@unstubbable unstubbable force-pushed the improve-aborted-promise-stacks branch 4 times, most recently from d785334 to 5454fe9 Compare October 10, 2025 14:44
@unstubbable unstubbable force-pushed the improve-aborted-promise-stacks branch 3 times, most recently from 70d31fe to d26ae68 Compare October 14, 2025 16:16
when scheduling prerendering and aborting in successive tasks using setImmediate
  ✕ includes deeper location for hanging promises
  ✓ includes deeper location for hanging promises in ignore-listed components
  ! includes deeper location for unresolved I/O (this one is flaky!)
when scheduling prerendering and aborting in successive tasks using setTimeout
  ✓ includes deeper location for hanging promises
  ✕ includes deeper location for hanging promises in ignore-listed components
  ✕ includes deeper location for unresolved I/O
@unstubbable unstubbable force-pushed the improve-aborted-promise-stacks branch from d26ae68 to 6d836b3 Compare October 14, 2025 18:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA Signed React Core Team Opened by a member of the React Core Team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants