gRPC Ruby Server seemingly not respecting configured retry policy
What version of gRPC and what language are you using?
ruby 3.1.2 grpc 1.62.0
What operating system (Linux, Windows,...) and version?
System Version: macOS 14.4.1 (23E224) Kernel Version: Darwin 23.4.0
What runtime / compiler are you using (e.g. python version or version of gcc)
ruby 3.1.2
gcc --version
Apple clang version 15.0.0 (clang-1500.3.9.4)
Target: arm64-apple-darwin23.4.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
What did you do?
In the course of doing some work on gRPC ruby clients with configured retryPolicies (https://github.com/grpc/proposal/blob/master/A6-client-retries.md) I was unable to see the retry policy getting respected by the server implementation.
At first- I assumed this was an issue on the client side. To rule that out I
- created a python server that serves the same API
- ran the same configured retry client against the python implementation and was able to see the configured retry policy work as expected
I believe this issue is on the gRPC ruby server side. I have started to dig through some of the trace logs, but honestly I am not sure where to start this investigation. https://github.com/grpc/grpc/blob/master/TROUBLESHOOTING.md
I have pushed my testing apps here: https://github.com/paigeruppel-upstart/simple-grpc-rb https://github.com/paigeruppel-upstart/simple-grpc-py
With READMEs that outline how to run each against themself and against one another.
I have not pushed my Kotlin/SpringBoot testing app - but I am seeing the same behavior there as well.
What did you expect to see?
| service_config retry client lang | server lang | result |
|---|---|---|
| ruby | ruby | retried |
| python | ruby | retried |
| ruby | python | retried |
| python | python | retried |
What did you see instead?
| service_config retry client lang | server lang | result |
|---|---|---|
| ruby | ruby | NOT retried |
| python | ruby | NOT retried |
| ruby | python | retried |
| python | python | retried |
Anything else we should know about your project / environment?
for the above test repos - you can also run the "manual_retry_client" against the SimpleRetryAPI - I used this to ensure that the underlying implementation was behaving as expected.
I hopefully have made this easy to reproduce. I'm at a loss currently but I will post any updates here if I can pinpoint the issue and/or what I may be doing incorrectly. Thanks!
Source: grpc/grpc