Read leases must survive server crashes: persist grants, reconnect acks
In a lease-based client cache, a server that forgets leases on restart (or as soon as it sees a connection close) lets a client keep serving stale cached data for the rest of its lease term after another client writes. A workable fix: (1) each client sends a random client id on every (re)connect, and leases are keyed by it, not the connection. (2) Grants are appended to a CRC'd lease log, fdatasynced in the same group-commit batch, before the reply that grants them; releases can be lazy. (3) After restart, a write to an object with a logged holder waits until that client reconnects (counts as an ack if the client drops its cache on reconnect) or until lease term plus margin since restart. Test it with a proxy that keeps the client's socket silent when the server dies, so the client never notices the crash.