-
-
Notifications
You must be signed in to change notification settings - Fork 55
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: allow optional abs_path and lineno for JsFrame #1581
base: master
Are you sure you want to change the base?
fix: allow optional abs_path and lineno for JsFrame #1581
Conversation
829c938
to
13cc9d3
Compare
13cc9d3
to
2b799fe
Compare
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #1581 +/- ##
==========================================
- Coverage 76.09% 73.59% -2.50%
==========================================
Files 101 105 +4
Lines 15262 15912 +650
==========================================
+ Hits 11613 11710 +97
- Misses 3649 4202 +553 |
Co-authored-by: David Herberth <[email protected]>
Co-authored-by: David Herberth <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just left some small Rust nits, otherwise looks good to me, but I want to wait on @loewenheim for a review, since I can't really judge the implications of the change fully.
Also would be great if you can add a test, I think symbolicator-js/tests/integration/sourcemap.rs
should be the right place and pretty low effort to add.
@@ -154,7 +162,7 @@ async fn symbolicate_js_frame( | |||
.map(|entry| entry.sourcemap_url()) | |||
.ok() | |||
.flatten() | |||
.unwrap_or_else(|| raw_frame.abs_path.clone()); | |||
.unwrap_or_else(|| raw_frame.abs_path.clone().unwrap_or_default()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can use abs_path.to_owned()
here now, I think, since we already checked for Some
before.
.unwrap_or_else(|| raw_frame.abs_path.clone().unwrap_or_default()); | |
.unwrap_or_else(|| abs_path.to_owned()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I had to revert this in 12d1d5e to fix a compilation error
error[E0502]: cannot borrow `*raw_frame` as mutable because it is also borrowed as immutable
--> crates/symbolicator-js/src/symbolication.rs:145:17
|
105 | ...ath = raw_frame
| __________-
106 | | ...path
| |_______- immutable borrow occurs here
...
145 | ... apply_source_context(raw_frame, minified_source.contents(...
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
...
163 | ...ap_or_else(|| abs_path.to_owned());
| -------- immutable borrow later captured here by closure
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If you clone abs_path
at the top of the function this just becomes
.unwrap_or_else(|| raw_frame.abs_path.clone().unwrap_or_default()); | |
.unwrap_or(abs_path.clone()); |
Co-authored-by: David Herberth <[email protected]>
Co-authored-by: David Herberth <[email protected]>
Co-authored-by: David Herberth <[email protected]>
@Dav1dde @loewenheim Our product will start receiving a higher volume of these unsymbolicated call stacks next week. Is there a timeline we can follow for how soon an update to the symbolicator service might be deployed by Sentry? |
@samuelmaddock I was under the impression that you wanted this because you are running Symbolicator yourself, did I misunderstand that? On Sentry's side nothing will immediately change even when this is deployed—we don't send frames without |
@@ -154,7 +162,7 @@ async fn symbolicate_js_frame( | |||
.map(|entry| entry.sourcemap_url()) | |||
.ok() | |||
.flatten() | |||
.unwrap_or_else(|| raw_frame.abs_path.clone()); | |||
.unwrap_or_else(|| raw_frame.abs_path.clone().unwrap_or_default()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If you clone abs_path
at the top of the function this just becomes
.unwrap_or_else(|| raw_frame.abs_path.clone().unwrap_or_default()); | |
.unwrap_or(abs_path.clone()); |
@loewenheim Maybe I'm misunderstanding the underlying problem in that case. We have call stacks being sent to Sentry which are formatted like the example in the PR description. Our events within our non-self-hosted Sentry are not being symbolicated. I copied the
My hope was that by fixing this issue in the symbolicator service, it will also fix it in Sentry once the fix has been deployed. It's possible we've made a configuration error which is preventing symbolication, but it has been working for other events. Is there a better place we could raise this issue? |
Oh shoot, in that case there's been a miscommunication. No, SaaS is already robust against stack frames without |
fixes #1580
It's possible for V8 to format a JS frame location to only contain
<anonymous>
(see AppendFileLocation). In such cases, JSON deserialization should pass, but symbolification should fail.Here's an example call stack this addresses:
Also, this is the first Rust code I've written so please lmk what can be improved!