envoyproxy / envoyproxy/envoy

Support for gRPC retries based on trailers

Open
#11,049 10 comments 0 reactions 0 assignees View on GitHub
area/grpc area/retry help wanted
Dominant language
C++
Stars
28.9k
Forks
5.6k
Avg merge
1d 20h
Merged PRs (30d)
437

Description

I have an application that uses gRPC for bidirectional client <-> server communication which passes through envoy. I spent some time trying to set up a configuration where I made use of `x-envoy-retry-grpc-on` with a value of `deadline-exceeded`, however this does not appear to work as far as I can tell.

I found this previous issue that looked like a similar problem but I wasn't able to find anything there that helped me resolve my problem: https://github.com/envoyproxy/envoy/issues/7413

The last comment on that issue is exactly what I'm hoping to get clarification on. From what I can tell gRPC always sends `grpc-status` as a trailer and does not send it as a response header. In the bidirectional streaming case, gRPC will send back response headers and then data will continue to flow back to the client until the connection is closed and the trailers are sent.

This effectively makes the gRPC retries non-functional for streaming use-cases unless I'm misunderstanding or possibly have this misconfigured?

Ideally I would like to configure a deadline in my server that will cause the connection to reconnect without propagating all the way back to the client. This is an attempt to help resolve load balancing issues for these long-lived streaming gRPC connections.

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.