Reduce scope forking when using OpenTelemetry #4565
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
We are now re-wrapping
Context
afterwith
has been called on the wrapped context. We do not perform any additional scope forking in this case.We now also wrap the root context immediately.
💡 Motivation and Context
Previously our scope forking logic kicked in more often than desired because our wrapped
Context
would be converted to a newArrayBasedContext
on every invocation ofwith
that didn't set a span.This broke our
withScope
(and siblings) where we were passing a forked scope into the callback but when making the forkedScopes
the current ones, our OpenTelemetry wrapper would also fork again. This caused the parameter passed into the callback ofwithScope
to be different fromSentry.getCurrentScopes().getScope()
.This change also reduces scope forking, when
Context
is being written to like this:Previously this would have caused the scopes to be forked later.
💚 How did you test it?
📝 Checklist
sendDefaultPII
is enabled.🔮 Next steps