-
Notifications
You must be signed in to change notification settings - Fork 11k
Open
Description
What version of gRPC and what language are you using?
1.24.3
What operating system (Linux, Windows,...) and version?
Linux - Ubuntu 14.04 (GCE instance)
What runtime / compiler are you using (e.g. python version or version of gcc)
Go - 1.13
What did you do?
If possible, provide a recipe for reproducing the error. Try being specific and include code snippets if helpful.
- Connect to remotebuildexecution endpoint (remotebuildexecution.googleapis.com:443) using github.com/bazelbuild/remote-apis-sdks (https://github.com/bazelbuild/remote-apis-sdks/blob/master/go/pkg/client/client.go#L185)
- Make ~500 concurrent requests to Execute() streaming API with "sleep 45" command using a single connection (as seen in the code for Dial() linked in (1) ). API proto - https://github.com/bazelbuild/remote-apis/blob/master/build/bazel/remote/execution/v2/remote_execution.proto#L106 .
What did you expect to see?
All the 500 rpc's execute in parallel
What did you see instead?
Only 100 rpc's run concurrently, the remaining 400 block until the first 100 finishes running.
Anything else we should know about your project / environment?
- We previously reported a similar issue for the Java client at Use multiple connections to avoid the server's SETTINGS_MAX_CONCURRENT_STREAMS limit #11704 - the work around suggested does not work for us now since the DNS name resolution returns IPv6 addresses, which don't resolve on GCE instances (which is where our client would run). We get a
Immediate connect fail for 2a00:1450:400c:c06::93: Network is unreachableerror when we try to connect to IPv6 addresses. - The grpc-go client has a similar issue reported in its repository - Control MAX_CONCURRENT_STREAMS server-side and account for it on client-side grpc-go#2412. It also has a comment about the work involved in the Go client for the feature.
- Ideally we would like to avoid having to manage multiple connections (connection pool) in our client.
Also this issue is blocking our Go client (which we are writing for our API) from achieving high parallelism, which makes the client less useful to our customers.
oneiros-de, mrnonz, Riki1312, hexfusion, kaijchen and 26 more