Avoid request threads on AppEngine Java 8#3382
Merged
ejona86 merged 1 commit intogrpc:masterfrom Aug 24, 2017
Merged
Conversation
While the code had correctly determined full threads were available, the call to MoreExecutors returned a request thread factory, which has limitations. Note that Async stub users may not be able to call GAE APIs in callbacks. This is because the threads aren't request threads. They can override the individual call's executor with com.google.appengine.api.ThreadManager.currentRequestThreadFactory() in an interceptor via callOptions.withExecutor(). Fixes grpc#3296
Member
Author
|
@ejona86 with this change, the NPE is fixed. However, I got an |
Member
Author
|
@neozwu, thanks. We'll go ahead and merge this and backport it to the upcoming release. |
zpencer
approved these changes
Aug 24, 2017
This file contains hidden or 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
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
While the code had correctly determined full threads were available, the
call to MoreExecutors returned a request thread factory, which has
limitations.
Note that Async stub users may not be able to call GAE APIs in
callbacks. This is because the threads aren't request threads. They can
override the individual call's executor with
com.google.appengine.api.ThreadManager.currentRequestThreadFactory() in
an interceptor via callOptions.withExecutor().
Fixes #3296
@neozwu, can you test this?
As a user, I think I'd expect the Async API callbacks to be done or request threads. But this isn't very feasible to configure automatically because the executor would need to "save" the environment when a new call is created and re-associate callbacks with it. It'd be easy to override blindly, but then users couldn't override the executor.