First off: gRPC Gateway is awesome. We've been using it in Prod since time immortal.
We're currently adding gRPC timeouts throughout our stack, to make sure that hanging connections don't happen. grpc-timeout is a first class citizen in all gRPC implementations (see http://www.grpc.io/docs/guides/wire.html), and in case of gRPC-Go it is propagated using the context.Deadline in the gRPC client.
We tries enabling deadliens by passing a context.WithTimeout through RegisterMyFooServiceHandler, but unfortunately this lead to all our REST-originating gRPC requests to timeout immediately. That's because context.WithTimeout is implemented through context.WithDeadline from time.Now() of the server initialization :(
Unfortunately gRPC ClientConn doesn't support default context timeouts, so we want to work around it as follows:
We'd be happy to send in a patch that would:
runtime.AnnotateContext extract a header Grpc-Timeout and set it into the context.WithTimeoutGrpc-Timeout header, it'd use a static variable that controls the timeout runtime.DefaultTimeout = 0 (similar to runtime.HTTPError), which by default would disable the behaviourWhat do you think? We're happy to provide this as a PR :)
Sounds reasonable. I love to see the PR.
Done with #155
I think it would be useful to have different defaults for stream vs regular requests.
Most helpful comment
Done with #155