grpc / grpc/grpc-java

StatusException: UNAVAILABLE on client when maxConnectionAge is set on server

Open
#9,566 27 comments 6 reactions 0 assignees View on GitHub
bug
Dominant language
Java
Stars
12.1k
Forks
4k
Avg merge
2d 17h
Merged PRs (30d)
37

Description

### What version of gRPC-Java are you using?
1.49.0
Also grpc-kotlin 1.3.0

### What is your environment?

MacOS 12.5.1 with OpenJdk 17.0.2
Ubuntu 18.04.3 with OpenJdk 17.0.3

### What did you expect to see?
GRPC NettyServer is configured with `maxConnectionAge` of 1 second and `maxConnectionAgeGrace` of 300 seconds. Client sends requests with large response size (4 MB). Client receives responses successfully.

### What did you see instead?
Eventually the client throws `io.grpc.StatusException: UNAVAILABLE` after receiving `GOAWAY` from the server. We first saw this behavior with large request size on our production and testing environments running on Linux. Then we were able to reproduce using a minimal project with large response size on MacOS.

### Steps to reproduce the bug
* Clone the project from https://github.com/usischev/grpc_poc
* Run the `main()` function in `Main.kt`, or `./gradlew run`
* There are blocking and coroutine (kotlin) server and client configurations in the code, see README.md. All configurations trigger the exceptions eventually.
* Error logs can be seen in https://github.com/usischev/grpc_poc/tree/master/logs

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.