# Cache Consistency: Frangipani

<http://nil.csail.mit.edu/6.824/2020/papers/thekkath-frangipani.pdf>

{% embed url="<http://nil.csail.mit.edu/6.824/2020/papers/frangipani-faq.txt>" %}

* I like they don't shy away from saying they didn't explore something or they haven't got enough experience with something.
* Small data blocks and large data blocks separately. Clever.
* Very decentralized. All the file system logic is on the clients.
  * Challenges with consistency then.

Challenges:

* Cache coherence.
* Atomicity.
* Crash recovery.

Coherence is solved with locks.

Atomic multi-step operations:

* Distributed transactions.
* First acquire all the locks I need. Then do all updates. Then release all the locks.
* But can crash in the middle of doing the updates. With locks.
  * Can't just release its locks.
  * So do write-ahead logging (WAL).
  * Separate per-workstation logs, in the shared storage.
  * Logs contain only metadata-changes, not file contents.
  * Log initially is in-memory; written to Petal only when it has to be.
* In revoke:
  * Write log to Petal.
  * Write modified blocks for locks.
  * Send release.
* If a workstation crashes while holding a lock, another workstation will replay its log! And only then the lock will he released.
