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

[5.x] Remote: Don't blocking-get when acquiring gRPC connections. #14421

Conversation

brentleyjones
Copy link
Contributor

With recent change to limit the max number of gRPC connections by default, acquiring a connection could suspend a thread if there is no available connection.

gRPC calls are scheduled to a dedicated background thread pool. Workers in the thread pool are responsible to acquire the connection before starting the RPC call.

There could be a race condition that a worker thread handles some gRPC calls and then switches to a new call which will acquire new connections. If the number of connections reaches the max, the worker thread is suspended and doesn't have a chance to switch to previous calls. The connections held by previous calls are, hence, never released.

This PR changes to not use blocking get when acquiring gRPC connections.

Fixes #14363.

Closes #14416.

PiperOrigin-RevId: 416282883
(cherry picked from commit ad663a7)

With recent change to limit the max number of gRPC connections by default, acquiring a connection could suspend a thread if there is no available connection.

gRPC calls are scheduled to a dedicated background thread pool. Workers in the thread pool are responsible to acquire the connection before starting the RPC call.

There could be a race condition that a worker thread handles some gRPC calls and then switches to a new call which will acquire new connections. If the number of connections reaches the max, the worker thread is suspended and doesn't have a chance to switch to previous calls. The connections held by previous calls are, hence, never released.

This PR changes to not use blocking get when acquiring gRPC connections.

Fixes bazelbuild#14363.

Closes bazelbuild#14416.

PiperOrigin-RevId: 416282883
(cherry picked from commit ad663a7)
@brentleyjones brentleyjones requested a review from a team as a code owner December 14, 2021 14:11
@brentleyjones
Copy link
Contributor Author

@coeuvre @Wyverald

@brentleyjones brentleyjones changed the title 5.x: Remote: Don't blocking-get when acquiring gRPC connections. [5.x] Remote: Don't blocking-get when acquiring gRPC connections. Dec 14, 2021
@brentleyjones
Copy link
Contributor Author

brentleyjones commented Dec 14, 2021

Closing mine in favor of @coeuvre's: #14420.

@brentleyjones brentleyjones deleted the bj/remote-don-t-blocking-get-when-acquiring-grpc-connections branch December 14, 2021 14:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants