Enable tighter attribution of exceptions to spans #1380
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
This work was done while pairing with @mattdailis. As Matt describes it:
This PR preserves the one-to-many relationship between tasks and spans that is key to the memory gains of #1174. Morally, it just makes it so that
scoped()
accepts aTask
(Factory
) rather than a mereRunnable
, which gives us finer-grained visibility into when exceptions cross span boundaries. A task is "just" a simulation-aware runnable, anyway!As a bonus, because of this increased visibility into the model, we were able to remove the somewhat convoluted logic surrounding
shadowedSpans
. This is because every span is created for some task (even if more are attached to it later), so it is now simply impossible for a task to enter a span other than the one it was spawned into.Verification
This PR is opened from a branch in the Aerie repo, so we can actually watch the tests pass or fail!
Documentation
The
ModelActions.scoped()
method has been replaced byModelActions.callWithSpan()
, along with a small menagerie of similar methods.Future work
Ideally, reporting the span in which an exception occurred would allow finer-grained debugging when attempting to suss out the source of an issue. This is also in-line with a future intention to propagate exceptions (and return values) from a called task to its caller.