mirror of https://github.com/grpc/grpc-java.git
A new RPC starts with the following steps: 1. Pick a READY transport 2. the READY transport calls `transport.newStream()` 3. the new stream calls `stream.start()` 4. `stream.start()` invokes or enqueus `writeHeaders()` (or for GET request, noop) A racy GOAWAY could happen between 3 and 4, and by the retry spec, the RPC should be transparent-retry-able in this case. For Netty and OkHttp transport implementation, before step 4, (even if step 1, 2, and 3 excluding 4 are made atomic,) the http2-stream for the RPC is not created, so the current transparent retry logic does not apply and need fix. Of course, if step 1, 2, and 3 including 4 are made atomic, and not with GET, there will be no such problem. |
||
|---|---|---|
| .. | ||
| shaded | ||
| src | ||
| BUILD.bazel | ||
| build.gradle | ||