grpc-swift icon indicating copy to clipboard operation
grpc-swift copied to clipboard

How to check if client cancelled / deadline exceeded

Open t089 opened this issue 1 year ago • 2 comments

From the gRPC docs:

On the server side, the server can query to see if a particular RPC is no longer wanted. Before a server starts work on a response it is very important to check if there is still a client waiting for it. This is especially important to do before starting expensive processing.

How can I check in Swift on the server side, if the client cancelled the request or the client provided deadline exceeded? The GRPCAsyncServerCallContext does not seem to give much info on this.

Related, is the deadline passed to the server so that I can use it as a deadline for other dependent calls?

t089 avatar Apr 19 '23 07:04 t089

How can I check in Swift on the server side, if the client cancelled the request...

If the client cancels then the stream will be closed and the Task executing the server handler will be cancelled.

...or the client provided deadline exceeded? The GRPCAsyncServerCallContext does not seem to give much info on this.

We don't currently monitor this on the server side; if the client set a timeout the 'grpc-timeout' header will be set, so it should be possible to parse that into a timeout which in turn can be made into a deadline. We don't currently have code to do that but it shouldn't be too difficult to do.

glbrntt avatar Apr 19 '23 09:04 glbrntt

That sound's great, thank you!

t089 avatar Apr 20 '23 20:04 t089