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

[Flight] Add global onError handler #21129

Merged
merged 2 commits into from Mar 30, 2021

Conversation

sebmarkbage
Copy link
Collaborator

I added this handler to Fizz in #21056.

Errors still get rethrown on the client - if they end up getting rendered. It might be worth while logging errors on the server to catch things if they don't end up making it to the client, or if the client doesn't end up able to log it back to the server.

I also changed the way errors in React itself work for parity with Fizz. They now report to onError, but they also report to closeWithError. closeWithError hands off that error to the underlying stream and terminates the stream.

We don't have closeWithError in Relay so it just calls close there. Note that we might have previously caught these in an outer error handler but now they're silenced there and instead reported to one of these other methods. So we probably want to implement a handler for those in www.

@facebook-github-bot facebook-github-bot added CLA Signed React Core Team Opened by a member of the React Core Team labels Mar 29, 2021
The callback is called any time an error is generated in a server component.

This allows it to be logged on a server if needed. It'll still be rethrown
on the client so it can be logged there too but in case it never reaches
the client, here's a way to make sure it doesn't get lost.
@sizebot
Copy link

sizebot commented Mar 29, 2021

Comparing: 64983aa...e99bfd4

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.min.js = 122.30 kB 122.30 kB = 39.25 kB 39.25 kB
oss-experimental/react-dom/cjs/react-dom.production.min.js = 128.81 kB 128.81 kB = 41.33 kB 41.33 kB
facebook-www/ReactDOM-prod.classic.js = 404.53 kB 404.53 kB = 75.21 kB 75.21 kB
facebook-www/ReactDOM-prod.modern.js = 392.79 kB 392.79 kB = 73.33 kB 73.33 kB
facebook-www/ReactDOMForked-prod.classic.js = 404.53 kB 404.53 kB = 75.21 kB 75.21 kB
facebook-www/ReactFlightDOMRelayServer-prod.classic.js +7.01% 14.37 kB 15.37 kB +4.23% 3.76 kB 3.92 kB
facebook-www/ReactFlightDOMRelayServer-prod.modern.js +7.01% 14.37 kB 15.37 kB +4.23% 3.76 kB 3.92 kB
facebook-relay/flight/ReactFlightNativeRelayServer-prod.js +6.48% 14.84 kB 15.80 kB +3.63% 3.89 kB 4.03 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-writer.browser.development.server.js +5.91% 25.70 kB 27.22 kB +6.80% 6.91 kB 7.38 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-writer.browser.development.server.js +5.91% 25.70 kB 27.22 kB +6.80% 6.91 kB 7.38 kB
oss-experimental/react-server-dom-webpack/umd/react-server-dom-webpack-writer.browser.development.server.js +5.81% 27.36 kB 28.95 kB +6.70% 7.06 kB 7.53 kB
oss-stable/react-server-dom-webpack/umd/react-server-dom-webpack-writer.browser.development.server.js +5.81% 27.36 kB 28.95 kB +6.70% 7.06 kB 7.53 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-writer.browser.production.min.server.js +4.93% 6.31 kB 6.62 kB +3.64% 2.70 kB 2.79 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-writer.browser.production.min.server.js +4.93% 6.31 kB 6.62 kB +3.64% 2.70 kB 2.79 kB
oss-experimental/react-server-dom-webpack/umd/react-server-dom-webpack-writer.browser.production.min.server.js +4.69% 6.53 kB 6.83 kB +3.08% 2.79 kB 2.88 kB
oss-stable/react-server-dom-webpack/umd/react-server-dom-webpack-writer.browser.production.min.server.js +4.69% 6.53 kB 6.83 kB +3.08% 2.79 kB 2.88 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-writer.node.production.min.server.js +3.96% 6.41 kB 6.67 kB +3.16% 2.69 kB 2.78 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-writer.node.production.min.server.js +3.96% 6.41 kB 6.67 kB +3.16% 2.69 kB 2.78 kB
oss-experimental/react-server/cjs/react-server-flight.production.min.js +3.96% 6.54 kB 6.80 kB +3.04% 2.77 kB 2.85 kB
oss-stable/react-server/cjs/react-server-flight.production.min.js +3.96% 6.54 kB 6.80 kB +3.04% 2.77 kB 2.85 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-writer.node.development.server.js +3.40% 26.65 kB 27.55 kB +3.24% 7.17 kB 7.40 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-writer.node.development.server.js +3.40% 26.65 kB 27.55 kB +3.24% 7.17 kB 7.40 kB
facebook-www/ReactFlightDOMRelayServer-dev.classic.js +2.91% 26.64 kB 27.42 kB +3.01% 6.92 kB 7.13 kB
facebook-www/ReactFlightDOMRelayServer-dev.modern.js +2.91% 26.64 kB 27.42 kB +3.01% 6.92 kB 7.13 kB
facebook-relay/flight/ReactFlightNativeRelayServer-dev.js +2.69% 26.45 kB 27.16 kB +2.61% 7.01 kB 7.20 kB
oss-experimental/react-server/cjs/react-server-flight.development.js +2.66% 26.29 kB 26.99 kB +2.41% 7.05 kB 7.22 kB
oss-stable/react-server/cjs/react-server-flight.development.js +2.66% 26.29 kB 26.99 kB +2.41% 7.05 kB 7.22 kB
oss-experimental/react-noop-renderer/cjs/react-noop-renderer-flight-server.development.js +2.59% 1.85 kB 1.90 kB +2.26% 0.80 kB 0.81 kB
oss-stable/react-noop-renderer/cjs/react-noop-renderer-flight-server.development.js +2.59% 1.85 kB 1.90 kB +2.26% 0.80 kB 0.81 kB
oss-experimental/react-noop-renderer/cjs/react-noop-renderer-flight-server.production.min.js +2.25% 0.93 kB 0.96 kB +1.80% 0.50 kB 0.51 kB
oss-stable/react-noop-renderer/cjs/react-noop-renderer-flight-server.production.min.js +2.25% 0.93 kB 0.96 kB +1.80% 0.50 kB 0.51 kB

Significant size changes

Includes any change greater than 0.2%:

Expand to show
Name +/- Base Current +/- gzip Base gzip Current gzip
facebook-www/ReactFlightDOMRelayServer-prod.classic.js +7.01% 14.37 kB 15.37 kB +4.23% 3.76 kB 3.92 kB
facebook-www/ReactFlightDOMRelayServer-prod.modern.js +7.01% 14.37 kB 15.37 kB +4.23% 3.76 kB 3.92 kB
facebook-relay/flight/ReactFlightNativeRelayServer-prod.js +6.48% 14.84 kB 15.80 kB +3.63% 3.89 kB 4.03 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-writer.browser.development.server.js +5.91% 25.70 kB 27.22 kB +6.80% 6.91 kB 7.38 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-writer.browser.development.server.js +5.91% 25.70 kB 27.22 kB +6.80% 6.91 kB 7.38 kB
oss-experimental/react-server-dom-webpack/umd/react-server-dom-webpack-writer.browser.development.server.js +5.81% 27.36 kB 28.95 kB +6.70% 7.06 kB 7.53 kB
oss-stable/react-server-dom-webpack/umd/react-server-dom-webpack-writer.browser.development.server.js +5.81% 27.36 kB 28.95 kB +6.70% 7.06 kB 7.53 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-writer.browser.production.min.server.js +4.93% 6.31 kB 6.62 kB +3.64% 2.70 kB 2.79 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-writer.browser.production.min.server.js +4.93% 6.31 kB 6.62 kB +3.64% 2.70 kB 2.79 kB
oss-experimental/react-server-dom-webpack/umd/react-server-dom-webpack-writer.browser.production.min.server.js +4.69% 6.53 kB 6.83 kB +3.08% 2.79 kB 2.88 kB
oss-stable/react-server-dom-webpack/umd/react-server-dom-webpack-writer.browser.production.min.server.js +4.69% 6.53 kB 6.83 kB +3.08% 2.79 kB 2.88 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-writer.node.production.min.server.js +3.96% 6.41 kB 6.67 kB +3.16% 2.69 kB 2.78 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-writer.node.production.min.server.js +3.96% 6.41 kB 6.67 kB +3.16% 2.69 kB 2.78 kB
oss-experimental/react-server/cjs/react-server-flight.production.min.js +3.96% 6.54 kB 6.80 kB +3.04% 2.77 kB 2.85 kB
oss-stable/react-server/cjs/react-server-flight.production.min.js +3.96% 6.54 kB 6.80 kB +3.04% 2.77 kB 2.85 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-writer.node.development.server.js +3.40% 26.65 kB 27.55 kB +3.24% 7.17 kB 7.40 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-writer.node.development.server.js +3.40% 26.65 kB 27.55 kB +3.24% 7.17 kB 7.40 kB
facebook-www/ReactFlightDOMRelayServer-dev.classic.js +2.91% 26.64 kB 27.42 kB +3.01% 6.92 kB 7.13 kB
facebook-www/ReactFlightDOMRelayServer-dev.modern.js +2.91% 26.64 kB 27.42 kB +3.01% 6.92 kB 7.13 kB
facebook-relay/flight/ReactFlightNativeRelayServer-dev.js +2.69% 26.45 kB 27.16 kB +2.61% 7.01 kB 7.20 kB
oss-experimental/react-server/cjs/react-server-flight.development.js +2.66% 26.29 kB 26.99 kB +2.41% 7.05 kB 7.22 kB
oss-stable/react-server/cjs/react-server-flight.development.js +2.66% 26.29 kB 26.99 kB +2.41% 7.05 kB 7.22 kB
oss-experimental/react-noop-renderer/cjs/react-noop-renderer-flight-server.development.js +2.59% 1.85 kB 1.90 kB +2.26% 0.80 kB 0.81 kB
oss-stable/react-noop-renderer/cjs/react-noop-renderer-flight-server.development.js +2.59% 1.85 kB 1.90 kB +2.26% 0.80 kB 0.81 kB
oss-experimental/react-noop-renderer/cjs/react-noop-renderer-flight-server.production.min.js +2.25% 0.93 kB 0.96 kB +1.80% 0.50 kB 0.51 kB
oss-stable/react-noop-renderer/cjs/react-noop-renderer-flight-server.production.min.js +2.25% 0.93 kB 0.96 kB +1.80% 0.50 kB 0.51 kB

Generated by 🚫 dangerJS against e99bfd4

@sebmarkbage sebmarkbage merged commit d1294c9 into facebook:master Mar 30, 2021
facebook-github-bot pushed a commit to facebook/react-native that referenced this pull request Apr 6, 2021
Summary:
This sync includes the following changes:
- **[c9aab1c9d](facebook/react@c9aab1c9d )**: react-refresh@0.10.0 //<Dan Abramov>//
- **[516b76b9a](facebook/react@516b76b9a )**: [Fast Refresh] Support callthrough HOCs ([#21104](facebook/react#21104)) //<Dan Abramov>//
- **[0853aab74](facebook/react@0853aab74 )**: Log all errors to console.error by default ([#21130](facebook/react#21130)) //<Sebastian Markbåge>//
- **[d1294c9d4](facebook/react@d1294c9d4 )**: Add global onError handler ([#21129](facebook/react#21129)) //<Sebastian Markbåge>//
- **[64983aab5](facebook/react@64983aab5 )**: Remove redundant setUpdatePriority call ([#21127](facebook/react#21127)) //<Andrew Clark>//
- **[634cc52e6](facebook/react@634cc52e6 )**: Delete dead variable: currentEventWipLanes ([#21123](facebook/react#21123)) //<Andrew Clark>//
- **[1102224bb](facebook/react@1102224bb )**: Fix: flushSync changes priority inside effect ([#21122](facebook/react#21122)) //<Andrew Clark>//
- **[dbe98a5aa](facebook/react@dbe98a5aa )**: Move sync task queue to its own module ([#21109](facebook/react#21109)) //<Andrew Clark>//
- **[3ba5c8737](facebook/react@3ba5c8737 )**: Remove Scheduler indirection ([#21107](facebook/react#21107)) //<Andrew Clark>//
- **[46b68eaf6](facebook/react@46b68eaf6 )**: Delete LanePriority type ([#21090](facebook/react#21090)) //<Andrew Clark>//
- **[dcd13045e](facebook/react@dcd13045e )**: Use Lane to track root callback priority ([#21089](facebook/react#21089)) //<Andrew Clark>//
- **[5f21a9fca](facebook/react@5f21a9fca )**: Clean up host pointers in level 2 of clean-up flag ([#21112](facebook/react#21112)) //<Andrew Clark>//
- **[32d6f39ed](facebook/react@32d6f39ed )**: [Fizz] Support special HTML/SVG/MathML tags to suspend ([#21113](facebook/react#21113)) //<Sebastian Markbåge>//
- **[a77dd13ed](facebook/react@a77dd13ed )**: Delete enableDiscreteEventFlushingChange ([#21110](facebook/react#21110)) //<Andrew Clark>//
- **[048ee4c0c](facebook/react@048ee4c0c )**: Use `act` in fuzz tester to flush expired work ([#21108](facebook/react#21108)) //<Andrew Clark>//
- **[556644e23](facebook/react@556644e23 )**: Fix plurals ([#21106](facebook/react#21106)) //<Sebastian Markbåge>//
- **[8b741437b](facebook/react@8b741437b )**: Rename SuspendedWork to Task ([#21105](facebook/react#21105)) //<Sebastian Markbåge>//
- **[38a1aedb4](facebook/react@38a1aedb4 )**: [Fizz] Add FormatContext and Refactor Work ([#21103](facebook/react#21103)) //<Sebastian Markbåge>//
- **[1b7e471b9](facebook/react@1b7e471b9 )**: React Native New Architecture: Support passing nativeViewTag to getInspectorDataForViewAtPoint callback, for React DevTools compat ([#21080](facebook/react#21080)) //<Joshua Gross>//
- **[4a99c5c3a](facebook/react@4a99c5c3a )**: Use highest priority lane to detect interruptions ([#21088](facebook/react#21088)) //<Andrew Clark>//
- **[77be52729](facebook/react@77be52729 )**: Remove LanePriority from computeExpirationTime ([#21087](facebook/react#21087)) //<Andrew Clark>//
- **[3221e8fba](facebook/react@3221e8fba )**: Remove LanePriority from getBumpedLaneForHydration ([#21086](facebook/react#21086)) //<Andrew Clark>//
- **[05ec0d764](facebook/react@05ec0d764 )**: Entangled expired lanes with SyncLane ([#21083](facebook/react#21083)) //<Andrew Clark>//
- **[03ede83d2](facebook/react@03ede83d2 )**: Use EventPriority to track update priority ([#21082](facebook/react#21082)) //<Andrew Clark>//
- **[a63f0953b](facebook/react@a63f0953b )**: Delete SyncBatchedLane ([#21061](facebook/react#21061)) //<Ricky>//
- **[fa868d6be](facebook/react@fa868d6be )**: Make opaque EventPriority type a Lane internally ([#21065](facebook/react#21065)) //<Andrew Clark>//
- **[eb58c3909](facebook/react@eb58c3909 )**: react-hooks/exhaustive-deps: Handle optional chained methods as dependency ([#20204](facebook/react#20204)) ([#20247](facebook/react#20247)) //<Ari Perkkiö>//
- **[7b84dbd16](facebook/react@7b84dbd16 )**: Fail build on deep requires in npm packages ([#21063](facebook/react#21063)) //<Dan Abramov>//
- **[2c9d8efc8](facebook/react@2c9d8efc8 )**: Add react-reconciler/constants entry point ([#21062](facebook/react#21062)) //<Dan Abramov>//
- **[d0eaf7829](facebook/react@d0eaf7829 )**: Move priorities to separate import to break cycle ([#21060](facebook/react#21060)) //<Andrew Clark>//
- **[435cff986](facebook/react@435cff986 )**: [Fizz] Expose callbacks in options for when various stages of the content is done ([#21056](facebook/react#21056)) //<Sebastian Markbåge>//
- **[25bfa287f](facebook/react@25bfa287f )**: [Experiment] Add feature flag for more aggressive memory clean-up of deleted fiber trees ([#21039](facebook/react#21039)) //<Benoit Girard>//
- **[8fe7810e7](facebook/react@8fe7810e7 )**: Remove already completed comment ([#21054](facebook/react#21054)) //<Sebastian Markbåge>//
- **[6c3202b1e](facebook/react@6c3202b1e )**: [Fizz] Use identifierPrefix to avoid conflicts within the same response ([#21037](facebook/react#21037)) //<Sebastian Markbåge>//
- **[dcdf8de7e](facebook/react@dcdf8de7e )**: Remove discrete lanes and priorities ([#21040](facebook/react#21040)) //<Andrew Clark>//
- **[ca99ae97b](facebook/react@ca99ae97b )**: Replace some flushExpired callsites ([#20975](facebook/react#20975)) //<Ricky>//
- **[1fafac002](facebook/react@1fafac002 )**: Use SyncLane for discrete event hydration ([#21038](facebook/react#21038)) //<Andrew Clark>//

Changelog:
[General][Changed] - React Native sync for revisions 6d3ecb7...c9aab1c

jest_e2e[run_all_tests]

Reviewed By: JoshuaGross

Differential Revision: D27436763

fbshipit-source-id: da79a41e26bffdcdacd293178062edf098e9b58a
acdlite pushed a commit to acdlite/react that referenced this pull request Apr 11, 2021
* Add onError option to Flight Server

The callback is called any time an error is generated in a server component.

This allows it to be logged on a server if needed. It'll still be rethrown
on the client so it can be logged there too but in case it never reaches
the client, here's a way to make sure it doesn't get lost.

* Add fatal error handling
acdlite pushed a commit to acdlite/react that referenced this pull request Apr 13, 2021
* Add onError option to Flight Server

The callback is called any time an error is generated in a server component.

This allows it to be logged on a server if needed. It'll still be rethrown
on the client so it can be logged there too but in case it never reaches
the client, here's a way to make sure it doesn't get lost.

* Add fatal error handling
acdlite pushed a commit to acdlite/react that referenced this pull request Apr 16, 2021
* Add onError option to Flight Server

The callback is called any time an error is generated in a server component.

This allows it to be logged on a server if needed. It'll still be rethrown
on the client so it can be logged there too but in case it never reaches
the client, here's a way to make sure it doesn't get lost.

* Add fatal error handling
acdlite pushed a commit to acdlite/react that referenced this pull request Apr 16, 2021
* Add onError option to Flight Server

The callback is called any time an error is generated in a server component.

This allows it to be logged on a server if needed. It'll still be rethrown
on the client so it can be logged there too but in case it never reaches
the client, here's a way to make sure it doesn't get lost.

* Add fatal error handling
acdlite pushed a commit to acdlite/react that referenced this pull request Apr 19, 2021
* Add onError option to Flight Server

The callback is called any time an error is generated in a server component.

This allows it to be logged on a server if needed. It'll still be rethrown
on the client so it can be logged there too but in case it never reaches
the client, here's a way to make sure it doesn't get lost.

* Add fatal error handling
koto pushed a commit to koto/react that referenced this pull request Jun 15, 2021
* Add onError option to Flight Server

The callback is called any time an error is generated in a server component.

This allows it to be logged on a server if needed. It'll still be rethrown
on the client so it can be logged there too but in case it never reaches
the client, here's a way to make sure it doesn't get lost.

* Add fatal error handling
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.

None yet

4 participants