HBASE-10566, we have an explicit call timeout available in the client.
We could forward it to the server, and use this information for:
- if the call is still in the queue, just cancel it
- if the call is under execution, makes this information available in RpcCallContext (actually change the RpcCallContext#disconnectSince to something more generic), so it can be used by the query under execution to stop its execution
- in the future, interrupt it to manage the case 'stuck on a dead datanode' or something similar
- if the operation has finished, don't send the reply to the client, as by definition the client is not interested anymore.
From this, it will be easy to manage the cancellation: disconnect/timeout/cancellation are similar from a service execution PoV