If You Send a Request and Get No Response, You Cannot Tell Why
Figure 9-1 in three timelines: (a) the request is lost · (b) the node is down · (c) the response is lost — the client cannot tell them apart
(a) The request is lost on the network
Client
Remote Node
request
dropped
never arrives — the node is healthy and waiting
timeout fires: still no reply
the client only observes
"no response yet"
(b) The remote node has crashed
Client
Remote Node
request
crashed / powered off
the request may be lost, queued, or delivered to nobody
timeout fires: still no reply
the client only observes
"no response yet"
(c) The node works, but the response is lost
Client
Remote Node
request — applied successfully
response
lost
the write already happened
timeout fires: still no reply
the client only observes
"no response yet"
The only fact the client has
"No reply has arrived yet." A timeout is a guess, not proof of failure — and in case (c) the effect is already applied, so a blind retry can do the work twice.