-
Notifications
You must be signed in to change notification settings - Fork 923
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 RequestContext propagation and callback invocation #220
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
trustin
force-pushed
the
fix_context_propagation
branch
from
August 9, 2016 06:29
2bde003
to
b07d655
Compare
LGTM |
Current coverage is 64.11% (diff: 60.37%)@@ master #220 diff @@
==========================================
Files 274 277 +3
Lines 10523 10574 +51
Methods 0 0
Messages 0 0
Branches 1520 1525 +5
==========================================
+ Hits 6686 6780 +94
+ Misses 3099 3059 -40
+ Partials 738 735 -3
|
LGTM~ |
Motivation: We currently use RequestContext.push(..) to propagate a RequestContext to a non-I/O thread or to replace the current context with another. When propagating a RequestContext a non-I/O thread, the onEnter and onExit callbacks must be invoked, while they should not be invoked when replacing a context. RequestContext.push(...) currently never invokes the callbacks, which can lead to inconsistent state transition between threads. Modifications: - Modify RequestContext.push() so that the caller can choose to call the callbacks, where the default behavior is to call the callback - Add RequestContext.invokeOnEnter/ExitCallbacks() - Reorganize the type hierarchy of RequestContext and its subtypes - Split AbstractRequestContext into: - AbstractRequestContext - NonWrappingRequestContext extends AbstractRequestContext - Default*RequestContext extend NonWrappingRequestContext - Add RequestContextWrapper that extend AbstractRequestContext - Rewrite ServiceRequestContextWrapper using RequestContextWrapper - Add ClientRequestContextWrapper - Fix a bug where THttpService does not push its context when calling its delegate such as ThriftCallService - Fix a bug where ThriftCallService pushes its context unnecessarily - Fix a bug where AbstractCompositeService does not push its context wrapper - Add HttpTracingIntegrationTest which ensures that Zipkin/Brave's thread-local variables are transferred correctly. - Miscellaneous - Unignore RequestContextTest.contextAwareEventExecutor() Result: - RequestContext propagation works as expected - Call tracing of nested calls works as expected
trustin
force-pushed
the
fix_context_propagation
branch
from
August 9, 2016 06:53
b07d655
to
c9b17f3
Compare
I checked the tests, and LGTM |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Motivation:
We currently use RequestContext.push(..) to propagate a RequestContext
to a non-I/O thread or to replace the current context with another.
When propagating a RequestContext a non-I/O thread, the onEnter and
onExit callbacks must be invoked, while they should not be invoked when
replacing a context.
RequestContext.push(...) currently never invokes the callbacks, which
can lead to inconsistent state transition between threads.
Modifications:
callbacks, where the default behavior is to call the callback
its delegate such as ThriftCallService
wrapper
thread-local variables are transferred correctly.
Result: