-
-
Notifications
You must be signed in to change notification settings - Fork 6
Introduce additional types of exceptions next to mechanism.handled exceptions
#10
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
base: main
Are you sure you want to change the base?
Changes from 6 commits
ec02bbd
3505f7c
34a4940
a89911e
95844a0
242e29c
6659ed3
593abcd
6945acd
b6d2275
06efd2e
49b470a
9c4cc0b
4da10aa
9021551
69ec250
4c511a7
3aebc4f
ff8f808
3799712
3304a01
677b1d3
3485305
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,75 @@ | ||
| * Start Date: 2022-09-17 | ||
| * RFC Type: feature | ||
| * RFC PR: 0010 | ||
| * RFC Status: draft | ||
|
|
||
| # Summary | ||
|
|
||
| This RFC suggests a feature which introduces additional types of exceptions next to `unhandled`. | ||
|
|
||
| # Motivation | ||
|
|
||
| Currently, exception which cause the running software to exit are marked as `unhandled: true`. This isn't enough for SDKs where an exception can be unhandled but at the same time doesn't cause the software to exit. | ||
ueman marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
|
||
| Sentry shows exceptions which aren't caught but also do not cause the software to exit in the same way as exceptions which are manually caught by a developer. This seems rather unintuitive and makes exceptions seem less severe than they are. | ||
ueman marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
|
||
| This issue impacts for example the [Dart/Flutter SDK](https://github.com/getsentry/sentry-dart/issues/456), the Unity SDK, the React Native SDK and possibly more. | ||
|
|
||
| Another issue is, that excpetions which don't cause the application to exit but are uncaught, are not considered in the [`session health` metric](https://develop.sentry.dev/sdk/sessions/). | ||
ueman marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
|
||
| # Proposal | ||
marandaneto marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
|
||
| Based on the problem stated above, I propose to introduce the types of `handled`, `unhandled`, `process termination` (this is the same as the current `unhandeld`, but rephrased to avoid confusion). I'm open for better phrasing of those types, but I'll stick to those names for the rest of the RFC. The meaning of those types is as follows: | ||
ueman marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
|
||
| - `handled`: The exception was recorded by a developer via `Sentry.capture*` method. May or may not be visually indicated by the Sentry user interface. | ||
| - `unhandled`: Indicates whether the exception was recorded automatically by Sentry through the use of a global exception handler or similar. This exception however didn't cause the software to exit, and the software will continue to be executed. This should be visualized in the Sentry user interface. | ||
| - `process termination`: The exception was recorded automatically by Sentry through the use of a exception handler or similar. The exception caused the software to terminate the execution. This should be visualized in the Sentry user interface. This is currently done by the `unhandled` flag in the [exception mechanism](https://develop.sentry.dev/sdk/event-payloads/exception/#exception-mechanism). | ||
ueman marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
|
||
| In order to propagate those exception types, the exception mechanism needs to be adapted: | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I like this option more, because it is backwards compatible. |
||
|
|
||
| ```json | ||
| { | ||
| "exception": { | ||
| "values": [ | ||
| { | ||
| "type": "Error", | ||
| "value": "An error occurred", | ||
| "mechanism": { | ||
| "type": "generic", | ||
| "handled": true, | ||
| "process_terminated": false // <--- newly introduced field | ||
| } | ||
| } | ||
| ] | ||
| } | ||
| } | ||
| ``` | ||
|
|
||
| In order to achieve backwards compatibility, in the absence of the `process_termination` flag, the current behavior stays as is. | ||
| As soon as the `process_terminated` flag is present the bavior is as follows: | ||
|
|
||
| - `handled = true` and `process_terminated = true`: Software was gracefully shut down after an handled exception | ||
marandaneto marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| - `handled = true` and `process_terminated = false`: Exception is not handled by the user but didn't cause the software to terminate. Same as `unhandled` in the list above | ||
ueman marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| - `handled = false` and `process_terminated = true`: Software terminated after an unhandled exception. Same as `process termination` in the list above | ||
| - `handled = true` and `process_terminated = false`: Exception was reported via `Sentry.capture*()` method. Same as `handled` in the list above. | ||
|
|
||
| In the absence of the `handled` or its value being null, it's assumed to be `handled = true`. | ||
marandaneto marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
|
||
|
|
||
| The introduction of the `process_terminated` flag enables the consideration of such exception types in the `session health` metric. | ||
|
|
||
| I'm guessing this affects data ingestion layer, but since I'm not familiar with that part, I can't comment on the impact theses changes would have on that. | ||
marandaneto marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
|
||
| # Other options considered | ||
marandaneto marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
marandaneto marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
|
||
| Unhandled exceptions, which don't cause a process termination, are considered like exceptions which cause the process to terminate. | ||
| That would however make it impossible to differentiate between those exception types in the `session health` metric. | ||
marandaneto marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
|
||
| # Approaches taken by other monitoring tools | ||
|
|
||
| - Crashlytics just differentiates between manually caught exceptions and unhandled exceptions, regardless of wether they cause the process to terminate. | ||
marandaneto marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
ueman marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
|
||
| # Unresolved Questions | ||
|
|
||
| - Which SDKs would profit from this RFC? Is it the majority, a good chunk of it, or just the minory? | ||
marandaneto marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| - Are there any other exception types next to the ones metioned in this RFC? | ||
marandaneto marked this conversation as resolved.
Show resolved
Hide resolved
ueman marked this conversation as resolved.
Show resolved
Hide resolved
|
||
Uh oh!
There was an error while loading. Please reload this page.