Skip to content
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

core: DelayedStream should start() real stream immediately #7750

Merged
merged 3 commits into from Jan 20, 2021

Conversation

ejona86
Copy link
Member

@ejona86 ejona86 commented Dec 22, 2020

DelayedClientTransport needs to avoid becoming terminated while it owns
RPCs. Previously DelayedClientTransport could terminate when some of its
RPCs had their realStream but realStream.start() hadn't yet been called.

To avoid that, we now make sure to call realStream.start()
synchronously with setting realStream. Since start() and the method
calls before start execute quickly, we can run it in-line. But it does
mean we now need to split the Stream methods into "before start" and
"after start" categories for queuing.

Fixes #6283

CC @voidzcy

DelayedClientTransport needs to avoid becoming terminated while it owns
RPCs. Previously DelayedClientTransport could terminate when some of its
RPCs had their realStream but realStream.start() hadn't yet been called.

To avoid that, we now make sure to call realStream.start()
synchronously with setting realStream. Since start() and the method
calls before start execute quickly, we can run it in-line. But it does
mean we now need to split the Stream methods into "before start" and
"after start" categories for queuing.

Fixes grpc#6283
@ejona86
Copy link
Member Author

ejona86 commented Dec 22, 2020

A test will be added as part of #7749

@YifeiZhuang
Copy link
Contributor

YifeiZhuang commented Jan 6, 2021

We went through the flow, and here is an over simplified chart to illustrate why RPCs will never be orphaned after the fix.
delayed stream start then set
delayed stream set then start

FYI @dapengzhang0

Copy link
Member

@dapengzhang0 dapengzhang0 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. A couple of minor comments.

@ejona86 ejona86 merged commit 7b8105e into grpc:master Jan 20, 2021
@ejona86 ejona86 deleted the delayedtransportshutdownrace branch January 20, 2021 23:01
YifeiZhuang added a commit that referenced this pull request Jan 29, 2021
Add more delayedStream tests related to #7750, where we changed to call realStream.start() synchronously with setting realStream.
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Jun 3, 2021
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

DelayedClientTransport can trigger RejectedExecutionException
3 participants