grpc / grpc-swift

The Swift language implementation of gRPC.
Apache License 2.0
2.05k stars 420 forks source link

How to check if client cancelled / deadline exceeded #1591

Open t089 opened 1 year ago

t089 commented 1 year ago

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?

glbrntt commented 1 year ago

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.

t089 commented 1 year ago

That sound's great, thank you!