Client Recovery
If a client times out waiting for a reply, it can determine the state of the request from the queues
- request is in Q1, reply is in Q2, or request is executing
Assume each request has a globally unique ID
If client fails and then recovers, a request could be in one of 4 states:
- A. Txn1 didn’t commit – no message in either queue.
- B. Txn1 committed but server’s Txn2 did not – request is either in request queue or being processed
- C. Txn2 committed but Txn3 did not – reply is in the reply queue
- D. Txn3 committed – no message in either queue