Client Recovery (cont’d)
// Let R be id of client’s last request
// Assume client persistently stores R before submitting request
Connect to request and reply queues;
If (id of last request message enqueued ? R)
elseif (id of last reply message dequeued ? R)
{ dequeue (and wait for) reply with id R }
else // R was fully processed, nothing to recover
- Now client can figure out
- A – if last enqueued request is not R
- D – if last dequeued reply is R
- B – no evidence of R and not in states A, C, or D.